Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

VERGLEICH in VBA bei Daten auslesen

Forumthread: VERGLEICH in VBA bei Daten auslesen

VERGLEICH in VBA bei Daten auslesen
17.05.2025 19:54:09
Fritz Steberl
Hallo zusammen,

ich möchte gerne die VERGLEICH-Formel in VBA einbringen.

Ich habe eine Tabelle und frage darin Daten per VBA ab, sagen wir mal den Namen in C2.

Bisher habe ich das über einen einfach direkten Aufruf gemacht:
Userbild

Falls ich aber jetzt noch eine Spalte ergänze, z.B. die "Anrede" als Spalte B, dann rutscht alles um 1 Spalte nach rechts und der Name ist daraufhin in D2.
Bei dieser Vorgehensweise muss ich immer, falls Spalten ergänzt werden, alle VBA-Aufrufe anpassen.

In Excel ist das per Formel mit INDEX/VERGLEICH ja kein Problem.
=INDEX(A:F;2;VERGLEICH("Name";1:1;0))

Gibt es so eine Lösung auch in VBA?

Ich dachte da an Application.Match, aber ich hab's nicht ganz hingekriegt...

Vielen Dank schonmal im Voraus! :-)

Beste Grüße,
Fritz





Anzeige

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VERGLEICH in VBA bei Daten auslesen
17.05.2025 21:51:18
RPP63
Moin!
Um mal konkret auf Deine Frage einzugehen:
»In Excel ist das per Formel mit INDEX/VERGLEICH ja kein Problem.
=INDEX(A:F;2;VERGLEICH("Name";1:1;0))
Gibt es so eine Lösung auch in VBA?«

Du willst ja wissen, was unter "Name" steht.
x = Cells(2, Application.Match("Name", Rows(1), 0))

Oder auch
x = Rows(1).Find("Name", xlWhole).Offset(1, 0)

Gruß Ralf
Anzeige
Eventuell könntest du...
18.05.2025 03:58:38
Case
Moin Fritz, :-)

... dir auch vorstellen mit "Strukturierten Tabellen / ListObjects" zu arbeiten (zum erstellen dieser Tabelle in eine Zelle der Daten klicken und dann STRG+T)? ;-)
https://www.herber.de/bbs/user/177492.xlsb

Hier sind einige Infos dazu: ;-)
https://www.thespreadsheetguru.com/listobject-tables-vba/
https://support.microsoft.com/de-de/office/verwenden-von-strukturierten-verweisen-f%C3%BCr-excel-tabellen-f5ed2452-2337-4f71-bed3-c8ae6d2b276e

Servus
Case
Anzeige
AW: VERGLEICH in VBA bei Daten auslesen
18.05.2025 22:09:03
Piet
Nachtrag --> ich las den Vorschlag mit Namensmanager, das klappt hervorragend bei 1 Sheet!
Bei 13 Sheets müsste man aber im Makro 13 verschiedene Namen programmieren, macht keinen Sinn.,

mfg Piet
AW: VERGLEICH in VBA bei Daten auslesen
19.05.2025 11:25:42
Alwin Weisangler
@Piet,

ob man Zelladressen oder den Range via Namensmanager verwendet ist doch eigentlich egal.

Natürlich kann man via .Find das Tabellenblatt nach etwas Fixen durchsuchen und dann die Zelladresse weiter verarbeiten.
Aber wenn da nichts Fix ist und sich Spalten/Zeilen verschieben, scheint dieser Weg der Praktikabelste zu sein.
Wie man den Range ausliest sollte doch kein Problem sein.
https://www.herber.de/bbs/user/177498.xlsm

Gruß Uwe
Anzeige
AW: VERGLEICH in VBA bei Daten auslesen
19.05.2025 15:49:25
Piet
Hallo

ich korrigiere meinen eigenen Code noch mal, da steckt ein Fehler drin!
Die beiden unteren Varianten habe ich geprüft, so funktioniert es jedenfalls.
Man beachte aber bitte die Unterschiede ob man mit Set x oder x als Column arbeitet!

Hinweis: - x = Rows(1).Find("Name", Lookat:=xlWhole).Offset(1) - klappt bei mir nicht!

mfg Piet

Sub Range_mit_Set()

Dim x As Range 'x=gefundene Zelle in Row1 als Range
Set x = Rows(1).Find("Name", Lookat:=xlWhole)
If x Is Nothing Then Exit Sub 'Nicht gefunden
MsgBox x.Offset(1, 0) 'Zeile 2 mit Offset auslesen
End Sub

Sub Column_mit_Cells()
Dim x As Long 'Spalten Index ermitteln
x = Rows(1).Find("Name", Lookat:=xlWhole).Column
If x > 0 Then MsgBox Cells(2, x) 'Zeile 2 über Celle/Column auslesen
End Sub
Anzeige
AW: VERGLEICH in VBA bei Daten auslesen
19.05.2025 15:19:36
Piet
Hallo

@Uwe Namensmanager verwenden hat schon seine Vorteile, da stimme ich dir zu!
In deinem Beispiel sehe ich für 5 Sheets - 5 verschiedene Namen, wegen der Endung 1-5.
Da finde ich die Find Methode einfacher, weil der Suchbegriff immer in Zeile 1 steht.

mfg Piet
AW: VERGLEICH in VBA bei Daten auslesen
18.05.2025 00:21:54
Fritz Steberl
Das klingt gut.
Werde ich gleich mal ausprobieren! :-)

Vielen Dank schonmal!
Anzeige
AW: VERGLEICH in VBA bei Daten auslesen
18.05.2025 00:27:09
Fritz Steberl
Hi Uwe,

also
x = Cells(2, Application.Match("Name", Rows(1), 0))

funktioniert wunderbärig! :-)

Bei
x = Rows(1).Find("Name", xlWhole).Offset(1, 0)

kommt ein Laufzeitfehler '13': Typen unverträglich.

Aber Lösung 1 ist schon mal top!

Vielen Dank!
Anzeige
AW: VERGLEICH in VBA bei Daten auslesen
18.05.2025 21:57:51
Piet
Hallo

x = Rows(1).Find("Name", xlWhole).Column - gibt die Spalte für "Name" zurück!
Ich empfehle aber die untere Variante mit Set, falls der Begriff "Name" NICHT gefunden wird!

mfg Piet



Dim rFind As Range, x As Long
Set rFind = Rows(1).Find("Name", xlWhole)
If Not rFind Is Nothing Then x = rFind.Column
Anzeige
Der Laufzeitfehler 13
19.05.2025 08:30:33
RPP63
Ich hatte den Code ohne Prüfung geschrieben.
Ich hatte die Reihenfolge der Argumente der Find-Methode durcheinandergewürfelt, sorry dafür!
Richtig ist entweder:
Dim x

x = Rows(1).Find("Name", , , xlWhole).Offset(1)

oder
Dim x

x = Rows(1).Find("Name", LookAt:=xlWhole).Offset(1)

Gruß Ralf
Anzeige
AW: Find-Methode
19.05.2025 12:33:37
GerdL
Sub Unit()


Dim x As Range

Set x = Rows(1).Find("Name", LookIn:=xlValues, lookat:=xlWhole, MatchCase:=True)
If Not x Is Nothing Then
MsgBox x.Offset(1, 0).Value
End If

End Sub


Gruß Gerd
Anzeige
AW: VERGLEICH in VBA bei Daten auslesen
17.05.2025 21:09:41
BoskoBiati
Hi,

wenn Du unbedingt Spalten einfügen willst, was per se schlecht ist, dann suche den Namen der Spalte in der ersten Zeile mit Vergleich. Als Ansatz:
Sub Name_abfragen()


Dim loA As Long
Dim strA As String
strA = InputBox("in welcher Spalte suchen Sie?", "Suchbegriff eingeben")
loA = Application.Match(strA, Rows(1), 0)
StrB = InputBox("Welchen Begriff suchen Sie?", "Bezeichnung eingeben")

End Sub


Gruß

Edgar
Anzeige
AW: VERGLEICH in VBA bei Daten auslesen
18.05.2025 00:20:28
Fritz Steberl
Hallo Edgar,

vielen Dank für Deine Hilfe und Deinen Lösungsansatz.

Bei meiner eigentlichen Tabelle handelt es sich um eine etwas größere Datenbank mit mehreren tausend Einträgen, 13 verschiedene Sheets und jedes Blatt hat viele, viele Spalten (teils über 70).

Da kann es schon mal vorkommen, dass man eine Spalte einfügen muss oder sich in der Tabelle etwas verschiebt.
Wenn dann die Skripte nicht mehr funktionieren, ist es natürlich ungünstig. :-)

Daher meine Frage, denn mit Formeln über INDEX & Vergleich wäre das ja kein Problem.

Aber nochmals Danke für Deine Hilfe!


Anzeige
AW: VERGLEICH in VBA bei Daten auslesen
17.05.2025 21:16:35
Alwin Weisangler
Hallo Fritz,

für so was gibt es den Namensmanager. Klicke in die Zelle C2 Links unterm Ribbon Band änderst du den Zellnamen beispielhaft in rng_Suchwert.
Die Abfrage dieses Suchwertes dann so:


Sub Name_abfragen()
Dim Name As String
Name = Tabelle1.Range("rng_Suchwert")
MsgBox Name
End Sub

Dann kannst du auch eine/mehrere Spalt(n) einfügen und auf die Zelle auch wenn diese nach rechts verschoben ist greift man dann trotzdem zu.
Mit Application.Match kannst du in einer Spalte oder Zeile den Wert aus rng_Suchwert verwenden um nach einem Treffer zu suchen. Das ist aber ein anderes Thema.

Gruß Uwe
Anzeige
AW: VERGLEICH in VBA bei Daten auslesen
18.05.2025 00:22:51
Fritz Steberl
Hallo Uwe,

das klingt sehr gut.
Interessanter Lösungsansatz.
Werde ich mal ausprobieren!
Vielen, vielen Dank!

Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18