Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
516to520
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
516to520
516to520
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

sverweis ohne #NV, verw. Zeilen ermitteln

sverweis ohne #NV, verw. Zeilen ermitteln
12.11.2004 18:29:44
Haxley
Hallo
Ich wie kann ich sverweis einsetzen ohne das es mir in leeren Zeilen ein #NV bringt?
Ich habe eine Tabelle, die täglich wechselt. Also mal 500 Einträge mal 9000 und ich muß die täglich bearbeiten.
Hier mal der Code den ich verwende, allerdings bringt er mir in leeren Zeilen eben diesen #NV Eintrag. Ich dachte schon daran eine suche nach #NV zu machen und diese Zeilen im Anschluß löschen zu lassen, aber gerade das Zeilenlöschen dauert immer so lange... :-(
Besser wäre es wenn die (leeren) Zeilen nicht erst entstehen würden.
Frage1: wie kann ich die #NV Ausgabe verhindern?
Frage2: wie kann ich die jeweils verwendeten Zeilen ermitteln und zu Range transverieren? (Wäre auch eine globale Frage da der Code hier nur ein Teil ist.)

Sub id()
Columns("A:A").Select
Selection.Insert Shift:=xlToRight
Range("A2").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[1],Tabelle2!R1C1:R100C2,2,FALSE)"
Range("A2").Select
Selection.Copy
Range("A2:A10000").Select
ActiveSheet.Paste
Range("A1").Select
Application.CutCopyMode = False
End Sub

Danke Gruß Haxley

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: sverweis ohne #NV, verw. Zeilen ermitteln
12.11.2004 18:40:34
Frank
Hallo Haxley,
in einer Formel kannst du #NV wie folgt umgehen:
=Wenn(ISTFEHLER(deine SVerweis Formel));"";deine SVerweis Formel)
Heißt also, wenn die SVerweis Formel einen Fehler ergibt, dann steht nichts in der Zelle (daher das "" in der Formel) sonst führt er die SVerweis Formel aus und liefert das Ergebnis.
Poste mal bitte die Formel wie Sie in der Excelzelle steht, dann kann ich Dir das auch in vba schreiben.
Gruß
Frank
AW: sverweis ohne #NV, verw. Zeilen ermitteln
12.11.2004 18:43:55
Haxley
=SVERWEIS(B2;Tabelle2!$A$1:$B$100;2;FALSCH)
AW: sverweis ohne #NV, verw. Zeilen ermitteln
12.11.2004 18:50:14
Frank
Nochmals Hallo Haxley,
kopiere folgende Formel anstelle der jetztigen in dein Makro:
"=IF(ISERROR(VLOOKUP(RC[1],Tabelle2!R1C1:R100C2,2,FALSE)),"""",VLOOKUP(RC[1],Tabelle2!R1C1:R100C2,2,FALSE))"
also
Range("A2").Select
ActiveCell.FormulaR1C1 = "=IF(ISERROR(VLOOKUP(RC[1],Tabelle2!R1C1:R100C2,2,FALSE)),"""",VLOOKUP(RC[1],Tabelle2!R1C1:R100C2,2,FALSE))"
Sollte klappen. Zwei Dinge noch: Mach bitte eine Sicherheitskopie deiner Datei und egal ob es klappt oder nicht, antworte bitte... muß leider feststellen, dass das nicht alle hier machen.
Gruß
Frank
Anzeige
AW: sverweis ohne #NV, verw. Zeilen ermitteln
12.11.2004 19:37:29
Haxley
Funktioniert tatellos. Ich kannte die Funktion "=IF(ISERROR... bzw.=WENN(ISTFEHLER... schon aber die Syntax usw. ... naja. Muß ich halt fragen.
Super Dank noch mal.
Was mich aber immer noch interesiert:
wie kann ich die jeweils verwendeten Zeilen ermitteln und zu Range transverieren (also per VBA Code)? Ich habe da ein paar Sortiervorgänge mit löschen von Zeilen usw..

Da die Zeilen variiren (von ca.500-9000) hab ich als Range halt z.B.("A1:K10000"). Das ist bissel sinnlos aber sicher, da immer leere Zeilen berechnet werden und das dauert.... lol.
Kann man die Zeilen nicht irgendwie anders handeln?
Gruß Haxley
Anzeige
AW: sverweis ohne #NV, verw. Zeilen ermitteln
12.11.2004 19:48:32
Frank
Hallo Haxley,
du möchtest also z.B. Range("A1:A1000").select variabel haben, also nur die Zeilen selektieren in denen etwas steht?
Gruß
Frank
AW: sverweis ohne #NV, verw. Zeilen ermitteln
12.11.2004 20:52:45
Haxley
ja ganz genau, geht das irgendwie (einfach...)?
Das hätte was, echt.
AW: sverweis ohne #NV, verw. Zeilen ermitteln
12.11.2004 20:57:54
Frank
Folgendes Makro mußt du ein wenig umbauen:
Dim Anzahl As Long
Dim VRange As Range
Set VRange = Range("A10:A65536")
Anzahl = 65536 - 9 - Application.WorksheetFunction.CountBlank(VRange)
Range(Cells(10, 1), Cells(Anzahl + 9, 1)).Select
Als Erklärung: Das Makro zählt die leeren Zellen in dem Bereich ("A10:A65536") und selektiert dann von A10 "(cells(10,1)" die entsprechenden Zellen. Wenn in dem Bereich A10 bis A65536 1000 Zellen belegt sind, dann werden ab A10 1000 selektiert. Hoffe das hilft Dir weiter...
Gruß
Frank
Anzeige
AW: sverweis ohne #NV, verw. Zeilen ermitteln
12.11.2004 21:43:48
Haxley
Wäre in meinem Fall, wenn ich die Überschrift der Spalten weglasse dann:
Dim 10000 As Long
Dim VRange As Range
Set VRange = Range("A2:K65536")
Anzahl = 65536 - 2 - Application.WorksheetFunction.CountBlank(VRange)
Range(Cells(2, 1), Cells(2 + 1, 1)).Select
Oder? hmmm naja, die ganze Datei ist auch gekürzt noch größer als 300kb, sonst würd ich die mal reinstellen. Ich send mal den Originalcode den ich im mom verwende:
Es geht darum, in einer Preisliste doppelte Artikelnummern zu löschen aber die billigsten zu lassen, dann noch ordnen (Spalten verschieben) und den Warengruppen eine ID zu verpassen.
Das Macro funzt so weit, ist aber sehr langsam, da eben die Range immer auf (...:..10000) gesetzt ist um alles abzudecken.
Da ich ja mehrere (auch wiederkehrende) Range Werte drin habe.... wie müßte dann das aussehn? Ersetze ich dann Range mit dem jeweis angepassten Code von oben?

Sub test1()
Range("A1:K10000").Sort Key1:=Range("D2"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A1:K10000").Sort Key1:=Range("K2"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Columns("L:L").Select
ActiveCell.FormulaR1C1 = ""
Range("L2").Select
ActiveCell.FormulaR1C1 = "=IF(R[-1]C[-1]=RC[-1],""doppeleintrag"","""")"
Range("L2").Select
Selection.Copy
Range("L2:L10000").Select
ActiveSheet.Paste
Range("L1").Select
Application.CutCopyMode = False
Selection.ClearContents
Dim i As Long           ' Zeilenzähler
Dim tofind As Variant   ' Hiernach wird gesucht
Dim found As Range       ' Eine Fundstelle oder Nothing
tofind = "doppeleintrag"
If tofind = "" Then Exit Sub
Application.ScreenUpdating = False
For i = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
Set found = Rows(i).Find(what:=tofind, LookIn:=xlValues, lookat:=xlWhole)
If Not found Is Nothing Then Rows(i).Delete
Next
Application.ScreenUpdating = True
Columns("L:L").Select
Selection.ClearContents
Range("L1").Select
Columns("A:A").Select
Range("A1:K10000").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A1").Select
Worksheets("Tabelle1").Range("A:A").Cut
ActiveSheet.Paste Destination:=Worksheets("Tabelle1").Range("M:M")
Worksheets("Tabelle1").Range("B:B").Cut
ActiveSheet.Paste Destination:=Worksheets("Tabelle1").Range("A:A")
Worksheets("Tabelle1").Range("C:C").Cut
ActiveSheet.Paste Destination:=Worksheets("Tabelle1").Range("B:B")
Worksheets("Tabelle1").Range("M:M").Cut
ActiveSheet.Paste Destination:=Worksheets("Tabelle1").Range("C:C")
Worksheets("Tabelle1").Range("F:F").Cut
ActiveSheet.Paste Destination:=Worksheets("Tabelle1").Range("M:M")
Worksheets("Tabelle1").Range("I:I").Cut
ActiveSheet.Paste Destination:=Worksheets("Tabelle1").Range("F:F")
Worksheets("Tabelle1").Range("G:G").Cut
ActiveSheet.Paste Destination:=Worksheets("Tabelle1").Range("N:N")
Worksheets("Tabelle1").Range("M:M").Cut
ActiveSheet.Paste Destination:=Worksheets("Tabelle1").Range("G:G")
Worksheets("Tabelle1").Range("J:J").Cut
ActiveSheet.Paste Destination:=Worksheets("Tabelle1").Range("I:I")
Worksheets("Tabelle1").Range("E:E").Cut
ActiveSheet.Paste Destination:=Worksheets("Tabelle1").Range("J:J")
Worksheets("Tabelle1").Range("H:H").Cut
ActiveSheet.Paste Destination:=Worksheets("Tabelle1").Range("E:E")
Worksheets("Tabelle1").Range("N:N").Cut
ActiveSheet.Paste Destination:=Worksheets("Tabelle1").Range("H:H")
Range("F1").Select
Selection.ClearContents
ActiveCell.FormulaR1C1 = "TECHNISCHE_DATEN"
Range("F2").Select
Columns("A:A").Select
Selection.Insert Shift:=xlToRight
Range("A2").Select
ActiveCell.FormulaR1C1 = "=IF(ISERROR(VLOOKUP(RC[1],Tabelle2!R1C1:R100C2,2,FALSE)),"""",VLOOKUP(RC[1],Tabelle2!R1C1:R100C2,2,FALSE))"
Range("A2").Select
Selection.Copy
Range("A2:A10000").Select
ActiveSheet.Paste
Range("A1").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "WG-ID"
Range("A2").Select
End Sub

Anzeige
AW: sverweis ohne #NV, verw. Zeilen ermitteln
13.11.2004 09:54:28
Frank
Hallo Haxley,
habe dein Makro ein bisschen verändert. Kann es aber leider nicht testen, weil ich die Datei nicht habe (mach bitte ein Backup vor dem ausprobieren). Sowohl die Range in Spalte A als auch die in Spalte L wird nun genau festgelegt, es werden also nur die Zellen markiert, in denen was drin steht. Das gleiche müsste man noch für deine Sortierungen vornehmen. Aber ohne Beispieldatei kann ich Dir leider nicht viel weiterhelfen...
Gruß
Frank

Sub test1()
Dim Anzahl As Long
Dim Anzahl2 As Long
Dim VRange As Range
Dim V1Range As Range
Set VRange = Range("L2:L10000")
Set V1Range = Range("A2:A10000")
Anzahl = 10000 - 1 - Application.WorksheetFunction.CountBlank(VRange)
Anzahl2 = 10000 - 1 - Application.WorksheetFunction.CountBlank(V1Range)
If Anzahl = 0 Then Anzahl = 1
If Anzahl2 = 0 Then Anzahl2 = 1
Range("A1:K10000").Sort Key1:=Range("D2"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A1:K10000").Sort Key1:=Range("K2"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Columns("L:L").Select
ActiveCell.FormulaR1C1 = ""
Range("L2").Select
ActiveCell.FormulaR1C1 = "=IF(R[-1]C[-1]=RC[-1],""doppeleintrag"","""")"
Range("L2").Select
Selection.Copy
Range(Cells(2, 12), Cells(Anzahl + 1, 12)).Select
ActiveSheet.Paste
Range("L1").Select
Application.CutCopyMode = False
Selection.ClearContents
Dim i As Long           ' Zeilenzähler
Dim tofind As Variant   ' Hiernach wird gesucht
Dim found As Range       ' Eine Fundstelle oder Nothing
tofind = "doppeleintrag"
If tofind = "" Then Exit Sub
Application.ScreenUpdating = False
For i = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
Set found = Rows(i).Find(what:=tofind, LookIn:=xlValues, lookat:=xlWhole)
If Not found Is Nothing Then Rows(i).Delete
Next
Application.ScreenUpdating = True
Columns("L:L").Select
Selection.ClearContents
Range("L1").Select
Columns("A:A").Select
Range("A1:K10000").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A1").Select
Worksheets("Tabelle1").Range("A:A").Cut
ActiveSheet.Paste Destination:=Worksheets("Tabelle1").Range("M:M")
Worksheets("Tabelle1").Range("B:B").Cut
ActiveSheet.Paste Destination:=Worksheets("Tabelle1").Range("A:A")
Worksheets("Tabelle1").Range("C:C").Cut
ActiveSheet.Paste Destination:=Worksheets("Tabelle1").Range("B:B")
Worksheets("Tabelle1").Range("M:M").Cut
ActiveSheet.Paste Destination:=Worksheets("Tabelle1").Range("C:C")
Worksheets("Tabelle1").Range("F:F").Cut
ActiveSheet.Paste Destination:=Worksheets("Tabelle1").Range("M:M")
Worksheets("Tabelle1").Range("I:I").Cut
ActiveSheet.Paste Destination:=Worksheets("Tabelle1").Range("F:F")
Worksheets("Tabelle1").Range("G:G").Cut
ActiveSheet.Paste Destination:=Worksheets("Tabelle1").Range("N:N")
Worksheets("Tabelle1").Range("M:M").Cut
ActiveSheet.Paste Destination:=Worksheets("Tabelle1").Range("G:G")
Worksheets("Tabelle1").Range("J:J").Cut
ActiveSheet.Paste Destination:=Worksheets("Tabelle1").Range("I:I")
Worksheets("Tabelle1").Range("E:E").Cut
ActiveSheet.Paste Destination:=Worksheets("Tabelle1").Range("J:J")
Worksheets("Tabelle1").Range("H:H").Cut
ActiveSheet.Paste Destination:=Worksheets("Tabelle1").Range("E:E")
Worksheets("Tabelle1").Range("N:N").Cut
ActiveSheet.Paste Destination:=Worksheets("Tabelle1").Range("H:H")
Range("F1").Select
Selection.ClearContents
ActiveCell.FormulaR1C1 = "TECHNISCHE_DATEN"
Range("F2").Select
Columns("A:A").Select
Selection.Insert Shift:=xlToRight
Range("A2").Select
ActiveCell.FormulaR1C1 = "=IF(ISERROR(VLOOKUP(RC[1],Tabelle2!R1C1:R100C2,2,FALSE)),"""",VLOOKUP(RC[1],Tabelle2!R1C1:R100C2,2,FALSE))"
Range("A2").Select
Selection.Copy
Range(Cells(2, 1), Cells(Anzahl + 1, 1)).Select
ActiveSheet.Paste
Range("A1").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "WG-ID"
Range("A2").Select
End Sub

Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige