594 Aufrufe
Gefragt in Tabellenkalkulation von kaipi
Hallo,
es geht um zwei Arbeitsblätter in Excel 2013 in denen ich 2 Spalten vergleichen will.
In der ersten Arbeitsmappe (wksQ) Sheet(1) sind in Spalte D Zahlen. Diese Spalte enthält auch Leerzellen!
Die zweite Arbeitsmappe (wksZ) Sheet(2), Spalte C ist schon mit Daten gefüllt. Zeilen ohne Leerzellen.
Nun soll die Spalte D von wksQ mit der Spalte C von wksZ verglichen werden.
Wenn nun ein Wert von wksQ/Spalte D nicht in wksZ/Spalte C vorkommt,
dann soll von wksQ die Zeile C bis I in die nächste frei Zeile von wksZ von B bis H kopiert werden.
Das ganze würde ich in VBA benötigen.
Habe schon einige Beiträge durchstöbert, aber ich finde einfach nichts passendes.

Gruß,
Gerald

4 Antworten

+1 Punkt
Beantwortet von
Hallo Gerald .-)

Ein Beispiel

Gruß Nighty

Worksheetnamen ergänzen
C-I wird kopiert
C+C wird verglichen,bei nicht fund auf C wird C-I ergänzt

[code]Sub DateiAuslesen()
    Dim Index As Long, Zeile As Long, SpIndex As Long
    Dim SpaArr As Variant
    Dim Suche As Object
    Workbooks.Open Filename:=Application.GetOpenFilename("Dateien(*.xls), *.xls", , "Datei auswählen", , False)
    SpaArr = Worksheets("Tabelle1").Range("C2:I" & Worksheets("Tabelle1").Range("C" & Rows.Count).End(xlUp).Row)
    ActiveWorkbook.Close
    For Index = 1 To UBound(SpaArr, 1)
        Set Suche = Worksheets("Tabelle1").Range("C2:C" & Worksheets("Tabelle1").Range("C" & Rows.Count).End(xlUp).Row).Find(SpaArr(Index, 1))
        If Suche Is Nothing Then
            Zeile = Worksheets("Tabelle1").Range("C" & Rows.Count).End(xlUp).Row + 1
            For SpIndex = 1 To UBound(SpaArr, 2)
                Worksheets("Tabelle1").Cells(Zeile, SpIndex + 2) = SpaArr(Index, SpIndex)
            Next SpIndex
        End If
    Next Index
End Sub[/code]
0 Punkte
Beantwortet von kaipi
Hallo Nighty,
habe es angepasst und funktioniert!
Super, vielen Dank!!

Jetzt habe ich noch ein Problem...
das Tabellenblatt hat sich für das nächste Jahr etwas geändert.
Es sollten wieder Spalten in den beiden Arbeitsmappen verglichen werden.

In diesem Fall, wenn der Wert, z.B. in Zeile 2, Spalte B (PSP-Element) [u]und[/u] Spalte C (EKW-Nr.)
nicht im Arbeistsblatt wksZ Spalte B und C vorkommt, dann sollte die Zeile von wksQ (Budget) Spalte B bis H
ins Arbeitsblatt wksZ (DATA_HW) in die nächste freie Zeile kopiert werden.
Habe es mit einem mehrdimensionalen Array versucht, aber ich kriege es einfach nicht zum laufen.
Vielleicht hättest Du noch ein Beispiel.

Gruß,
Gerald

Arbeitsmappe wksQ (Budget):
[code]
Nr.    PSP-Element     EKW-Nr. Bestellnr.    Betrag  €     Lieferdatum Lieferant    Lieferantennr.
1    P-A001-18-10-1000    2002808420    B34567    1.000,00    31.12.2017    ccc    345678
    P-A001-18-10-1000    2002921056    B98765    1.000,00    31.12.2017    fff    987654
    P-A001-18-10-1000    2002637381    B12345    1.000,00    31.12.2017    aaa    123456
2    P-A002-18-10-1000    2002894108    B45678    1.000,00    31.12.2017    ddd    567890
    P-A002-18-10-1000    2002797310    B23456    1.000,00    31.12.2017    bbb    234567
    P-A002-18-10-1000    2002637381    B12345    1.000,00    31.12.2017    aaa    123456
3    P-A003-18-10-1000    2002921056    B98765    1.000,00    31.12.2017    fff    987654
    P-A003-18-10-1000    2002894108    B45678    1.000,00    31.12.2017    ddd    567890
    P-A003-18-10-1000    2002637381    B12345    1.000,00    31.12.2017    aaa    123456
4    P-A004-18-10-1000    2002808420    B34567    1.000,00    31.12.2017    ccc    345678
    P-A004-18-10-1000    2002901428    B67890    1.000,00    31.12.2017    eee    765432
    P-A004-18-10-1000                       
5    P-A005-18-10-1000    2002894108    B45678    1.000,00    31.12.2017    ddd    567890
    P-A005-18-10-1000    2003017596    B86432    1.000,00    31.12.2017    ggg    864210
    P-A005-18-10-1000    2002637381    B12345    1.000,00    31.12.2017    aaa    123456
6    P-A006-18-10-1000    2002921056    B98765    1.000,00    31.12.2017    fff    987654
    P-A006-18-10-1000    2002894108    B45678    1.000,00    31.12.2017    ddd    567890
    P-A006-18-10-1000    2002637381    B12345    1.000,00    31.12.2017    aaa    123456

[/code]

Arbeitsmappe wksZ (DATA_HW):
[code]
Nr.    PSP-Element    EKW-Nr.    Bestellnr.    Betrag €    Lieferdatum    Lieferant    Lieferantennr.
1    P-A001-18-10-1000    2002637381    B12345    1.000,00    31.12.2017    aaa    123456
2    P-A002-18-10-1000    2002637381    B12345    1.000,00    31.12.2017    aaa    123456
3    P-A003-18-10-1000    2002637381    B12345    1.000,00    31.12.2017    aaa    123456
4    P-A005-18-10-1000    2002637381    B12345    1.000,00    31.12.2017    aaa    123456
5    P-A006-18-10-1000    2002637381    B12345    1.000,00    31.12.2017    aaa    123456
6    P-A002-18-10-1000    2002797310    B23456    1.000,00    31.12.2017    bbb    234567
7    P-A001-18-10-1000    2002808420    B34567    1.000,00    31.12.2017    ccc    345678
8    P-A004-18-10-1000    2002808420    B34567    1.000,00    31.12.2017    ccc    345678
9    P-A004-18-10-1000    2002901428    B67890    1.000,00    31.12.2017    eee    765432
10    P-A001-18-10-1000    2002921056    B98765    1.000,00    31.12.2017    fff    987654
11    P-A003-18-10-1000    2002921056    B98765    1.000,00    31.12.2017    fff    987654
12    P-A006-18-10-1000    2002921056    B98765    1.000,00    31.12.2017    fff    987654
[/code]
0 Punkte
Beantwortet von
Hallo Gerald :-)

Vielleicht so!

Gruß Nighty

[code]Sub DateiAuslesen()
    Dim Index As Long, Zeile As Long, SpIndex As Long
    Dim SpaArr As Variant
    Dim Suche1 As Object, Suche2 As Object
    Workbooks.Open Filename:=Application.GetOpenFilename("Dateien(*.xls), *.xls", , "Datei auswählen", , False)
    SpaArr = Worksheets("Tabelle1").Range("C2:I" & Worksheets("Tabelle1").Range("C" & Rows.Count).End(xlUp).Row)
    ActiveWorkbook.Close
    For Index = 1 To UBound(SpaArr, 1)
        Set Suche1 = Worksheets("Tabelle1").Range("C2:C" & Worksheets("Tabelle1").Range("C" & Rows.Count).End(xlUp).Row).Find(SpaArr(Index, 1))
        Set Suche2 = Worksheets("Tabelle1").Range("D2:D" & Worksheets("Tabelle1").Range("D" & Rows.Count).End(xlUp).Row).Find(SpaArr(Index, 2))
        If Suche1 Is Nothing And Suche2 Is Nothing Then
            Zeile = Worksheets("Tabelle1").Range("C" & Rows.Count).End(xlUp).Row + 1
            For SpIndex = 1 To UBound(SpaArr, 2)
                Worksheets("Tabelle1").Cells(Zeile, SpIndex + 2) = SpaArr(Index, SpIndex)
            Next SpIndex
        End If
    Next Index
End Sub[/code]
0 Punkte
Beantwortet von kaipi
Hallo Nighty,

Genial!!
Funktioniert so, wie ich es mir vorstelle.
Vielen, vielen Dank!

Gruß,
Gerald
...