Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Vlookup in einer Schleife

Vlookup in einer Schleife
10.11.2015 21:55:53
Peter Weber

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

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Vlookup in einer Schleife
10.11.2015 23:10:51
Peter Weber
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

AW: Vlookup in einer Schleife
10.11.2015 23:29:31
Peter Weber
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

Anzeige
Ansatz unzureichend
11.11.2015 07:35:43
MCO
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

AW: Ansatz unzureichend
11.11.2015 10:14:30
Peter Weber
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

Anzeige
{1.2} ist eine sog MatrixKonstante, die es ...
11.11.2015 12:29:35
Luc:-?
…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 …

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

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

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige