ooladyluckoo
Goto Top

Excel Makro Tabellen vergleichen und Werte vervollständigen

Hallo! Ich suche dringend Hilfe..

Es geht um eine Excel Datei z.b. (test.xls) mit mehreren Inhalten.

(In der ersten Zeile steht natürlich immer die Überschrift)

Spalte A bis D beinhalten die Artikelnummer (A=123,B=456,C=789,D=000) Die komplette Artikelnnummer lautet also: 123456789000.

Spalte E bis J beinhalten Informationen über das Produkt. (E=Obst, F=Birne, G=Preis, H=Menge etc.)

In einer anderen Excel Datei z.b. (vorlage.xls) habe ich mehrere Tabellenblätter unterteilt in Artikelnummern. z.b:

Tabelle1 Artikelnummer: 123456789000 (A=123,B=456,C=789,D=000) bis 123456789020 (A=123,B=456,C=789,D=020)

Tabelle2 Artikelnummer: 123456789021(A=123,B=456,C=789,D=021) bis 123456789050(A=123,B=456,C=789,D=050)

usw. bis Tabelle 10

Jetzt möchte ich das die Artikelnummern beider Dateien verglichen werden und bei identischer Artikelnummer (Spalte A - D) die komplette Zeile also von der test.xls übernommen werden soll in das jeweilige Tabellenblatt der vorlage.xls Datei ab Spalte A Zeile 30. Die Artikelnummern können auch mehrfach vorkommen mit unterschiedlichen Inhalten wie beispielsweise die Spalte G mit unterschiedlichen Preisen oder die Spalte H mit unterschiedlichen Mengen.

Praktisch wäre es auch die Preise und Mengen in den jeweiligen Tabellenblätter zu summieren, damit man sofort einen Überblick hat.

Zu guter Letzt, müsste man die Endpreise und die Endmengen in ein seperates Tabellenblatt (Gesamtergebnis) aufführen und summieren um ein Gesamtbetrag und eine Gesamtmenge zu erhalten.

Bin ja mal gespannt ob das jemand hinbekommt.. face-wink

Danke schon mal im Voraus!

Content-Key: 213974

Url: https://administrator.de/contentid/213974

Printed on: April 20, 2024 at 02:04 o'clock

Member: Pjordorf
Pjordorf Aug 11, 2013 at 06:14:24 (UTC)
Goto Top
Hallo,

Zitat von @ooLADYLUCKoo:
Ich suche dringend Hilfe..
Sicher?

Bin ja mal gespannt ob das jemand hinbekommt.. face-wink
Ist das jetzt eine Prüfungsfrage an uns um dir zu beweisen wer was in Excel und VBA drauf hat odre soll das ein Wettbewerb unter deinen Sklaven sein? Wir sind weder deine Hibis noch dein Mitarbeiter/Angestellte oder so. Wir nehmen unser Wissen und unsere Freizeit dazu um leuten wie dir zu Helfen, nicht um Auftrgäge für lau durchzuführen. Du hast ja noch nicht einmal ein Anrsatz deines Geforderten VBA Codes hier rein gestellt wo wir dir bei Probleme gerne behilflich sein können. Sicher das dein Smily deinen Satz kompensiert?

face-smile

Danke schon mal im Voraus!
Und dieses ewige im Voraus. Zahlst du bei Aldi und Co. auch immer im Voraus?

Gruß,
Peter
Member: colinardo
colinardo Aug 11, 2013 updated at 09:27:41 (UTC)
Goto Top
Hallo ooLADYLUCKoo. Willkommen im Forum.
da hast du "LUCK" das Sonntag ist ... und meine Finger nach VBA lechzen =8-)
Öffne den VBA Editor(ALT-F11) in deinem Sheet test.xls und füge Ihn im Abschnitt "Diese Arbeitsmappe" ein.
Dann musst du noch den Pfad zur vorlage.xls in Zeile 5 des Codes an deine Umgebung anpassen. Dann Cursor in der Prozedur platzieren und F5 drücken.
Sub vergleicheArtikel()
    Dim sourceSheet As Worksheet, targetSheet As Worksheet, targetWorkbook As Workbook
    Dim sCell As Range, tCell As Range
    Set sourceSheet = Worksheets(1)
    Set targetWorkbook = Application.Workbooks.Open("D:\vorlage.xls")  
    Set sCell = sourceSheet.Range("A2")  
    
    For i = 1 To 10     'Loop Target Worksheets 1-10  
        Set targetSheet = targetWorkbook.Worksheets(i)
        Set tCell = targetSheet.Range("A2")  
        Set outputCell = targetSheet.Range("A30")  
        While sCell.Value <> ""     'Loop Source Artikelnummern  
            art_nr_source = sCell.Value & sCell.Offset(0, 1).Value & sCell.Offset(0, 2).Value & sCell.Offset(0, 3).Value
        
            For y = 2 To 29     'Loop through row 2 to 29  
                art_nr_target = tCell.Value & tCell.Offset(0, 1).Value & tCell.Offset(0, 2).Value & tCell.Offset(0, 3).Value
                If art_nr_source = art_nr_target Then   'When art_nr matching copy source columns to target  
                    sourceValues = Range(sCell, sCell.Offset(0, 9)).Value
                    Range(outputCell, outputCell.Offset(0, 9)).Value = sourceValues
                    Set outputCell = outputCell.Offset(1, 0)
                End If
                Set tCell = tCell.Offset(1, 0)
            Next
            Set tCell = targetSheet.Range("A2")  
            Set sCell = sCell.Offset(1, 0)
        Wend
        Set sCell = sourceSheet.Range("A2")  
    Next
End Sub
Als Übungsaufgabe habe ich dir noch die Summierung gelassen, damit du noch was zu tun hast ... und du damit hoffentlich etwas Excel-VBA lernst
face-wink
Grüße Uwe
Member: ooLADYLUCKoo
ooLADYLUCKoo Aug 11, 2013 at 16:31:06 (UTC)
Goto Top
Danke Uwe hat super geklappt!

Jetzt kommt das "aber"... face-wink

Hab die Übungsaufgabe leider nicht ganz lösen können.
Die Gesamtsumme und die Gesamtmenge habe ich soweit errechnen können. Leider macht er das NUR für das erste Tabellenblatt und nicht für alle 10 face-sad

Range("I23").Value = WorksheetFunction.Sum(Columns(7))
Set sCell = sourceSheet.Range("A2")
Range("J23").Value = WorksheetFunction.Sum(Columns(8))

Vllt kannst du mir noch ne kleine Hilfestellung geben das wäre sehr nett.

Einen ganz lieben Gruß und ein dickes Bussi
Member: colinardo
colinardo Aug 11, 2013 updated at 21:50:39 (UTC)
Goto Top
versuchs mal mit
targetSheet.Range("I23").Value = ...
usw.
wenn du nur Range() verwendest nimmt Excel immer das gerade angezeigte Sheet, d.h bei deiner Version werden die selben Zellen 10 mal überschrieben.
Die Variable targetSheet wird immer auf das zu bearbeitende Sheet gesetzt, und wenn du das als Quelle für die Range Funktion nimmst landen die Summen auch auf den jeweiligen Tabellenblättern.

Schönen Abend noch !
Uwe
Member: ooLADYLUCKoo
ooLADYLUCKoo Aug 11, 2013 at 19:06:49 (UTC)
Goto Top
Hallöchen!

Ich hab das mal grad versucht. Die Gesamtsumme ist irgendwie in jeder Tabelle identisch. Das Makro berechnet den Wert der ersten Tabelle und übernimmt diesen für alle weiteren Tabellen. Was mach ich falsch? face-sad

Dir auch noch einen schönen Abend!
Member: colinardo
colinardo Aug 12, 2013 updated at 07:16:16 (UTC)
Goto Top
Sub vergleicheArtikel()
    Dim sourceSheet As Worksheet, targetSheet As Worksheet, targetWorkbook As Workbook
    Dim sCell As Range, tCell As Range, outputCell As Range
    Set sourceSheet = Worksheets(1)
    Set targetWorkbook = Application.Workbooks.Open("E:\vorlage.xlsm")  
    Set sCell = sourceSheet.Range("A2")  
    
    For i = 1 To 10     'Loop Target Worksheets 1-10  
        Set targetSheet = targetWorkbook.Worksheets(i)
        Set tCell = targetSheet.Range("A2")  
        Set outputCell = targetSheet.Range("A30")  
        While sCell.Value <> ""     'Loop Source Artikelnummern  
            art_nr_source = sCell.Value & sCell.Offset(0, 1).Value & sCell.Offset(0, 2).Value & sCell.Offset(0, 3).Value
        
            For y = 2 To 29     'Loop through row 2 to 29  
                art_nr_target = tCell.Value & tCell.Offset(0, 1).Value & tCell.Offset(0, 2).Value & tCell.Offset(0, 3).Value
                If art_nr_source = art_nr_target Then   'When art_nr matching copy source columns to target  
                    sourceValues = Range(sCell, sCell.Offset(0, 9)).Value
                    Range(outputCell, outputCell.Offset(0, 9)).Value = sourceValues
                    Set outputCell = outputCell.Offset(1, 0)
                End If
                Set tCell = tCell.Offset(1, 0)
            Next
            Set tCell = targetSheet.Range("A2")  
            Set sCell = sCell.Offset(1, 0)
        Wend
        Set sCell = sourceSheet.Range("A2")  
        outputCell.Offset(0, 5).Value = "Summen:"  
        outputCell.Offset(0, 6).Formula = "=Sum(G2:" & outputCell.Offset(-1, 6).Address & ")"  
        outputCell.Offset(0, 7).Formula = "=Sum(H2:" & outputCell.Offset(-1, 7).Address & ")"  
    Next
End Sub
Member: ooLADYLUCKoo
ooLADYLUCKoo Aug 13, 2013 at 16:55:27 (UTC)
Goto Top
DANKE UWE!!!

Wie lautet denn der Code wenn ich mehrere Zellen vergleichen möchte? Beispiel anstatt A-D, A-E?

Schönen Abend noch!

Bussl
Member: Biber
Biber Aug 13, 2013 updated at 17:11:32 (UTC)
Goto Top
[OT]
... also, Bussl hin oder her... ich finde irgendwie Aufwand und Absaugen ein Bissl ungleich verteilt in diesem Beitrag.

Was wäre denn deine Vermutung, Lady, an welcher Stelle in dem Schnipsel du von If art_nr_source = art_nr_target auf mehrere Felder erweitern könntest?
Und wieso fallen dir nach jeder schon mundgerechten Lösung noch zwei Zusatzschmankerl ein?

Ich lass mal ein "gefällt mir nich'" hier.

Grüße
Biber
[/OT]
Member: colinardo
colinardo Aug 13, 2013 updated at 17:46:41 (UTC)
Goto Top
Zitat von @ooLADYLUCKoo:
Wie lautet denn der Code wenn ich mehrere Zellen vergleichen möchte? Beispiel anstatt A-D, A-E?
Schau die mal die folgenden Zeilen an
art_nr_source = sCell.Value & sCell.Offset(0, 1).Value & sCell.Offset(0, 2).Value & sCell.Offset(0, 3).Value & [DER PREIS IST HEISS 1]

art_nr_target = tCell.Value & tCell.Offset(0, 1).Value & tCell.Offset(0, 2).Value & tCell.Offset(0, 3).Value & [DER PREIS IST HEISS 2]

Preisfrage: Was passt auf [DER PREIS IST HEISS 1 UND 2]
Ist es
  • TOR 1: Ernie und Bert ?
  • TOR 2: Schneeflitchen und die sieben Zwerge ?
oder
  • TOR 3: sCell.Offset(0,4). Value bzw. tCell.Offset(0,4).Value ?

dann kommst du bestimmt drauf.
Bussl
bussl mit Zunge bis zum Zäpfchen ;-p
Sorry der musste jetzt raus ...

Abschliessend den Beitrag noch als gelöst markieren. Merci.
Member: ooLADYLUCKoo
ooLADYLUCKoo Aug 13, 2013 at 18:42:43 (UTC)
Goto Top
Auf die Idee bin ich gestern auch gekommen jedoch führt diese Lösung nicht zum gewünschten Ergebnis. Nehme ich allerdings die Summierung raus, funktioniert es einwandfrei..


Uwe? be a dear and help me.. face-smile
Member: ooLADYLUCKoo
ooLADYLUCKoo Aug 13, 2013 at 19:34:06 (UTC)
Goto Top
Huch es hat sich tatsächlich ein Tippfehler eingeschlichen!

Jetzt funktionierts, DANKE!

Gut's Nächtle