Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Daten auswerten aus zwei Tabellen in einem Blatt
#1
Hallo Liebe Excel-Profis

ich habe zwei Tabellen in einem Blatt zusammengefügt und muss diese auswerten.
Es geht hier um Versandkosten und darum diese entsprechend zu kontrollieren.
Da es mehrere Tausend - Datensätze sind - kann ich diese nicht manuell kontrollieren und möchte dies mit einer Excel-Formel erledigen

Tabelle 1 = Auftrag_einzeilig
Tabelle 2 = Auftrag detail

Auftrag_einzeilig
in dieser Tabelle stehen pro Auftrag (Auftragsnummer) die berechneten Versandkosten (Versandkosten)
Leider werden vom Spediteur aber nicht die entsprechenden Artikel gelistet, die entsprechend versendet worden sind. Daher fällt zunächst einmal die Kontrolle der berechneten Versandkosten schwierig aus.
Ich müsste jetzt jeden Auftrag einzeln öffnen, gucken wie oft (Menge) welcher Artikel (Produkt) versendet wurde - und diesen dann manuell eintragen. 
Ich würde das ganze gerne mit Excel lösen. 
Hierfür habe ich aus unserem Auftragsprogramm mir die entsprechenden Datensätze exportiert und diese in die Tabelle Auftrag_detail kopiert.

Auftrag_detail 
In dieser Tabelle steht jeweils die Auftragsnummer (Auftragsnummer), die Menge (RowQuantity), die Artikelnummer (ItemNo) und die wenn es sich um eine Variante handelt entsprechende Varianten-Artikelnummer (ItemVariationNo).

Was soll dabei rauskommen:
die Menge und die Artikelnummer soll aus Tabelle Auftrag_detail herausgefiltert und entsprechend in die Tabelle Auftrag_einzeilig kopiert werden. 
folgende Bedingung muss beachtet werden:
wenn in Auftrag_detail RowBundleItemID=-1 ist - dann soll als Artikelnnummer in Auftrag_einzeilig - die ItemNo + RowQuantity übertragen werden.
wenn nicht dann soll als Artikelnnummer in Auftrag_einzeilig - die ItemVariationNo + RowQuantity übertragen werden.
Das ganze soll wenn möglich komplett automatisch funktionieren und so sein, dass die Tabelle Auftrag_einzeilig immer wieder mit neuen zu prüfenden Datensätzen befüllt werden kann. 
Entsprechend wir sich auch die Tabelle Auftrag_detail erweitern.

ich hoffe Ihr versteht - was mein Ziel ist.
Würde mich freuen, wenn mir einer von den Profis hier helfen könnte!


LG
Martin


Angehängte Dateien
.xlsx   Rechnungsprüfung_Beispiel.xlsx (Größe: 14,02 KB / Downloads: 11)
Antworten Top
#2
Hallo,

teste mal diesen Code:
Code:
Sub iFen()

Sheets("Auftrag detail").Activate
With CreateObject("Scripting.Dictionary")
Ar = Cells(1).CurrentRegion
   For i = 2 To UBound(Ar)
       If Ar(i, 5) = -1 Then
           Tx = Ar(i, 2) & "|" & Ar(i, 3)
       Else
           Tx = Ar(i, 2) & "|" & Ar(i, 4)
       End If
       If .exists(Ar(i, 1)) Then
           .Item(Ar(i, 1)) = .Item(Ar(i, 1)) & "|" & Tx
       Else
           .Item(Ar(i, 1)) = Tx
       End If
       
   Next i
'### Ausgabe
Sheets("Auftrag_einzeilig").Activate
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
   If .exists(Cells(i, "A").Value) Then
       Tx = Split(.Item(Cells(i, "A").Value), "|")
       Cells(i, "F").Resize(, UBound(Tx) + 1) = Tx
   End If
Next i
Debug.Print .Count
End With
End Sub

mfg
[-] Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:
  • n8lauscher
Antworten Top
#3
Hallo,

teste mal diesen Code:
Code:
Sub iFen()

Sheets("Auftrag detail").Activate
With CreateObject("Scripting.Dictionary")
Ar = Cells(1).CurrentRegion
   For i = 2 To UBound(Ar)
       If Ar(i, 5) = -1 Then
           Tx = Ar(i, 2) & "|" & Ar(i, 3)
       Else
           Tx = Ar(i, 2) & "|" & Ar(i, 4)
       End If
       If .exists(Ar(i, 1)) Then
           .Item(Ar(i, 1)) = .Item(Ar(i, 1)) & "|" & Tx
       Else
           .Item(Ar(i, 1)) = Tx
       End If
       
   Next i
'### Ausgabe
Sheets("Auftrag_einzeilig").Activate
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
   If .exists(Cells(i, "A").Value) Then
       Tx = Split(.Item(Cells(i, "A").Value), "|")
       Cells(i, "F").Resize(, UBound(Tx) + 1) = Tx
   End If
Next i
End With
End Sub

mfg
[-] Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:
  • n8lauscher
Antworten Top
#4
@fennek

Hallo,

geht das ganze nicht auch mit einer Formel?
direkt in der Datei?
Antworten Top
#5
@Fennek

Hallo Fennek,

ich habe die Anforderung noch einmal aktualisiert.
Deine erste Lösung war schon recht hilfreich - leider hat sich aber herausgestellt, dass ich doch die Daten ein wenig anders auswerten muss.
Auch sind noch zwei weitere Herausforderungen aufgetreten, Die Auftragsnummern enthalten mitunter auch einen String - welcher nicht mit verarbeitet werden soll.
Auch soll - wenn die Auftragnummer nicht in der Artikelliste gefunden wird - dies dann gemeldet werden.

Habe daher die Exceldatei noch einmal überarbeitet.

Kannst du dies vielleicht noch einmal versuchen? 

Es wäre echt super!

DANKE!


Angehängte Dateien
.xlsx   Rechnungsprüfung_Beispiel.xlsx (Größe: 30,21 KB / Downloads: 3)
Antworten Top
#6
Hallöchen,

hier mal auf Basis der Autofilter-Formel von excelformeln.de ein Formel-Ansatz. Voraussetzung wäre, dass Deine ID immer numerisch ist. Ich habe zuerst die Originallösung angewendet und dann in eine waagerechte geändert. Beachte in der waagerechten die Angaben A1, A2, A3 usw. am Ende der Formel. Im Original passt sich das automatisch beim Runterziehen an, hier habe ich es manuell eingetragen.

Arbeitsblatt mit dem Namen 'Tabelle1'
 ABCDEFGHIJKL
1NummerArtikel gefiltertArtikel NummerArtikelNummerArtikelNummerArtikel
21A 1A 1A1C#ZAHL!#ZAHL!
35B 1C       
41C #ZAHL!#ZAHL!       
53D #ZAHL!#ZAHL!       
63E          
73F          

ZelleFormel
D2{=INDEX(A$1:A$100;KKLEINSTE(WENN((A$1:A$100=1);ZEILE($1:$100));ZEILE(A1)))}
E2{=INDEX(B$1:B$100;KKLEINSTE(WENN((A$1:A$100=1);ZEILE($1:$100));ZEILE(B1)))}
G2{=INDEX(A$1:A$100;KKLEINSTE(WENN((A$1:A$100=1);ZEILE($1:$100));ZEILE(A1)))}
H2{=INDEX(B$1:B$100;KKLEINSTE(WENN((A$1:A$100=1);ZEILE($1:$100));ZEILE(B1)))}
I2{=INDEX(A$1:A$100;KKLEINSTE(WENN((A$1:A$100=1);ZEILE($1:$100));ZEILE(A2)))}
J2{=INDEX(B$1:B$100;KKLEINSTE(WENN((A$1:A$100=1);ZEILE($1:$100));ZEILE(B2)))}
K2{=INDEX(A$1:A$100;KKLEINSTE(WENN((A$1:A$100=1);ZEILE($1:$100));ZEILE(A3)))}
L2=INDEX(B$1:B$100;KKLEINSTE(WENN((A$1:A$100=1);ZEILE($1:$100));ZEILE(B3)))
D3{=INDEX(A$1:A$100;KKLEINSTE(WENN((A$1:A$100=1);ZEILE($1:$100));ZEILE(A2)))}
E3{=INDEX(B$1:B$100;KKLEINSTE(WENN((A$1:A$100=1);ZEILE($1:$100));ZEILE(B2)))}
D4{=INDEX(A$1:A$100;KKLEINSTE(WENN((A$1:A$100=1);ZEILE($1:$100));ZEILE(A3)))}
E4{=INDEX(B$1:B$100;KKLEINSTE(WENN((A$1:A$100=1);ZEILE($1:$100));ZEILE(B3)))}
D5{=INDEX(A$1:A$100;KKLEINSTE(WENN((A$1:A$100=1);ZEILE($1:$100));ZEILE(A4)))}
E5{=INDEX(B$1:B$100;KKLEINSTE(WENN((A$1:A$100=1);ZEILE($1:$100));ZEILE(B4)))}
Achtung, Matrixformel enthalten!
Die geschweiften Klammern{} werden nicht eingegeben.
Verlassen Sie den Zelleneditor mit Strg+Shift + Enter, statt Enter alleine.
Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • n8lauscher
Antworten Top
#7
Hallo Liebe Excel-Profis,

hier noch einmal alle Anforderungen in meiner Beispieldatei

auf anraten von Jockel jetzt auch mit Versionsnummer.


Besten Dank für die Hilfe bisher!


Angehängte Dateien
.xlsx   V.0.2 - Rechnungsprüfung_Beispiel.xlsx (Größe: 30,21 KB / Downloads: 5)
Antworten Top
#8
Hallöchen,

hier mal was angepasstes. Da fehlt allerdings noch die Bundle-Sache. Da wäre es sicher einfacher, wenn Du die Liste auch nach den Bundles sortierst und diese ans Ende des Artikels stellst. Ich könnte in der Formel noch eine Prüfung einbauen, allerdings hättest Du dann ein Produkt 1, dann zwei Leere, und dann ein Produkt 4. Bei der vorgeschlagenen Sortierung wäre die "Lücke" nicht der Fall, weil die leeren dann ans Ende kämen.

Arbeitsblatt mit dem Namen 'gewünschtes Ergebnis'
 RSTU
1Menge
Produkt 1
Artikelnummer
Produkt 1
Menge
Produkt 2
Artikelnummer
Produkt 2
21YX-53s1YX-OS
31DB-0082+2s1Bahamas
4  Soll:STRA-H02E

ZelleFormel
R2{=INDEX('ROW-Artikelliste'!$C$1:$C$100;KKLEINSTE(WENN(('ROW-Artikelliste'!$B$1:$B$100=D2);ZEILE($1:$100));ZEILE($B$1)))}
S2{=INDEX('ROW-Artikelliste'!$D$1:$D$100;KKLEINSTE(WENN(('ROW-Artikelliste'!$B$1:$B$100=D2);ZEILE($1:$100));ZEILE($B$1)))}
T2{=INDEX('ROW-Artikelliste'!$C$1:$C$100;KKLEINSTE(WENN(('ROW-Artikelliste'!$B$1:$B$100=D2);ZEILE($1:$100));ZEILE($B$2)))}
U2{=INDEX('ROW-Artikelliste'!$D$1:$D$100;KKLEINSTE(WENN(('ROW-Artikelliste'!$B$1:$B$100=D2);ZEILE($1:$100));ZEILE($B$2)))}
R3{=INDEX('ROW-Artikelliste'!$C$1:$C$100;KKLEINSTE(WENN(('ROW-Artikelliste'!$B$1:$B$100=D3);ZEILE($1:$100));ZEILE($B$1)))}
S3{=INDEX('ROW-Artikelliste'!$D$1:$D$100;KKLEINSTE(WENN(('ROW-Artikelliste'!$B$1:$B$100=D3);ZEILE($1:$100));ZEILE($B$1)))}
T3{=INDEX('ROW-Artikelliste'!$C$1:$C$100;KKLEINSTE(WENN(('ROW-Artikelliste'!$B$1:$B$100=D3);ZEILE($1:$100));ZEILE($B$2)))}
U3{=INDEX('ROW-Artikelliste'!$D$1:$D$100;KKLEINSTE(WENN(('ROW-Artikelliste'!$B$1:$B$100=D3);ZEILE($1:$100));ZEILE($B$2)))}
Achtung, Matrixformel enthalten!
Die geschweiften Klammern{} werden nicht eingegeben.
Verlassen Sie den Zelleneditor mit Strg+Shift + Enter, statt Enter alleine.
Diese Tabelle wurde mit Tab2Html (v2.5.0) erstellt. ©Gerd alias Bamberg
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • n8lauscher
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste