Herbers Excel-Forum - das Archiv

Vlookup in einer Schleife

Bild

Betrifft: Vlookup in einer Schleife
von: Peter Weber

Geschrieben am: 10.11.2015 21:55:53

Hallo Zusammen,
wie müsste die Vlookup-Zeile in einer Schleife aussehen?

For i = 12 To 20
Range("K23").Select
ActiveSheet.Paste
Selection.FormulaArray = _
"=IFERROR(VLOOKUP(R6C5&RC[-4],CHOOSE({1,2},Mengen!R12C2:R300C2& _
Mengen!R12C4:R300C4,Mengen!R12C5:R300C5),2,0),"""")"
Next i

Vielen Dank für Eure Hilfe
LG,
Peter

Bild

Betrifft: AW: Vlookup in einer Schleife
von: Peter Weber

Geschrieben am: 10.11.2015 23:10:51
Hallo Zusammen,
ich habe versucht die VLOOKUP-Zeile anzupassen, erhalte aber die Meldung, dass die geschweifte Klammer ein unbekanntes Zeichen ist.
For i = 23 To 50
With Sheets("Mengen")
Cells(i, 11) = Application.WorksheetFunction.IFERROR(VLOOKUP(cells(6,5)&cells(23,7),CHOOSE({1,2} _
,.range("B12:B300")&.range(D12:D3002),.Range("E12:E300),2,0),""""))
End With
Next i

Kann mir jemand weiterhelfen? Offensichtlich stimmt die Syntax nicht.
LG, Peter

Bild

Betrifft: AW: Vlookup in einer Schleife
von: Peter Weber

Geschrieben am: 10.11.2015 23:29:31
Hallo Zusammen,
Zeile habe ich angepasst. Jetzt erscheint der Fehler "Laufzeitfehler 13, Typen unverträglich"
Sub Makro1()
For i = 23 To 26
With Sheets("Mengen_kumuliert")
Cells(i, 11) = Application.WorksheetFunction.VLookup(Cells(23, 7) & Cells(6, 5), Choose(1.2, . _
Range("B12:B300") & .Range("D12:D300"), .Range("E12:E300")), 2, 0)
'Mit Makrorecoder aufgenommen
'Selection.FormulaArray = "=IFERROR(VLOOKUP(R6C5&RC[-4],CHOOSE({1,2},Mengen!R12C2:R300C2&Mengen! _
R12C4:R300C4,Mengen!R12C5:R300C5),2,0),"""")"
End With
Next i
End Sub

Wo liegt der Fehler?
Bitte um eure Hilfe
LG, Peter

Bild

Betrifft: Ansatz unzureichend
von: MCO

Geschrieben am: 11.11.2015 07:35:43
Moin!
Ich glaube, es ist nicht zielführend, sich die Worksheetfunktionen und Bedingungen 1:1 in VBA nachzubauen.Dazu hast du ganz andere Möglichkeiten.
Lade doch mal ein Beispiel hoch, damit man sehen kann, was das ganze denn überhaupt soll!
Gruß, MCO

Bild

Betrifft: AW: Ansatz unzureichend
von: Peter Weber

Geschrieben am: 11.11.2015 10:14:30
Hallo MCO,
vielen Dank für deine Antwort.
Es geht bei mir um einen umfangreichen Report (Tabelle1). Dieser Report wird aus unterschiedlichsten Tabellen zusammengestellt. U.a. soll in diesen Report z.B. in der Spalte 11 (cells(i,11)) Werte aus der Tablelle2 eingefügt werden.
Dabei soll nur der Wert eingetragen werden der zwei Bedingungen erfüllt (Cells(6, 5)& Cells(i, 7)). Beider Werte befinden sich in der Tabelle1.
Mit CHOOSE werden die Spalten in der Tabelle2 gewählt die die Bedingungen aus der Tabelle1 erfüllen.

Choose(1.2, .Range("B12:B300") & .Range("D12:D300"),  .Range("E12:E300")),


In .Range("E12:E300")-Ergenisspalte stehen die Werte die in die Tabelle1 cells(i,11) übertragen werden sollen.
In Prinzip könnte diese Aufgabe auch mit Schleifen gelöst werden, nur ich dachte, wenn ich eine VLOOKUP-Formel in cells(i,11) einfüge die Aufgabenstellung schneller gelöst werden könnte.
Leider ist an meiner VLOOKUP-Formel etwas falsch, aber was?
Wenn ich den Sverweis manuell in die Zelle(23,11) eintrage, dann muss ich die Formel mit einer geschweiften Klammer abschließen.
{=WENNFEHLER(SVERWEIS($E$6&G23;WAHL({1.2};Mengen!$B$12:$B$300&Mengen!$D$12:$D$300; Mengen!$E$12:$E$300);2;0);"") }
LG,
Peter

Bild

Betrifft: {1.2} ist eine sog MatrixKonstante, die es ...
von: Luc:-?

Geschrieben am: 11.11.2015 12:29:35
…nur in Xl, nicht aber in VBA gibt, Peter;
in VBA entspricht deine Notation 1.2 der Dezimalzahl 1,2 → also gerundet nur 1!
WorksheetFunctions fktionieren in VBA stets ohne Unterstützung durch die Xl-Steuerung, also nur so wie ihr Pgm vorsieht. Deshalb können für als skalar vorgesehene Argumente auch nur solche, keine Datenfelder verwendet wdn. Die MatrixKonstante {1.2} (lokale dt Notation!) entspricht einem horizontal gerichteten (Zeilen-)Vektor(-Datenfeld) aus den Elementen 1 und 2. In VBA entspräche das Array(1, 2). Das hilft dir aber nichts, weil WAHL (WorksheetFunction.Choose) an dieser Stelle ein skalares Element, keinen Vektor erwartet! Deshalb kannst du dieses Problem so nur mit einer Schleife oder Xl lösen. Letzteres, indem du eine MatrixFml richtig in die Eigenschaft .FormulaArray der Zelle (1zellige) bzw des ZellBereichs (mehrzellige MatrixFml) einträgst. Letzteres nicht per Schleife über alle Zellen des Bereichs, sondern nur 1× für den ganzen.
Die andere Möglichkeit bestünde darin, einen FmlText in US-Original-Notation mittels vbFkt Evaluate auszuwerten. Hierbei wird ebenfalls Xl involviert, also dessen Steuerung hinzugezogen. Beachte dabei, dass der SpaltenTrenner von MatrixKonstanten ein Komma, der DezimalTrenner ein Pkt ist. Der ZeilenTrenner ist übrigens lokal und original gleich - ein Semikolon -, wobei Spalten- immer vor ZeilenTrenner kommt, also erst alle Spalten einer Zeile, dann die nächste Zeile.
Gruß, Luc :-?
Besser informiert mit …

Bild

Betrifft: AW: {1.2} ist eine sog MatrixKonstante, die es ...
von: Peter Weber
Geschrieben am: 11.11.2015 12:50:05
Hallo Luc,
vielen Dank für deine Antwort.
Werde die Aufgabenstellen mit Schleifen lösen.
LG,
Peter

Bild

Betrifft: Na, dann viel Erfolg...! ;-) owT
von: Luc:-?
Geschrieben am: 11.11.2015 16:22:10
:-?

 Bild
Excel-Beispiele zum Thema "Vlookup in einer Schleife"
In einer Schleife auf Elemente einer UserForm zugreifen CheckBoxes in UserForms in eine Schleife einbinden
Gruppe von UserForm-ListBoxes über eine Schleife ansprechen UserForm-Optionsfelder über eine Schleife zurücksetzen
Bewerten Sie hier bitte das Excel-Portal