1.7k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo zusammen,

meine Frage dreht sich um Excel 2007.

Wir haben zwei Dateien unterschiedlicher inhalticher Größe.

Die großte Datei enthält alle Datensätze, die kleinere Datei enthält nur Datensätze die entfernt werden sollen.

Wir würden nun gerne eine Funktion nutzen, die anhand der kleineren Datei die Datensätze aus der großen Gesamtdatei entfernt, so dass nur das bleibt was nicht entfernt werden soll.

Bildhaft:

Große Datei enthält: 1,2,3,4

Kleine Datei enthält: 2,4

Nach dem Ablgeich enthält die große Datei nur noch 1, 2

Wäre super, wenn es so etwas geben würde, ich habe bei google leider nur Funktionen gefunden, die beide Datensätze hervorhebt oder einen der beiden doppelten entfernt.

Viele Grüße

Sascha

7 Antworten

0 Punkte
Beantwortet von
Vertippsler: Meinte natürlich dass die Datei dann noch 1,3 enthält.
0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo Sascha,

mit einer Funktion kannst du keine Datensätze löschen.

Wie du schon richtig geschrieben hast, kannst du eine Funktion nutzen, um die Datensätze, die in beiden Tabellen vorhanden sind, z.B. in der großen Datei farblich zu markieren.
Dann kannst über einen Autofilter nach der Farbe filtern und die gefilterten Daten löschen.

Du schreibst
.. oder einen der beiden doppelten entfernt .

Das wäre wohl ein Makro, und warum ist das nichts für dich?

Gruß

M.O.
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

würde vorschlagen die daten der suchkreterien in ein Array zu legen und danach zu löschen

nach wieviel keterien soll gesucht werden ?

nach 3 krterien,spalte a b c vielleicht ?

gruss nighty
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

genial waere eine buchungsnummer oder aehnliches
das wuerde die Laufzeit bestimmt unter eine sekunde bringen und wir haetten nur ein Kriterium,das ich lieben wuerde ^^

gruss nighty
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

an mo's vorschlag angelehnt

gruss nighty

erste beispiel
ein eindeutiges suchkreterium(z.b. buchungsnummer) wird in spalte a vorrausgesetzt

von der Datei mit der kleinen liste wird das makro gestartet

anzupassen waere der pfad der großen liste
der zur zeit ist
"D:\temp\großedat.xls"

nach der löschaktion wird gespeichert und die Datei wieder geschlossen

gruss nighty


Sub Abgleichkill()
Dim KDat() As Variant, GDat() As Variant
Dim Krit As Long, Ziel As Long
KDat() = Range("A2:A" & ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row)
Workbooks.Open Filename:="D:\temp\großedat.xls"
GDat() = Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row)
For Krit = 1 To UBound(KDat)
For Ziel = 1 To UBound(GDat)
If KDat(Krit, 1) = GDat(Ziel, 1) Then GDat(Ziel, 1) = True
Next Ziel
Next Krit
Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row) = GDat()
Cells(1, 1).AutoFilter Field:=1, Criteria1:=True
Rows("2:" & Cells(Rows.Count, 1).End(xlUp).Row).Delete Shift:=xlUp
Cells(1, 1).AutoFilter
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

ich schreibe den code auch um bei bedarf :-)

durch Ausdehnung der feldelemente hast du endlose Möglichkeiten der kreterien,allerdings keine Vergleichsmöglichkeiten auf aehnlichkeiten

gruss nighty
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

automatisch erfasste kreterienanzahl die sich nach der anzahl der spaltenüberschriften in zeile 1 richtet
die innere schleife gibt mit SPende die spaltenanzahl der keterien an
SPende mit z.b. 3 ersetzt,wäre spalte a bis c als kreteriumfeld

gruss nighty

Sub Abgleichkill()
Dim KDat() As Variant, GDat() As Variant
Dim Krit As Long, Ziel As Long, Wkrit As Long
Dim SPende As Long, Kzaehler As Long, Zaehlerkrit As Long
SPende = ActiveSheet.Range("1:1").End(xlToRight).Column
If SPende = Columns.Count Then SPende = 1
KDat() = Range(Cells(2, 1), Cells(ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row, SPende))
Workbooks.Open Filename:="D:\temp\großedat.xls"
GDat() = Range(Cells(2, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, SPende))
For Krit = 1 To UBound(KDat)
For Ziel = 1 To UBound(GDat)
For Wkrit = 1 To SPende
If KDat(Krit, Wkrit) = GDat(Ziel, Wkrit) Then
Kzaehler = Kzaehler + 1
End If
Next Wkrit
If Kzaehler = SPende Then GDat(Ziel, 1) = True
Kzaehler = 0
Next Ziel
Next Krit
Range(Cells(2, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, SPende)) = GDat()
Cells(1, 1).AutoFilter Field:=1, Criteria1:=True
Rows("2:" & Cells(Rows.Count, 1).End(xlUp).Row).Delete Shift:=xlUp
Cells(1, 1).AutoFilter
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub
...