Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender Navigationstipps
Sverweis mit VBA
27.04.2005 18:43:57
Gisela
Hallo,
ich muß in mehreren Spalten mit Sverweis arbeiten. Da die Daten anschließend noch weiter verwendet werden, muß ich die Formeln auch wieder löschen. Das ist von der Sache her auch kein Problem (kopie/Werte). Aber das ganze umfaßt 200 Zeilen und mehrere Spalten.
Hier der Sverweis mal für die Spalte B in der Tabelle2
=Testefehler(SVERWEIS(A3;Tabelle1!A:J;2;FALSCH)
Kann ich diesen Sverweis auch per VBA einsetzen, so dass nachher auch keine Formeln, sondern nur Werte in der Spalte stehen.
Oder gibt es hier nur die Möglichkeit über den Recorder?
Grüße und vielen Dank für jeden Hinweis
Gisela

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sverweis mit VBA
27.04.2005 19:39:05
Cardexperte
Hello Gisele, also sverweis in VBA ist: worksheetfunction.CountIf(), gleiche Syntax wie sverweis, was mir nicht klar ist ist die Funktion Testefehler!
Gruss WS
AW: Sverweis mit VBA
27.04.2005 19:44:32
Gisela
Hallo,
unter Testefehler ist die Function hinterlegt, mit der "NV" usw. unterdrückt wird.
Da ich nur Recordererfahrung habe, kannst Du mir sagen, wie eine Lösung ohne Recorder aussieht?
Vielen Dank und Gruß
Gisela
AW: Sverweis mit VBA
27.04.2005 19:57:00
Cardexperte
Hello Gisela,
Testefehler ist also eine selbst geschriebene Funktion?
also beim Debuggen würde ich erst einmal nur mit countif arbeiten und testen, falls Fehler muss im Code eine Fehlerbehandlungroutine eingebaut werden , z.B.
mit if err.number 0 then else, oder on error resume next, das kommt darauf an, am besten du schickst mal ein dummyfile und ich schreib dann mal das Makro dafür, sollte eigentlich kein Problem sein!
Gruss WS
Anzeige
AW: Sverweis mit VBA
27.04.2005 20:33:26
Gisela
Hallo,
es ist sehr nett, wenn Du mir helfen willst.
Wie schon gesagt habe ich das ganze per Recorder und sieht so aus:

Sub Sverweis()
Range("B3").Select
ActiveCell.FormulaR1C1 = _
"=Testefehler(VLOOKUP(RC[-1],Tabelle1!C[-1]:C[8],2,FALSE))"
Range("C3").Select
ActiveCell.FormulaR1C1 = _
"=Testefehler(VLOOKUP(RC[-2],Tabelle1!C[-2]:C[7],2,FALSE))"
Range("D3").Select
ActiveCell.FormulaR1C1 = _
"=Testefehler(VLOOKUP(RC[-3],Tabelle1!C[-3]:C[6],2,FALSE))"
Range("E3").Select
ActiveCell.FormulaR1C1 = _
"=Testefehler(VLOOKUP(RC[-4],Tabelle1!C[-4]:C[5],2,FALSE))"
Range("F3").Select
ActiveCell.FormulaR1C1 = _
"=Testefehler(VLOOKUP(RC[-5],Tabelle1!C[-5]:C[4],2,FALSE))"
Range("G3").Select
ActiveCell.FormulaR1C1 = _
"=Testefehler(VLOOKUP(RC[-6],Tabelle1!C[-6]:C[3],2,FALSE))"
Range("H3").Select
ActiveCell.FormulaR1C1 = _
"=Testefehler(VLOOKUP(RC[-7],Tabelle1!C[-7]:C[2],2,FALSE))"
Range("I3").Select
ActiveCell.FormulaR1C1 = _
"=Testefehler(VLOOKUP(RC[-8],Tabelle1!C[-8]:C[1],2,FALSE))"
Range("B3:I3").Select
Selection.Copy
Range("B4:I200").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("B3:I200").Select
Application.CutCopyMode = False
Selection.Copy
Range("B3:I200").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("B3").Select
Call Nullen
End Sub

Über den Makro "Nullen" werden die "Nullen" gelöscht, da ich diese als Wert erhalte, wenn nicht alle z.Zt. 200 Zeilen belegt sind und nicht weiss, wie ich dass mit der Sverweisformel hinbekomme, dass statt Nullen nichts angezeigt wird.
Grüße
Gisela
Anzeige
AW: Sverweis mit VBA
27.04.2005 22:56:50
Beate
Hallo Gisela,
füge diesen Code ins Codefenster von Tabelle2 ein:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
Application.EnableEvents = False
Dim rngB As Range
Set rngB = Sheets("Tabelle1").Range("A:J")
Cells(Target.Row, 2).Value = Application.WorksheetFunction.Testefehler(VLookup(Cells(ActiveCell.Row, 1), rngB, 2, False))
Cells(Target.Row, 3).Value = Application.WorksheetFunction.Testefehler(VLookup(Cells(ActiveCell.Row, 1), rngB, 3, False))
Cells(Target.Row, 4).Value = Application.WorksheetFunction.Testefehler(VLookup(Cells(ActiveCell.Row, 1), rngB, 4, False))
Cells(Target.Row, 5).Value = Application.WorksheetFunction.Testefehler(VLookup(Cells(ActiveCell.Row, 1), rngB, 5, False))
Cells(Target.Row, 6).Value = Application.WorksheetFunction.Testefehler(VLookup(Cells(ActiveCell.Row, 1), rngB, 6, False))
Cells(Target.Row, 7).Value = Application.WorksheetFunction.Testefehler(VLookup(Cells(ActiveCell.Row, 1), rngB, 7, False))
Cells(Target.Row, 8).Value = Application.WorksheetFunction.Testefehler(VLookup(Cells(ActiveCell.Row, 1), rngB, 8, False))
Cells(Target.Row, 9).Value = Application.WorksheetFunction.Testefehler(VLookup(Cells(ActiveCell.Row, 1), rngB, 9, False))
Cells(Target.Row, 10).Value = Application.WorksheetFunction.Testefehler(VLookup(Cells(ActiveCell.Row, 1), rngB, 10, False))
Application.EnableEvents = True
End If
End Sub

Deine Funktion Testefehler kenne ich ja nicht, von daher habe ich meinen Code ohne sie getestet und da lief er. Bei Eingabe in Tabelle2! Spalte A wird nun in der aktiven Zeile Spalten B:J jeweils der entsprechende Sverweis aus Tabelle 1 Spalte A:J genommen.
Gruß,
Beate
Anzeige
AW: Sverweis mit VBA
28.04.2005 07:15:06
Gisela
Hallo Beate,
vielen Dank für Deine Hilfe.
Ich habe den Code ins Tabellenblatt übernommen und bekomme die Fehlermeldung

Sub oder 

Function nicht definiert. Markiert ist (VLookup.
Die 

Function TesteFehler sieht so aus:

Function TesteFehler(x1)
If IsError(x1) = True Then
TesteFehler = 0
Else
TesteFehler = x1
End If
End Function

Hast Du noch einen Tipp?
Viele Grüße
Gisela
AW: funktioniert
28.04.2005 08:05:19
Gisela
Hallo Beate,
sorry, funktioniert jetzt, nachdem ich TesteFehler entfernt habe.
Vielen Dank für Deine Hilfe
Grüße
Gisela
Anzeige
AW: funktioniert
28.04.2005 10:57:54
Beate
Hallo Gisela,
bei mir geht auch diese Verkürzung (Makro im Codefenster von Tabelle2!):

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
Application.EnableEvents = False
Dim rngA As Range
Dim rngB As Range
Set rngA = Cells(ActiveCell.Row, 1)
Set rngB = Sheets("Tabelle1").Range("A:J")
Cells(Target.Row, 2).Value = Application.VLookup(rngA, rngB, 2, False)
Cells(Target.Row, 3).Value = Application.VLookup(rngA, rngB, 3, False)
Cells(Target.Row, 4).Value = Application.VLookup(rngA, rngB, 4, False)
Cells(Target.Row, 5).Value = Application.VLookup(rngA, rngB, 5, False)
Cells(Target.Row, 6).Value = Application.VLookup(rngA, rngB, 6, False)
Cells(Target.Row, 7).Value = Application.VLookup(rngA, rngB, 7, False)
Cells(Target.Row, 8).Value = Application.VLookup(rngA, rngB, 8, False)
Cells(Target.Row, 9).Value = Application.VLookup(rngA, rngB, 9, False)
Cells(Target.Row, 10).Value = Application.VLookup(rngA, rngB, 10, False)
Application.EnableEvents = True
End If
End Sub

Gruß,
Beate
Anzeige
AW: funktioniert nicht ganz
28.04.2005 11:20:31
Gisela
Hallo,
vielen Dank an beide.
An Beate die Frage: "Change" bezieht sich immer nur auf die Eingabe in einer Zelle.
Kann das auch angepasst werden, damit das Ereignis auch ausgelöst wird, wenn ich z.B. mehrere Zellen gleichzeitig einkopiere.
Und funktioniert das dann auch, wenn die Daten nicht reinkopiert, sondern über einen Makro eingelesen werden?
Das ist eine wahrlich harte Nuß für mich.
Grüße
Gisela
Codeerweiterung gesucht
28.04.2005 12:07:02
Beate
Hallo Gisela,
ja, dieses Makro springt jeweils nach Eingabe in Spalte A an.
Für deinen neuen Wunsch müßte man wohl irgendwas mit ner Schleife basteln, die solange läuft, bis alle neu zugefügten Zeilen in A die entsprechenden Sverweise erhalten haben.
Aber damit bin ich codemäßig an meinen Grenzen angelangt, bzw. fehlt mir die Zeit, es bis zur Lösung zu verfolgen.
Zu deiner Frage: "Und funktioniert das dann auch, wenn die Daten nicht reinkopiert, sondern über ein Makro eingelesen werden" - ja sicher, man könnte das Makro, über das eingelesen wird ja direkt entsprechend erweitern. Aber auch dies kann ich dir nicht umsetzen.
Ich habe die Frage mal auf offen gestellt.
Gruß,
Beate
Anzeige
AW: Codeerweiterung gesucht
28.04.2005 17:53:37
Gisela
Hallo Beate,
vielen Dank für die Hilfe.
Ich hab den Ablauf jetzt komplett mit dem Recorder aufgenommen.
Funktioniert vielleicht nicht optimal - aber funktioniert.
Grüße
Gisela
AW: Sverweis mit VBA
28.04.2005 08:21:48
Cardexperte
sorry, war natürlich vlookup

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige