Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1660to1664
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

VBA statt SVerweis

VBA statt SVerweis
15.12.2018 17:59:26
Hartmut
Hallo zusammen.
Ich habe folgende Situation.
Die nachstehende Tabelle wird im jetzigen Zusatnd mit SVerweis ausgeführt. D.h. das die drei Spalten in welcher das Datum eingetragen ist, bei jedem Start aktualisiert wird . Danei greift der SVerweis immer auf dieselbe Datei zurück.
Leider wird diese Datei immer größer und der SVerweis dauert mitunter recht lange.
https://www.herber.de/bbs/user/126132.xlsx
Jetzt meine Frage. Kann mir jemand von euch ein VBA basierten zugriff auf diese Datei (Mengenübertrag, Spalte AA; AB;AC)erstellen damit dieser SVerweis entfallen kann und die Abfrage evtl. über einen Button läuft so daß man diesen manuell starten kann.
Schon jetzt ein großes DANKE an euch. Und allen einen schöne dritten Advent.
Gruß
Hartmut

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

Betreff
Datum
Anwender
Anzeige
AW: VBA statt SVerweis
15.12.2018 21:13:49
onur
Klar, aber nicht mit dieser Beispieldatei, die enthält ja so gut wie gar nix.
Was ist denn z.B. mit "Mengenübertrag, Spalte AA; AB;AC"?
Die sollte genauso aufgebaut sein wie das Original und ausserdem sollte sie etwas mehr Datensätze enthalten.
AW: VBA statt SVerweis
15.12.2018 21:30:43
Hartmut
Hi Onur,
die Originaldatei ist ca 31MB groß. Daher nur ein Auschnitt aus dieser Datei. Die Werte werden aus der Datei Mengenübertrag, aus den Spalten AA;AB;AC ausgelesen wenn aus der Beispieldatei die PLT Stelle mit der PLT Stelle aus dem Mengenübertrag ( dieser steht in Spalte A) übereinstimmt. Ich habe die Sverweise herausgelöscht da das suchen immer sehr lange dauert.
Sorry wenn etwas/vieles unklar geblieben ist.
gruß
Hartmut
Anzeige
AW: VBA statt SVerweis
15.12.2018 21:33:40
onur
Klar, aber zum Testen und entwickeln muss die Beispieldatei genauso aufgebaut sein wie das Original.
Zum Nachbauen deiner Datei habe ich weder die Lust noch genug Informationen.
AW: VBA statt SVerweis
17.12.2018 08:31:24
Hartmut
Guten Morgen Onur, guten Morgen Tom,
ich habe die Dateien etwas verkleinert, die erste Datei 126165 ist das Ziel und die Datei 126166 ist die Quelle.Die Werte aus den drei gelb markierten Spalten sollen beim Start der Datei übertragen werden.
Ich hoffe einmal das die Informationen ausreichen für eure Hilfe.
https://www.herber.de/bbs/user/126165.xlsx
https://www.herber.de/bbs/user/126166.xlsx
Danke schon jetzt an euch beiden.
gruß
Hartmut
Anzeige
AW: VBA statt SVerweis
17.12.2018 10:16:03
Rob
Hi,
in der Zieldatei ist aber Spalte AA: Anzahl eingebaute Geräte und in der Quell-Datei steht als Überschrift in Spallte AA: Einbaudatum? Was denn nu? Anzahl oder Datum?
Zudem frage ich mich, welche Spalte Du abgleichen möchtest? PLT-Stelle, PLT-Aufgabe, etc.? Weil sich das eigentlich alles wiederholt...
Grüße,
Rob
AW: VBA statt SVerweis
17.12.2018 10:58:03
Hartmut
Guten morgen Rob,
ja du hast recht. Es sollte die Spalte AB sein. "Eingebaute Geräte". Es stimmt das die Bezeichnungen etwas verwirrend sind wenn man nicht aus diesem Metier kommt. Die Spalten welche verglichen werden sind beidesmal "PLT Stelle".
Und die drei Datumsangaben kommen aus der Spalte AA; AC; AD aus der Mengendatei.
Sorry, aber ich habe heute schon soviel mit diesen Listen gemacht das ich schon nicht mehr weiß welche Spalte was ist.
Gruß und nochmals Danke
Hartmut
Anzeige
AW: VBA statt SVerweis
18.12.2018 09:54:59
Rob
Hi Hartmut,
muss ich mir mal anschauen - habe aber gerade wenig Zeit. Schau mal übermorgen nochmals ins Forum.
Grüße,
Rob
AW: VBA statt SVerweis
18.12.2018 11:19:47
Hartmut
Hi Rob,
kein Problem...
Danke im voraus.
Gruß
Hartmut
AW: VBA statt SVerweis
18.12.2018 21:27:00
Rob
Hast Du schon mal Index/Vergleich ausprobiert? Das sollte um einiges schneller sein als der Sverweis (i.d.R. 5x schneller). Mit VBA wird es schon etwas kniffliger - man könnte ggf. mit Dictionaries und Arrays arbeiten, was blitzschnell ist aber das erfordert einiges an Hirnschmalz und Programmierung, wofür ich gerade ehrlich gesagt keine Zeit habe. Das ist eigentlich schon ein kleines Projekt...
Probier erstmal die Index/Vergleich-Methode. Ich muss dann mal sehen wie ich mit dem Makro hinkomme...
Grüße, Rob
Anzeige
AW: VBA statt SVerweis
18.12.2018 21:38:24
Rob
Ansonsten versuche es mal mit folgender Funktion (kann dann ganz normal als Funktion in der Excel-Arbeitsmappe verwendet werden, d.h. =vbalookup(etc...). PS: Habe ich bei "Stackoverflow" gefunden.

Public Function vbalookup(lookupRange As Range, refRange As Range, dataCol As Long) As Variant
'Extras/Verweise - "Microsoft Scripting Runtime" aktivieren!
Dim dict As New Scripting.Dictionary
Dim myRow As Range
Dim I As Long, J As Long
Dim vResults() As Variant
' 1. Build a dictionnary
For Each myRow In refRange.Columns(1).Cells
' Append A : B to dictionnary
dict.Add myRow.Value, myRow.Offset(0, dataCol - 1).Value
Next myRow
' 2. Use it over all lookup data
ReDim vResults(1 To lookupRange.Rows.Count, 1 To lookupRange.Columns.Count) As Variant
For I = 1 To lookupRange.Rows.Count
For J = 1 To lookupRange.Columns.Count
If dict.Exists(lookupRange.Cells(I, J).Value) Then
vResults(I, J) = dict(lookupRange.Cells(I, J).Value)
End If
Next J
Next I
vbalookup = vResults
End Function

Anzeige
AW: VBA statt SVerweis
19.12.2018 07:09:44
Hartmut
Moin Rob,
ich schau einmal was ich da hinbekomme. Danke erst einmal für deine Hilfe.
Gruß
Hartmut
AW: VBA statt SVerweis
15.12.2018 22:18:34
Crazy
Hallo
deine Angaben sind mehr als dürftig
für mein Verständnis habe ich es so getestet
zu starten aus der Datei die du hoch geladen hast
Sub test()
Dim c As Range
Dim i As Long
Dim lngLetzte As Long
Dim wbQuelle As Workbook
Dim wksZiel As Worksheet
Set wksZiel = ThisWorkbook.Worksheets("Tabelle1")
lngLetzte = Cells(Rows.Count, 2).End(xlUp).Row
Application.ScreenUpdating = False
Set wbQuelle = Workbooks.Open(Filename:="D:\Test\Mengen?bertrag.xlsx")  'Pfad und Dateiname  _
anpassen
With wbQuelle.Worksheets("Tabelle1")
For i = 5 To lngLetzte
Set c = .Columns(1).Find(wksZiel.Cells(i, 2).Value, LookIn:=xlValues, lookat:= _
xlWhole)
If Not c Is Nothing Then
wksZiel.Cells(i, "K").Value = .Cells(c.Row, "AA").Value
wksZiel.Cells(i, "L").Value = .Cells(c.Row, "AB").Value
wksZiel.Cells(i, "M").Value = .Cells(c.Row, "AC").Value
End If
Next
End With
Workbooks("Mengen?bertrag.xlsx").Close
Application.ScreenUpdating = True
End Sub
MfG Tom
btw: ob das nu wirklich schneller ist mag ich nicht beurteilen
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige