Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1028to1032
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Vlookup

Vlookup
01.12.2008 20:47:00
WOP
Hallo alle Zusammen,
ich habe ein Problem mit Vlookup.
In meinem Makro werden die Daten aus allen Worksheet ausgelesen. Falls kein Wert über Vlookup gefunden werden sollte, wird der Wert des vorherigen Excel-Sheets kopiert. (ohne, dass ich dies will)
Noch ein Kleines Bsp.
Suchwert "Flugzeug" Anzahl im Blatt 1 = 100
Anzahl im Blatt 2 = im Blatt ist kein Flugzeug vorhanden
Für das Blatt1 werden 100 ausgelesen, für das Blatt 2 sollte 0 angezeigt werden, allerdings werden 100 ausgelesen, obwohl dieser Wert (Flugzeug) nicht vorhanden ist.
Hat jemand dazu eine Idee. Ich habe den Code mal eingefügt.
Viele Grüsse WOP

For Each WS In ActiveWorkbook.Worksheets
If WS.Name  "Konsolidierung" Then
Spalte = Spalte + 1
WS.Range("a9:a200").NumberFormat = "General"
WS.Range("a9:a200").TextToColumns
On Error Resume Next
For i = 9 To 16
WSKons.Cells(i, 2 + Spalte).Value = Application.WorksheetFunction.VLookup(WSKons.Cells(  _
i, 1).Value, WS.Range("A9:C180"), 3, False)
WSKons.Cells(i, 2 + Spalte + 1).Value = Application.WorksheetFunction.Sum(WSKons.Range(  _
WSKons.Cells(i, 2), WSKons.Cells(i, 2 + Spalte)))
If WSKons.Cells(i, 2 + Spalte).Value Is Error Then
Error.Value = 0
End If


6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Vlookup
01.12.2008 22:01:00
Daniel
Hi
schwer zu sagen, ohne Beispieldatei und unvollständigem Code.
was auffällig ist, daß du pro Blatt 2 Spalten belegst (Spalte und Spalte + 1), aber den Spaltenzähler pro Blatt nur um jeweils 1 nach oben zählst. Das könnte dazu führen, daß Daten überschrieben werden.
weiterhin solltest du dir darüber im Klaren sein, daß wenn VLOOKUP einen Wert nicht findet und ein Fehler erzeugt wird, NICHTS passiert, dh das Makro macht einfach weiter und es wird kein Wert in die Zelle geschrieben, auch kein Fehlerwert. Somit ist deine letzte IF-Prüfung obsolet.
ich würde dir empfehlen, nicht mit ON ERROR RESUME NEXT zu arbeiten, sondern über eine IF-Prüfung mit z.B. Worksheetfunction.COUNTIF zu prüfen ob der Wert vorhanden ist und entsprechen im Programm zu reagieren, so hast du eine bessere Kontrolle über den Ablauf und kannst auf ON ERROR RESUME NEXT verzichten, was dir die Fehlersuche im weiteren wesentlich erleichtert.
Ich würde dir empfehlen, den Code mal im Einzelstepmodus durchzugehen und genau zu beobachten, was passiert.
Gruß, Daniel
Anzeige
AW: Vlookup
02.12.2008 08:10:00
WOP
Hallo Daniel,
erstmal vielen Dank für deine Antwort!
Die Spaltenbelegung hängt damit zusammen, dass in der einen Spalte die Werte ausgelesen werden und in der letzten Spalte die Werte summiert werden. (Hast du dazu Verbesserungsvorschläge?)
Die Vorgehensweise mit Countif finde ich sehr interessant. Kannst du mir eventuelle ein Beispiel dazu geben.
Ich werde auf jeden Fall den Code mal Schritt für Schritt durchgehen....Eine Alternative zu Vlookup gibt es wahrscheinlich nicht, oder?
Viele Grüsse
WOP
AW: Vlookup
02.12.2008 09:07:19
Reinhard
Moin Wob,
du möchtest ein Beispiel zu Countif?
Wie ist es umgekehrt, du liest die Aussage von Daniel nochmal durch:
"schwer zu sagen, ohne Beispieldatei und unvollständigem Code."
und machst mal einen großen "Denk"
Gruß
Reinhard
Anzeige
AW: Vlookup
02.12.2008 09:22:00
WOP
Morge Reinhard,
vielen Dank für deine nette Aufforderung!!
Der vollständige Code ist:

Private Sub Konsolidieren_Click()
Dim WS As Worksheet
Dim i, j, h, k As Long
Dim WSKons As Worksheet
Set WSKons = Sheets("Konsolidierung")
For Each WS In ActiveWorkbook.Worksheets
If WS.Name  "Konsolidierung" Then
Spalte = Spalte + 1
WS.Range("a9:a200").NumberFormat = "General"
WS.Range("a9:a200").TextToColumns
On Error Resume Next
For i = 9 To 16 'Alle Aktiven Bilanzposten
WSKons.Cells(i, 2 + Spalte).Value = Application.WorksheetFunction.VLookup(WSKons.Cells( _
i, 1).Value, WS.Range("A9:C180"), 3, False)
WSKons.Cells(i, 2 + Spalte + 1).Value = Application.WorksheetFunction.Sum(WSKons.Range( _
WSKons.Cells(i, 2), WSKons.Cells(i, 2 + Spalte)))
Next i
For j = 21 To 32 ' Alle Passiven Bilanzposten
WSKons.Cells(j, 2 + Spalte).Value = Application.WorksheetFunction.VLookup(WSKons.Cells( _
j, 1).Value, WS.Range("A9:C180"), 3, False)
WSKons.Cells(j, 2 + Spalte + 1).Value = Application.WorksheetFunction.Sum(WSKons.Range( _
WSKons.Cells(j, 2), WSKons.Cells(j, 2 + Spalte)))
Next j
For h = 45 To 57 ' Für alle Aufwendungen
WSKons.Cells(h, 2 + Spalte).Value = Application.WorksheetFunction.VLookup(WSKons.Cells( _
h, 1).Value, WS.Range("A9:C180"), 3, False)
WSKons.Cells(h, 2 + Spalte + 1).Value = Application.WorksheetFunction.Sum(WSKons.Range( _
WSKons.Cells(h, 2), WSKons.Cells(h, 2 + Spalte)))
Next h
For k = 62 To 65 ' Für alle Erträge
WSKons.Cells(k, 2 + Spalte).Value = Application.WorksheetFunction.VLookup(WSKons.Cells( _
k, 1).Value, WS.Range("A9:C180"), 3, False)
WSKons.Cells(k, 2 + Spalte + 1).Value = Application.WorksheetFunction.Sum(WSKons.Range( _
WSKons.Cells(k, 2), WSKons.Cells(k, 2 + Spalte)))
Next k
If Err.Number > 0 Then ws2.Cells(3, 1).Value = "#NV" 'oder alternativ andere Ausgabe
End If
Next
End Sub


Anzeige
AW: Vlookup
02.12.2008 22:15:24
Daniel
Hi
beispiel für Countif zum vermeiden von Programmabrüchen durch die VLOOKUP-Funktion

IF Worksheetfunction.CountIf(Range("A1:A100");"Kosten")0 then
Range("x1").Value = Worksheetfunction.VLookUP("Kosten", Range("A1:C100"), 2, 0)
Else
Range("x1").Value = "nicht gefunden"
end if


zur Summierung, wenn nur in der letzten Spalte die Summierung stehen bleiben soll, dann würde ich die Summe auch erst am Schluss einfügen und nicht jedesmal, um sie immer wieder zu überschreiben.
Gruß, Daniel

AW: Vlookup
02.12.2008 18:02:31
WOP
Hallo Daniel,
ich habe mich nochmals mit dem Makro auseinander gesetzt. Das Problem ist folgender Befehl

WSKons.Cells(j, 2 + Spalte + 1).Value = Application.WorksheetFunction.Sum(WSKons.Range(WSKons.Cells(j, 2), WSKons.Cells(j, 2 + Spalte)))


Hättest du zufällig einen Verbesserungsvorschlag?
Grüsse
WOP

Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige