Excel VBA Sverweis über mehrere Zeilen

zindelino

Lt. Commander
Registriert
Mai 2011
Beiträge
1.047
Hallo, ich bin gerade dran automatisch Daten in ein Excel File zu laden. Das reinladen funktioniert auch schon ganz gut in ein separates Tabellenblatt. Jetzt möchte ich per Sverweis die Daten aus dem separaten Tabellenblatt in meine richtige Tabelle einsortieren.

Hier ein Beispiel wie meine richtiges Tabellenblatt in etwa aussieht:

blablaIDblablaWert
blabla001blablaWERT für ID001
blabla002blablaWERT für ID002
blabla003blablaWERT für ID003
blabla004blablaWERT für ID004

Hier ein Beispiel wie das neu angelagte Tabellenblatt in etwa aussieht:

IDWert
003WERT für ID003
001WERT für ID001
002WERT für ID002
004WERT für ID004


Wie zu erkennen ist, ist die sortieren nicht passend, sodass ich per SVERWEIS die jeweiligen Werte zur ID suchen muss. Per Hand ist es auch kein Problem das mit einem SVERWEIS zuzuordnen. Ich bekomme es jedoch nicht hin, dass ich per VBA für jede Zeile den SVERWEIS eingetragen bekommen. Ich habe mir das was ich per Hand machen würde als Marko aufgezeichnet und da kommt das bei raus:

ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-3],data1!C[-26]:C[-25],2,FALSE)"
Range("AA3").Select
Selection.FillDown

Damit schreibt er in AA3 auch den Sverweis erstmal rein, aber das runterziehen klappt offenbar nicht. Ich hatte auch schon versucht über Schleifen das ganze Zeile für Zeile einzutragen, aber dafür reichen meine VBA Kenntnisse auch nicht aus.

Kann hier evtl. jemand weiterhelfen?
 
ich mache so etwas immer mit Autofill.
Das steht dazu in meinem Notizbuch als Beispiel:

Set sourceRange = Worksheets("Sheet1").Range("A1:A2")
Set fillRange = Worksheets("Sheet1").Range("A1:A20")
sourceRange.AutoFill Destination:=fillRange
 
Ich verstehe nicht, was du warum per VBA machen willst.

Sagen wir das erste Beispiel ist Blatt1, Spalten A bis D und die zweite Tabelle ist Blatt 2 mit Spalten A und B.

Dann fügst du in Blatt2 Zelle B1 folgendes ein:
Code:
=SVERWEIS(A1;Blatt1!$B$2:$B$5;Blatt1!$D$2:$D$5)
und kopierst du Formel per Doppelklick oder per Ziehen in die unteren Zellen.
(Disclaimer: Typos vorbehalten, habe gerade kein Excel zur Hand zum Testen)


Wenn du per VBA unbedingt auffüllen willst, dann so:
Code:
#Formel in AA3 kopieren
Range("AA3:AA99999").Select
Selection.FillDown
bzw. kürzer
Code:
#Formel in AA3 kopieren
Range("AA3:AA99999").FillDown
Du musst die gesamte Range auswählen, die aufgefüllt werden soll. Er nimmt dann das oberste Objekt und kopiert es in die gesamte Range.
Du füllst aktuell nur die eine Zelle AA3 mit dem eigenen Inhalt auf ergo: Es passiert nichts.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: h00bi
@Fortatus Vielen Dank. Das mit der Range war in der Tat mein Problem. Mit dienem letzten Stückchen Code passt es endlich.

Ich mache das per VBA, da ich einfach eine Schaltfläche drücken möchte, dann wird automatisch ein excel file eingelesen, in ein separates tabellenblatt kopiert und per sverweis die zuordnung zum standard hergestellt. So kann man viele excel files einlesen ohne überall händisch den sverweis reinmachen zu müssen
 
Update: Ich bin damit jetzt schon deutlich weiter gekommen, aber vielleicht kann hier jemand nochmal kurz weiterhelfen. Das data1 im oberen beispiel war erstmal nur ein platzhalter. Da muss dynamisch eine variable eingetragen werden. Das habe ich mittlerweile auch hinbekommen. Folgendes Problem habe ich aber noch. Mit dem folgenden Code:
SheetName2 = "data" & Worksheets.Count & "!A:B"
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-21], " & SheetName2 & ",2,FALSE)"

kommt in der Zelle dann leider eine Klammer um das B:

=SVERWEIS(E3; data2!A:(B);2;FALSCH)

Wenn ich SheetName2 im VBA überwache, steht da auch genau der Text der an die Vlookup funktion übergeben werden soll: "data2!A:B"

Weiß jemand wo die Klammer herkommt oder wie man die wegbekommt? Mit der klammer scheint der Sverweis nicht zu funktionieren.


Edit: habe es hiermit lösen können :

SheetName2 = "data" & Worksheets.Count & "!C[-25]:C[-24]"
 
Zuletzt bearbeitet:
Zurück
Oben