Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1876to1880
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Zwei Spalten Loop mit 3x Wenn dann VBA
22.03.2022 18:45:16
Phil
Liebe Herber Community Mitglieder,
ich wäre für eure Hilfe bei folgendem Problem sehr dankbar. Es zerbricht mir den Kopf:
Es gibt ein Tabellenblatt "Lager" und eins " Lieferungen"
In Lieferungen steht der Produkt Code in Spalte "X" (21.).
In Lager steht der Produkt Code in Spalte "B".
Die Idee ist ein Buchungsknopf der die Bestellungen in "Lieferungen" kopiert und mit .PasteSpecial Operation:=xlAdd zu den Beständen des jeweiligen Artikels in "Lager" addiert wenn in Spalte "W" in "Lieferungen" der Status "Geliefert" steht.
Die zu kopierenden Informationen sind kg in Spalte "P" und Preis in Spalte "Q" in "Lieferungen". Sie werden dazu benutzt den neuen Durchschnitts EK des aktuellen Bestandes zu berechnen. Das Ziel dieser kopierten Werte ist in Lager und hängt davon ab welcher Lagerstandort in Lieferungen Spalte "U" (17.) definiert ist.
In Lager wird eingefügt: für Lager 1 in M-N; für Lager 2 in Q-R; für Lager 3 in U-V, für Lager 4 in AD-AE
'Summewenns' und 'Index in Kombination mit Vergleich' haben sich nicht als zufriedenstellend in dieser Situation erwiesen weil tatsächlich gebucht werden soll und die gelieferten Bestellungen in ein Archiv Blatt kopiert werden mit dem gleichen Makro.
Ich hoffe ich konnte das Problem verständlich erklären.
Ich bin für jegliche Ratschläge offen und lerne gerne.
Viele Grüße
Phil

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zwei Spalten Loop mit 3x Wenn dann VBA
22.03.2022 19:15:19
onur
Und WAS GENAU ist jetzt dein Problem ?
AW: Zwei Spalten Loop mit 3x Wenn dann VBA
22.03.2022 19:25:12
Phil
Mein Problem ist, dass ich nicht auf den Code komme der mir die Funktion gibt. Wenn ich zum Beispiel mit etwas starte wie Folgendem:

For i = 1 To lastRowLF
For j = 1 To lastRowLA
If LF.Cells(i, 21).Value = LA.Cells(j, 2).Value Then
LF.Range("P" & i & ":" & "Q" & i).Copy
Dann vergleicht er immer nur Zeile 1 mit 1 und 2 mit 2 und so weiter.
Anscheinend habe ich es nicht gut genug erklärt.
AW: Zwei Spalten Loop mit 3x Wenn dann VBA
22.03.2022 19:28:28
onur
Das sagt mir leider auch nichts, da du keine (Beispiels-) Datei gepostet hast, wo du mal anhand von Beispielen auch mal zeigst, was du meinst.
Anzeige
AW: Zwei Spalten Loop mit 3x Wenn dann VBA
22.03.2022 21:41:54
Yal
Hallo Phil,
füge die 'Summewenns' und 'Index in Kombination mit Vergleich' unter laufenden Makrorekorder ein und mache anschliessend eine Kopie-Werte einfügen (auch unter MR). Dann hast Du alles.
Anonymisiere anschliessend die Daten in deiner Datei und lade es hoch. Dann können wir ein bischen Feinschliff vornehmen (wobei lastRow hast Du schon im Griff).
Wenn zu viel Daten (max 300 kb), speck ein paar Zeilen ab.
VG
Yal
AW: Zwei Spalten Loop mit 3x Wenn dann VBA
23.03.2022 09:23:35
Phil
Hallo Yal,
danke für deinen Ansatz, dem gehe ich nach.
Ich habe heute morgen schon versucht die Datei auf unter 300kb abzuspecken damit ich sie als Beispiel hochladen kann. Allerdings bin ich jetzt an einem Punkt angekommen wo ich nicht mehr wirklich etwas wegnehmen kann und die Datei sitzt bei knapp über 600kb.
Ich versuche es weiter und melde mich nochmal wenn das ok ist.
Gibt es in VBA nicht einen Code der zwei Spalten vergleicht und immer wenn er einen Wert aus Spalte A in Spalte B findet eine Funktion ausführt?
Runtergebrochen ist das der knackende Punkt den ich für die Lösung dieses Problems brauche.
Viele
Grüße
Phil
Anzeige
AW: Zwei Spalten Loop mit 3x Wenn dann VBA
23.03.2022 09:46:16
Yal
Hallo Phil,
Du kannst in VBA alle excel-Formeln mit WorksheetFunction erreichen. Da es die englische Bezeichnung der Formel verwendet, empfehle ich die Formel unter laufenden Makrorekorder in Excel zu schreiben, um den englische Name zu haben. Bei SVerweis ist VLookup.

Sub Sverweis()
Dim Z As Range
With Worksheets("Tabelle")
For Each Z In Range(.Range("A2"), .Range("A99999").End(xlUp)).Cells
Z.Offset(0, 1) = WorksheetFunction.VLookup(Z.Value, Worksheets("Tabelle2").Range("A:B"), 2, 0)
Next
End With
End Sub
VG
Yal
AW: Zwei Spalten Loop mit 3x Wenn dann VBA
24.03.2022 10:50:52
Phil
Hallo Yal,
könntest du mir helfen herauszufinden warum ich in der bold geschriebenen Zeile einen Fehler ' Typen unverträglich' bekomme. Was mache ich Falsch?

Private Sub CommandButton1_Click()
Dim wb As Workbook
Dim Bu As Worksheet
Dim LA As Worksheet
Dim Z As Range
Dim kg As Integer
Application.ScreenUpdating = False
Set Bu = Sheets("Buchungen")
Set LA = Sheets("Lager")
With Worksheets("Lager")
For Each Z In LA.Range(LA.Range("B8"), LA.Range("B300").End(xlUp)).Cells
 kg = WorksheetFunction.Index(Bu.Range("B8:B300"), WorksheetFunction.Match(Bu.Cells(Z, 2).Value, Bu.Range("AD6:AD300")), 0)
If kg > 0 Then
Cells(Z, 13).Value = Cells(Z, 13).Value + kg
End If
Next
End With
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Zwei Spalten Loop mit 3x Wenn dann VBA
24.03.2022 11:50:58
onur
…. Cells(Z.ROW,2)……….
AW: Zwei Spalten Loop mit 3x Wenn dann VBA
24.03.2022 13:54:55
Yal
Hallo Phil,
bei Worksheetfunction ist es besonders einfach diese Funktion direkt in das Excelblatt zu plausibilisieren.
Die Funktion Index erwartet 3 Parameter: ein Bereich, eine Zeile, eine Spalte.
Ist Zeile oder Spalte = 0 kann Index eine Array zurückliefern. Aber ein Array lässt sich nicht einem Variable zuweisen, die als Integer definiert ist.
Die Funktion Match könnte ein Problem machen, falls die zurückgegebene Wert kein ganzzählige Zahl ist.
VG
Yal
AW: Zwei Spalten Loop mit 3x Wenn dann VBA
24.03.2022 14:27:36
Phil
Hallo Yal und Onur,
danke für eure Hilfe genau an die Grenze von der Match Funktion bin ich jetzt gestoßen.
Ich probiere gerade mit der Funktion '.find' oder doch mit "Vlookup' auf die Lösung zu kommen.
Es klappt leider noch nicht so richtig. Für einen Denkanstoß oder Lösungsvorschlag von euch wäre ich sehr dankbar.
Viele Grüße
Phil
Anzeige
AW: Zwei Spalten Loop mit 3x Wenn dann VBA
24.03.2022 15:02:34
Phil
Hallo Yal und Onur,
ich glaube ich komme mit eurer Hilfe der Lösung näher wenn ich die Variable 'kg' als Variant definiere. Jetzt bekomme ich allerdings noch einen 'Typen unverträglich' Fehler in der bold gedruckten Zeile.

Private Sub CommandButton1_Click()
Dim wb As Workbook
Dim Bu As Worksheet
Dim LA As Worksheet
Dim Z As Range
Dim kg As Variant
Application.ScreenUpdating = False
Set Bu = Sheets("Buchungen")
Set LA = Sheets("Lager")
With Worksheets("Lager")
For Each Z In LA.Range(LA.Range("B8"), LA.Range("B300").End(xlUp)).Cells
kg = WorksheetFunction.Index(Bu.Range("AD6:AD300"), WorksheetFunction.Match(Cells(Z.Row, 30).Value, Bu.Range("AD6:AD300")), 0)
If kg > 0 Then
LA.Cells(Z.Row, 13).Value = LA.Cells(Z.Row, 13).Value + kg
End If
Next
End With
Application.ScreenUpdating = True
End Sub
Vielen lieben Dank
Phil
Anzeige
AW: Zwei Spalten Loop mit 3x Wenn dann VBA
24.03.2022 18:01:57
onur
Wenn der Code stoppt - lies mal den Wert von kg aus.
AW: Zwei Spalten Loop mit 3x Wenn dann VBA
24.03.2022 19:18:27
Phil
Danke dir für deinen Hinweis, das hat mir geholfen die Index Match Funktion zu korrigieren. zumindest zu einem Teil. Denn selbst wenn ich simpel schreibe gib mir den Wert in Zeile 24, Spalte 4 wie unten in bold dann wirft er mir trotzdem einen Fehler raus 'Index Eigenschaft des WorksheetFunction-Objektes kann nicht zugeordnet werden'.

Private Sub CommandButton1_Click()
Dim wb As Workbook
Dim Bu As Worksheet
Dim LA As Worksheet
Dim Z As Range
Dim kg As Variant
Application.ScreenUpdating = False
Set Bu = Sheets("Buchungen")
Set LA = Sheets("Lager")
With Worksheets("Lager_Algeba")
For Each Z In LA.Range(LA.Range("B8"), LA.Range("B300").End(xlUp)).Cells
kg = WorksheetFunction.Index(Bu.Range("AD6:AL300"), 24, 4, 0)
MsgBox "kg beträgt " & kg
If kg > 0 Then
LA.Cells(Z.Row, 13).Value = LA.Cells(Z.Row, 13).Value + kg
End If
Next
End With
Application.ScreenUpdating = True
End Sub
Ich verstehe an diesem Punkt einfach nicht was ich falsch mache. Wenn es etwas damit zu tun hat was Yal meinte, dass Index einen Array herausgeben kann den ich nicht in einer Variable speichern kann die Variant oder Integer ist dann verstehe ich Index Match nicht mehr. Im Workbook hat mri die Kombination immer den Wert von der Kreuzung aus 'x' und 'y' Koordinate gegeben. Ich bitte um Hilfe, ich muss das gelöst bekommen.
Viele Grüße und vielen Dank für eure Geduld.
Phil
Anzeige
AW: Zwei Spalten Loop mit 3x Wenn dann VBA
24.03.2022 19:27:31
onur
kg = WorksheetFunction.Index(Bu.Range("AD6:AL300"), 24, 4)
AW: Zwei Spalten Loop mit 3x Wenn dann VBA
25.03.2022 11:19:28
Phil
Vielen lieben Dank ihr seid der Hammer. Es funktioniert alles. Richtig gutes Gefühl wenn der Code am Ende das erreicht was man möchte. Auf der Funktion kann ich jetzt aufbauen. Auch wenn es für euch offensichtliche Fehler meinerseits waren, hat mich eure Hilfe richtig weiter gebracht.
Vielen lieben Dank an Onur und Yal.
Viele Grüße
Phil
AW: Zwei Spalten Loop mit 3x Wenn dann VBA
24.03.2022 15:42:53
Phil
Hallo Yal und Onur,
ich glaube ich komme mit eurer Hilfe der Lösung näher wenn ich die Variable 'kg' als Variant definiere. Jetzt bekomme ich allerdings noch einen 'Typen unverträglich' Fehler in der bold gedruckten Zeile.

Private Sub CommandButton1_Click()
Dim wb As Workbook
Dim Bu As Worksheet
Dim LA As Worksheet
Dim Z As Range
Dim kg As Variant
Application.ScreenUpdating = False
Set Bu = Sheets("Buchungen")
Set LA = Sheets("Lager")
With Worksheets("Lager")
For Each Z In LA.Range(LA.Range("B8"), LA.Range("B300").End(xlUp)).Cells
kg = WorksheetFunction.Index(Bu.Range("AD6:AD300"), WorksheetFunction.Match(Cells(Z.Row, 30).Value, Bu.Range("AD6:AD300")), 0)
If kg > 0 Then
 LA.Cells(Z.Row, 13).Value = LA.Cells(Z.Row, 13).Value + kg
End If
Next
End With
Application.ScreenUpdating = True
End Sub
Vielen lieben Dank
Phil
PS: Sorry für die doppelte Nachricht ich hatte versehentlich auf meine eigenen Post geantwortet.
Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige