Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1020to1024
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

Sverweis per VBA?

Sverweis per VBA?
03.11.2008 13:17:41
Petra
Einen schönen Tag allerseits!
Mein Problem:
ich habe eine lange Liste (ca. 3000 Zeilen), eine Spalte beinhaltet Materialnummern. Diese will ich mit einer anderen 2. Liste vergleichen, ob sie dort existent sind. Sind die Nummern(aus 1.Liste) in der 2. Liste ist alles OK, sind aber andere Nummern in der 1. Liste, soll auf einem extra Blatt ein Hyperlink auf die 1.Liste mit der/den überzähligen Nummern gesetzt werden.
Also nochmals im Stenogramm:
Nummer in Liste 1 findet sich in Liste 2, alles OK
Nummer in Liste 1 findet sich nicht in Liste 2, auf ein 3.Blatt Hyperlink auf Liste 1 setzen
Und das ganze sollte per VBA geschehen!?
Wer kann mir dabei behilflich sein?
Liebe Grüße
Petra

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

Betreff
Datum
Anwender
Anzeige
AW: Sverweis per VBA?
03.11.2008 14:13:33
David
Hallo Petra,
ich sehe 2 Möglichkeiten:
- per Application.VLOOKUP(...) kannst du dir die Formel in VBA basteln und dann einer Variable zuordnen. Wenn du Probleme mit der Syntax hast, empfehle ich, eine Formel in Excel zu erstellen und diese dann per Recorder aufzuzeichnen.
- du suchst per 'Find' den Suchbegriff in der Datentabelle und wählst mit .Offset(...) dann den danebenliegenden Wert aus
Genaueres kann ich hier mangels Kenntnis deiner Daten nicht sagen.
Gruß
David
Listenabgleich per VBA - ohne SVERWEIS
03.11.2008 14:19:00
NoNet
Hallo Petra,
ich würde das nicht per SVERWEIS lösen sondern z.B. so :
VBA-Code:
Sub ListenabgleichHyperlink()
    '03.11.2008, NoNet - www.excelei.de (z.Zt. down !)
    Dim lngZeile As Long, rngZelel As Range
    Dim wsListe1 As Worksheet, wsListe2 As Worksheet, wsListe3 As Worksheet
    Set wsListe1 = Sheets("Liste1") 'Name bitte anpassen
    Set wsListe2 = Sheets("Liste2") 'Name bitte anpassen
    Set wsListe3 = Sheets("Liste3") 'Name bitte anpassen
    wsListe3.[A:A].ClearContents
    wsListe3.[A1] = "Fehlende Werte in Liste1 :"
    For lngZeile = 2 To wsListe1.Cells(Rows.Count, 1).End(xlUp).Row
        If Application.CountIf(wsListe2.[A:A], wsListe1.Cells(lngZeile, 1)) = 0 Then
            Set rngZelle = wsListe3.Cells(wsListe3.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1)
            rngZelle.Value = wsListe1.Cells(lngZeile, 1)
            wsListe3.Hyperlinks.Add rngZelle, "#'" & wsListe1.Name & "'!" & _
                    wsListe1.Cells(lngZeile, 1).Address
        End If
    Next
    'speicher für Objektvariablen in umgekehrter Reihenfolge wieder freigeben
    Set rngZelle = Nothing
    Set wsListe3 = Nothing
    Set wsListe2 = Nothing
    Set wsListe1 = Nothing
End Sub
Gruß, NoNet
AW: Warum per VBA?
Erich

Hallo Petra,
muss es denn VBA sein?
Die Info kannst du auch direkt per Formel in Tabelle1 erzeugen:
 AB
1MatNrHinweis
27fehlt in Tab2
312 
44 
513fehlt in Tab2
66fehlt in Tab2
72 
85fehlt in Tab2
916fehlt in Tab2
1011 

Formeln der Tabelle
ZelleFormel
B2=WENN(ISTZAHL(VERGLEICH(A2;Tabelle2!A:A;0)); "";"fehlt in Tab2")
B3=WENN(ISTZAHL(VERGLEICH(A3;Tabelle2!A:A;0)); "";"fehlt in Tab2")

Und wenn's denn VBA sein muss, ein Tipp: Such mal hier im Archiv nach Application.Match
(Das ist in Excel die Funktion VERGLEICH.)
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Sverweis per VBA?
fcs

Hallo Petra,
hier mal ein Ansatz.
Gruß
Franz

Sub Listenvergleich()
Dim wb1 As Workbook
Dim wks1 As Worksheet, wks2 As Worksheet, wksHyper As Worksheet
Dim varSuchen, rngGefunden As Range
Dim lngZeile1 As Long, lngZeileHyper As Long
Const SpMatNr1 As Long = 1 'Spalte mit der Materialnummer in Liste 1
Const SpMatNr2 As Long = 1 'Spalte mit der Materialnummer in Liste 2
Set wb1 = ActiveWorkbook 'Datei mit der Liste 1
Set wks1 = wb1.Worksheets("Liste 1")
Set wks2 = ActiveWorkbook.Worksheets("Liste 2")
'Alternative, wenn Liste 2 in anderer Datei
'  Set wks2 = Workbooks("DateiListe2.xls").Worksheets("Liste 2")
With wks1
'Materialnummern ab Zeile 1 in Liste 1 in Liste 2 suchen
For lngZeile1 = 1 To .Cells(.Rows.Count, SpMatNr1).End(xlUp).Row
varSuchen = .Cells(lngZeile1, SpMatNr1).Value
Set rngGefunden = wks2.Columns(SpMatNr2).Find(what:=varSuchen, LookIn:=xlValues, _
lookat:=xlWhole)
If rngGefunden Is Nothing Then
'ggf. Tabellenblatt für die Hyperlinks einfügen
If wksHyper Is Nothing Then
wb1.Worksheets.Add Before:=wb1.Sheets(1)
Set wksHyper = ActiveSheet
lngZeileHyper = 2 'Zeile ab der die Hyperlinks eingetragen werden sollen
End If
'Hyperlink auf fehlende Materialnummer erstellen
With wksHyper
.Hyperlinks.Add Anchor:=.Cells(lngZeileHyper, 1), Address:=wb1.FullName, _
SubAddress:="'" & wks1.Name & "'!" & .Cells(lngZeile1, SpMatNr1).Address
.Cells(lngZeileHyper, SpMatNr1).Value = varSuchen
End With
lngZeileHyper = lngZeileHyper + 1
End If
Next
If wksHyper Is Nothing Then
MsgBox "Alle Artikel aus Liste 1 sind Liste 2 enthalten."
End If
End With
End Sub


geht auch mit Formel
Beverly

Hi Petra,
mit einer Hilfsspalte (z.B. Spalte A) in Tabelle3 und dieser Formel:

=WENN(ISTFEHLER(VERGLEICH(Tabelle2!A1;Tabelle1!A$1:A$3000;0));ADRESSE(ZEILE();1;4);"") 

und einer weiteren Spalte für die lückenlose Auflistung mit Hyperlink mit dieser Formel


{=HYPERLINK("#Tabelle2!"&WENN(ZEILE(A1)>ANZAHL2(A:A);"";INDEX(A:A;KKLEINSTE(WENN(A$1:A$3000""; ZEILE($1:$1000));ZEILE(A1))));INDIREKT("Tabelle2!"&INDEX(A:A;KKLEINSTE(WENN(A$1:A$3000""; ZEILE($1:$3000));ZEILE(A1))))) }.

Spalte A kannst du ausblenden.
Formelursprung für lückenloses Auflisten: http://www.excelformeln.de/formeln.html?welcher=43
____________________

AW: Danke
Petra

Danke an David, Nonet, Erich, fcs und Beverly,
ich muß erst mal alle Lösungsansätze durcharbeiten (muß VBA sein). Sollte ich noch weitere Fagen haben, darf ich mich nochmals an Euch wenden?!
Liebe Grüße
Petra
Anzeige
AW: Warum per VBA?
03.11.2008 14:21:00
Erich
Hallo Petra,
muss es denn VBA sein?
Die Info kannst du auch direkt per Formel in Tabelle1 erzeugen:
 AB
1MatNrHinweis
27fehlt in Tab2
312 
44 
513fehlt in Tab2
66fehlt in Tab2
72 
85fehlt in Tab2
916fehlt in Tab2
1011 

Formeln der Tabelle
ZelleFormel
B2=WENN(ISTZAHL(VERGLEICH(A2;Tabelle2!A:A;0)); "";"fehlt in Tab2")
B3=WENN(ISTZAHL(VERGLEICH(A3;Tabelle2!A:A;0)); "";"fehlt in Tab2")

Und wenn's denn VBA sein muss, ein Tipp: Such mal hier im Archiv nach Application.Match
(Das ist in Excel die Funktion VERGLEICH.)
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Sverweis per VBA?
03.11.2008 14:51:36
fcs
Hallo Petra,
hier mal ein Ansatz.
Gruß
Franz

Sub Listenvergleich()
Dim wb1 As Workbook
Dim wks1 As Worksheet, wks2 As Worksheet, wksHyper As Worksheet
Dim varSuchen, rngGefunden As Range
Dim lngZeile1 As Long, lngZeileHyper As Long
Const SpMatNr1 As Long = 1 'Spalte mit der Materialnummer in Liste 1
Const SpMatNr2 As Long = 1 'Spalte mit der Materialnummer in Liste 2
Set wb1 = ActiveWorkbook 'Datei mit der Liste 1
Set wks1 = wb1.Worksheets("Liste 1")
Set wks2 = ActiveWorkbook.Worksheets("Liste 2")
'Alternative, wenn Liste 2 in anderer Datei
'  Set wks2 = Workbooks("DateiListe2.xls").Worksheets("Liste 2")
With wks1
'Materialnummern ab Zeile 1 in Liste 1 in Liste 2 suchen
For lngZeile1 = 1 To .Cells(.Rows.Count, SpMatNr1).End(xlUp).Row
varSuchen = .Cells(lngZeile1, SpMatNr1).Value
Set rngGefunden = wks2.Columns(SpMatNr2).Find(what:=varSuchen, LookIn:=xlValues, _
lookat:=xlWhole)
If rngGefunden Is Nothing Then
'ggf. Tabellenblatt für die Hyperlinks einfügen
If wksHyper Is Nothing Then
wb1.Worksheets.Add Before:=wb1.Sheets(1)
Set wksHyper = ActiveSheet
lngZeileHyper = 2 'Zeile ab der die Hyperlinks eingetragen werden sollen
End If
'Hyperlink auf fehlende Materialnummer erstellen
With wksHyper
.Hyperlinks.Add Anchor:=.Cells(lngZeileHyper, 1), Address:=wb1.FullName, _
SubAddress:="'" & wks1.Name & "'!" & .Cells(lngZeile1, SpMatNr1).Address
.Cells(lngZeileHyper, SpMatNr1).Value = varSuchen
End With
lngZeileHyper = lngZeileHyper + 1
End If
Next
If wksHyper Is Nothing Then
MsgBox "Alle Artikel aus Liste 1 sind Liste 2 enthalten."
End If
End With
End Sub


Anzeige
geht auch mit Formel
03.11.2008 15:00:14
Beverly
Hi Petra,
mit einer Hilfsspalte (z.B. Spalte A) in Tabelle3 und dieser Formel:

=WENN(ISTFEHLER(VERGLEICH(Tabelle2!A1;Tabelle1!A$1:A$3000;0));ADRESSE(ZEILE();1;4);"") 

und einer weiteren Spalte für die lückenlose Auflistung mit Hyperlink mit dieser Formel


{=HYPERLINK("#Tabelle2!"&WENN(ZEILE(A1)>ANZAHL2(A:A);"";INDEX(A:A;KKLEINSTE(WENN(A$1:A$3000""; ZEILE($1:$1000));ZEILE(A1))));INDIREKT("Tabelle2!"&INDEX(A:A;KKLEINSTE(WENN(A$1:A$3000""; ZEILE($1:$3000));ZEILE(A1))))) }.

Spalte A kannst du ausblenden.
Formelursprung für lückenloses Auflisten: http://www.excelformeln.de/formeln.html?welcher=43
____________________

Anzeige
AW: Danke
03.11.2008 15:06:00
Petra
Danke an David, Nonet, Erich, fcs und Beverly,
ich muß erst mal alle Lösungsansätze durcharbeiten (muß VBA sein). Sollte ich noch weitere Fagen haben, darf ich mich nochmals an Euch wenden?!
Liebe Grüße
Petra

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige