Ich habe eine Tabelle mit ca. 135 Zeilen. Diese Zeilen sind autogefiltert,
d.h. sie sind sichtbar. Nicht sichtbare Zeilen wären insgesamt ca. 300.
Weil die Datei insgesamt sehr gross ist bzw. noch viel grösser wird, muss
arbeitsspeichereffizient gearbeitet werden. Zur Diskussion stehen meiner
Meinung nach zwei Varianten:
Entweder erstelle ich mittels einer For-Schlaufe ein Array mit den
sichtbaren Daten aus dem Autofilter (die 135 Zeilen) oder ich benutze den
Autofilter mit Vlookup. Vom Gefühl her wird VLookup besser ein.
Gut, ich hoffe, es ist so weit klar?
Ich habe mit der folgenden Zeile versucht, für die Zelle B2 in Tabelle 2 die
entsprechende Vlookup-Daten ausfindig zu machen:
with sheets("tabelle2")
.Range("B2").Value = tabelle2.Application.WorksheetFunction.VLookup(Cells(1,
2), tabelle1.Range("A1", "C300", 3, 0)).SpecialCells(xlCellTypeVisible)
end with
dies ist natürlich nur ein codeshnippet, so dass andere Inhalte für die
with-schlaufe nicht wiedergegeben sind.
Was mach ich falsch? Wie könnte ich das besser lösen?
danke und gruss,
Kai
Das hätte den Vorteil, wenn Du die Filterbedingung dort (immer in beide
Such-, also -begriff wie auch -bereich) hineinbringst, dass Du unabhängig
von gesetztem oder nicht gesetztem Autofilter bist.
--
Moin+Gruss Alexander - MVP for MS Excel - www.xxcl.de - mso2000sp3 --7-2
Am Thu, 7 Aug 2008 06:29:01 -0700 schrieb kai:
> with sheets("tabelle2")
> .Range("B2").Value = tabelle2.Application.WorksheetFunction.VLookup(Cells(1,
> 2), tabelle1.Range("A1", "C300", 3, 0)).SpecialCells(xlCellTypeVisible)
> end with
probiers mal so:
With Sheets("Tabelle2")
.Range("B2").Value = Application.WorksheetFunction _
.VLookup(.Cells(2, 1), Sheets("Tabelle1").Range("A1:D300"), 3, 0)
End With
Mit freundlichen Grüssen
Claus Busch
--
Win XP Prof SP2 / Vista Ultimate
Office 2003 SP2 / 2007 Ultimate
Ich bin mittlerweile dazu übergegangen, die nicht sichtbaren Daten mit
einzubeziehen, da es sich nicht um sehr viele Daten handelt, in denen gesucht
wird. Mein Code ist nun folgender:
With Sheets("Dummy")
.Range("B2").Value =
Application.WorksheetFunction.VLookup(wsDummy.Range("A2"),
wsRBunits.Range("A:D"), 3, 0)
'.Range("B2").Copy Destination:=Sheets("Dummy").Range("B3:B1082")
End With
Ich erhalte die Fehlermeldung: Laufzeitfehler 91: Objektvariable oder
With-Blockvariable nicht definiert. Was habe ich falsch gemacht?
Danke für jeden Hinweis!
Kai
With Sheets("Dummy")
.Range("B2").Value = Application.WorksheetFunction _
.VLookup(.Range("A2"), Sheets("RBunits").Range("A:D"), 3, 0)
.Range("B2").AutoFill Destination:=Range("B2:B1082"), _
Type:=xlFillDefault
--
Ups, habe eben aus Versehen vor dem Beantworten auf Senden geklickt.
Grundsätzlich meine ich das folgende:
Man kann mit VERGLEICH auch in zwei addierten oder verketteten Spalten
suchen. Wenn nun die eine Spalte davon die Bedingung selbst wiedergibt, hast
Du schon gewonnen.
Danke für die Anregung, aber ich erhalte mit Deinem Code diesen Error:
Laufzeitfehler 9: Index ausserhalb des gültigen Bereichs
--
Excel 2007
"Claus Busch" wrote:
> Hallo Kai,
>
> With Sheets("Dummy")
> ..Range("B2").Value = Application.WorksheetFunction _
> .VLookup(.Range("A2"), Sheets("RBunits").Range("A:D"), 3, 0)
> ..Range("B2").AutoFill Destination:=Range("B2:B1082"), _
Ah, jetzt versthe ich, was Du meinst. In meinem Fall ist es so, dass es in
der Tabelle RBunits in der Spalte B einen Zustand "1" gibt, nach dem
gefiltert werden muss. Aber der Zustand erscheint 135 mal, so dass es kein
taugliches Suchkriterium ist, wenn ich Dich richtig verstanden habe.
--
Excel 2007
> Danke für die Anregung, aber ich erhalte mit Deinem Code diesen Error:
> Laufzeitfehler 9: Index ausserhalb des gültigen Bereichs
Claus könnte Dein Begehr ja auch nur zufällig richtig getroffen haben, denn
er weiß ja gar nicht, ob Du auf einer anderen Stufe Fehler gemacht hast.
Bereinige Deine Datei auf Testdaten, lade sie irgendwo hin hoch, und gib den
Link dazu. "Ich weiß nicht, wie das geht" lasse ich nicht gelten, wenn Du
Dich sogar mit VBA beschäftigst.
Dann hättest Du uns schon von Anfang an nicht mit VLookup kommen dürfen.
Denn das gibt gerade nur einen Wert zurück.
Rückgabe mehrerer SVERWEIS-Werte hier: www.xxcl.de/0054.htm
- AutoFill: so weit ich weiss, wird dies ja gebraucht, um z.B. eine
Zahlenreihe zu generieren?
- xlFillDefault: ein interessanter Hinweis. In meinem Excelsheet ist es so,
dass diese Daten für VLookup eigentlich 135 mal eingesetzt werden - in einem
Abstand von 1080 Zeilen. Danach wir das Makro auf diese erste Zeilen (aus
Vlookup) einen direkten Bezug =RBunits(zelle) nehmen, damit an dem
aufwendigen Suchalgorithmus von Vlookup gespart werden kann.
Man muss sich bewusst sein, dass diese Datei in Excel 2007 (es hat keine
Bilder o.ä.) 20MB gross ist - und mit dem Skript mehr Arbeitsspeicher
verbraucht, als ich vorhanden habe(!).
--
Excel 2007
Danke! :-)
--
Excel 2007