PDA

Vollständige Version anzeigen : Daten aus einem anderen Tabellenblatt laden


jetty
11.05.2004, 12:34
Hi Leute,

mal wieder eine kleine Frage:-)
Ich lese in Excel in einem Tabellenblatt eine Datei ein. Auf dieses Tabellenblatt greife ich dann von einem anderen Blatt in der selben Datei zu. Die Werte lese ich momentan über einen SVerweis aus, was allerdings ziemlich lange dauert, da es sehr viele Daten sind. Im Prinzip könnte ich das ja mit einer Schleife durchlaufen, allerdings besteht mein Problem darin, dass ich in dem Sheet, in das ich Daten einlese über mehrere Spalten gehe (siehe Screenshot: Die weissen Felder enthalten die Nummern nach denen ich im 2. Blatt suche und die farbigen Felder sollen dann den Wert enthalten), im dem Sheet, das ich durchsuche, stehen die Positionen allerdings untereinander.
Es ist etwas schwierig, das zu erklären, aber ich hoffe, ihr könnt mich verstehen und mir helfen.

Vielen Dank schon mal und Gruß Jetty

jinx
11.05.2004, 12:43
<font size="2" face="Century Gothic">Moin, jetty,

als alter Zyniker: eine klare Frage bekommt eine klare Antwort - aber was ist denn Deine Frage? Wenn SVERWEIS zu langsam ist, könnte man VERGLEICH nutzen (ist aber meiner Meinung nach auch nicht viel schneller). Bei einem Makro besteht das Problem, dass die Daten nicht aktualisiert werden, wenn auf einem Blatt eine Änderung eintritt. Vielleicht gibst Du noch eine weitere Verdeutlichung des Problems ab oder aber hängst eine Beispielmappe als Anhang an...</font>

jetty
11.05.2004, 13:24
Hi Jinx,

erstmal danke für die Antwort....ist mir anscheinend nicht gelungen, meine Frage rüberzubringen;-)
Also, ich will wissen, wie ich ein Schleifenkonstrukt in VB bauen muss, damit er mir die Werte in Blatt1 mit den Werten aus Blatt2 passend zu den Positionsnummern füllt. Beispieltabelle mit SVerweis hängt an.

Danke nochmal
jetty

jinx
11.05.2004, 15:09
<font size="2" face="Century Gothic">Moin, jetty,

bevor ich mich an die Arbeit mache, verweise ich doch lieber auf ein Vorgehen bei Hans Artikelnummern nach Kriterien suchen und Datensätze kopieren (http://www.herber.de/mailing/161301h.htm). Viel Spaß beim Anpassen... ;)</font>

Woody
11.05.2004, 16:06
Hi jetty,

mal abgesehen von deinem Performanceproblem mit SVERWEISen, hast du noch von dem Problem des Suchkriteriums in mehreren Spalten gesprochen.

Du hast bislang das Suchkriterium direkt in den SVERWEIS geschieben. Wie wäre es den damit, dass du in Spalte F alle Suchkriterien sammelst [Formel in F2 =WENN(A2>0;A2;WENN(B2>0;B2;WENN(C2>0;C2;D2))) ], und dann in Spalte E den SVERWEIS umstellst auf die Spalte F [Formel E2 =SVERWEIS(F2;Blatt2!A:B;2;FALSCH) ].

Vielleicht ist das ja eine mögliche Alternative zum VBA Code für dich.

Susanne E.
11.05.2004, 18:49
Hi Jetty,

Ich mache sowas in VBA immer mit der .Find Methode.
Andere wuerden es vielleicht anders machen, meine VBA Erfahrung ist begrenzt, aber ich schreibe das hier mal so rein als Anregung.

Fuer deine konkrete Tabelle musst du 2 Schleifen ineinanderlegen.
Der Zaehler i loopt durch die Zeilen, j geht die Spalten durch und sucht wo der Wert steht. Folgender Code:


Sub Verweis()
Dim Lookuprange As Range
Dim Lastrow As Integer
Dim R As Range
Dim Verweis As Range
Dim i As Integer
Dim j As Integer

Set Lookuprange = ActiveWorkbook.Sheets("Blatt2").Range("A1:B9")

With ActiveWorkbook.Sheets("Blatt1")
Lastrow = Application.WorksheetFunction.Max(.Range("B65536").End(xlUp).Row, .Range("C65536").End(xlUp).Row)

For i = 1 To Lastrow
Set R = .Range("B" & i, "C" & i)
For j = 1 To 2
If Not IsEmpty(R.Cells(j)) Then
Set Verweis = Lookuprange.Find(R.Cells(j))
If Verweis Is Nothing Then
.Range("E" & R.Row) = "#N/A"
Else
.Range("E" & R.Row) = Verweis.Offset(0, 1)
End If
Exit For
End If
Next j
Next i
End With

End Sub

jinx
11.05.2004, 18:58
<font size="2" face="Century Gothic">Moin, Susanne,

tut mir leid, wenn ich mal wieder widerspreche - aber eine Schleife und eine IF-/IIF-Abfrage für die Zuweisung der Spalte würden es IMHO auch tun.</font>

Susanne E.
11.05.2004, 19:32
Hi Jinx,

kennst du Herricht und Preil? Bei deinem "tut mir leid, wenn ich mal wieder widerspreche " kam mir die Standardantwort des begriffsstutzigen Herricht auf die staendigen Belehrungen seines Freundes in den Sinn: "Ist ja prima. Da LERNE ich wieder so VIEL von Ihnen." In dem Sinne… korrigiere und kritisiere so viel du willst… :D

Das mit IIf sehe ich ein. Die Find Methode als Ansatz ist aber okay?

Hier der Vereinfachte Code:

Sub Verweis2()
Dim Lookuprange As Range
Dim Lastrow As Integer
Dim Lookupvalue As Range
Dim Verweis As Range
Dim i As Integer

Set Lookuprange = ActiveWorkbook.Sheets("Blatt2").Range("A1:B9")
With ActiveWorkbook.Sheets("Blatt1")
Lastrow = Application.WorksheetFunction.Max(.Range("B65536").End(xlUp).Row, .Range("C65536").End(xlUp).Row)
For i = 1 To Lastrow
Set Lookupvalue = IIf(IsEmpty(.Range("B" & i)), .Range("C" & i), Range("B" & i))
Set Verweis = Lookuprange.Find(Lookupvalue)
If Verweis Is Nothing Then
.Range("E" & i) = "#N/A"
Else
.Range("E" & i) = Verweis.Offset(0, 1)
End If
Next i
End With

End Sub