Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

application.match application.vlookup Fehler 2042

Forumthread: application.match application.vlookup Fehler 2042

application.match application.vlookup Fehler 2042
05.02.2016 12:38:12
Timm
Hallo zusammen,
Ich versuche aus einem Array ein bestimmtes Wort zu suchen, um danach einen Wert aus der selben Zeile zu übernehmen.
Mein Array (vnt_Ausgabe) hat die Dimension (4000,3).
In der ersten Spalte steht ein Begriff, also ein String. in der 2. und 3. Spalte können Strings oder Zahlen stehen.
Ich habe es mit Application.Vlookup versucht. Gebe ich als letztes Argument True ein, funktioniert der Code an sich, jedoch findet er nicht das gesuchte Wort. Ich habe es mit dem Suchwort "Datei" (Im Array Zeile 2) versucht, jedoch findet er dann so was wie "3S_HIST_Zeit_z3" (Im Array Zeile 1475). "Datei" kommt auf jedenfall in dem Array in der ersten Spalte vor! Setze ich das letzte Argument auf "FALSE" (0) um den exakten String zu finden, gibt er mir bei erg den Fehler 2042 aus. Ich bin völlig ratlos. Ich habe schon 2 Stunden gegoogelt, meine Variablen als Variant deklariert, nichts hat geholfen.
Ich habe auch versucht, aus dem Array die erste Spalte zu übernehmen und darin mit Application.Match zu suchen. Da ist der selbe Fehler. Sobald ich False eingebe, gibt er mir bei erg1 den Fehler 2042 zurück.
Dim erg As Variant
Dim erg1 As Variant
Dim arrtmp As Variant
Dim gesucht As variant
gesucht = "Datei"
arrtmp = WorksheetFunction.Index(vnt_Ausgabe, 0, 1) 'übernimmt Spalte1
'hiermit sehe ich, wie die Arrays aussehen, die gesuchten Wörter sind definitiv dabei
'ActiveSheet.Range(Cells(1, e + 2), Cells(2000, e + 2)) = arrtmp
'ActiveSheet.Range(Cells(1, e + 4), Cells(2000, e + 7)) = vnt_Ausgabe
'würde mir die Zeile ausgeben:
erg1 = Application.Match(gesucht, arrtmp, 0)
'würde mir den Zelleninhalt ausgeben:
erg = Application.VLookup(gesucht, vnt_Ausgabe, 1, 0)
Kann mir jemand helfen?

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: application.match application.vlookup Fehler 2042
05.02.2016 12:55:47
Daniel
Hi
kannst du mal die Datei hochladen?
Gruß Daniel

AW: application.match application.vlookup Fehler 2042
05.02.2016 13:49:42
Timm
Hallo,
es handelt sich um vertrauliche Daten, ich hab das Ganze etwas verändert, die Zusammensetzung der Daten (Zahlen,Buchstaben) jedoch so gelassen (erg würde noch weiter verwendet werden). Mit "True" findet er wieder einen falschen Eintrag, mit "False" wieder gar keinen. vnt_Ausgabe wird aus einer Text-Datei generiert, die habe ich hier gekürzt. Das hochladen wird verhindert, hier ist der angepasste Code:
Sub test()
Dim Arr
Dim datei
Dim FSO
Dim L As Long
Dim Tmp As Variant
Dim vnt_Ausgabe As Variant
Dim i As Integer
Dim Str_String, document, pfad As String
Dim e As Integer
Dim c As Range
'Textdatei auslesen
Set FSO = CreateObject("Scripting.FilesystemObject")
pfad = ""   'Anpassen
document = Dir(pfad & "*.txt")
Do While document  ""
Set datei = FSO.OpentextFile(pfad & document)
Str_String = datei.readall
datei.Close
'Nach Datensätzen splitten:
Arr = Split(Str_String, vbCrLf)
ReDim vnt_Ausgabe(UBound(Arr), 10) '10 Spalten reichen ?
For L = 0 To UBound(Arr)
'Jeden Datensatz nach Werten splitten:
Tmp = Split(Arr(L), vbTab)
For i = 0 To UBound(Tmp)
'Jeden Wert in das Array vnt_Ausgabe umschaufeln:
vnt_Ausgabe(L, i) = Tmp(i)
Next
Next
'Ausgeben. Anpassen.
'erste freie Spalte in Zeile 2:
e = Application.ActiveWorkbook.ActiveSheet.Cells(2, Columns.Count).End(xlToLeft).Column + 1
'suchen ob die datei schon in der tabelle vorhanden ist
Set c = ActiveSheet.Range("2:2").Find(document, LookIn:=xlValues, LookAt:=xlWhole)
If Not c Is Nothing Then
GoTo Next_doc_2
End If
'### Gesuchte Variablen in Array suchen
Dim erg As Variant
Dim erg1 As Variant
Dim arrtmp As Variant
Dim gesucht As Variant
gesucht = "Datei"
arrtmp = WorksheetFunction.Index(vnt_Ausgabe, 0, 1) 'Spalte1
'hiermit sehe ich, wie die Arrays aussehen, die gesuchten wörter sind definitiv dabei:
'ActiveSheet.Range(Cells(1, e + 2), Cells(2000, e + 2)) = arrtmp
'ActiveSheet.Range(Cells(1, e + 2), Cells(2000, e + 6)) = vnt_Ausgabe
erg1 = Application.Match(gesucht, arrtmp, 1)           'Zeile
erg = Application.VLookup(gesucht, vnt_Ausgabe, 1, 1)     'Zelleninhalt
Next_doc_2:
document = Dir$()
Loop
End Sub

so sieht die txt Datei aus: (leider gehen die Leerzeichen/Tabs verloren)
Ver 1.2.6.107
Datei 2016.20160201-0720
LIAR-Datei 8j3505lumr.dia
Datum 01.02.2016
Zeit 07:20
Programmstand 8j3616
Prog_MZG 8j35616
Ort Paris
Bearbeiter Max,Mustermann
Benutzer maxmus
Kommentar Paris
Auftrag Nr
Beschreibungsdatei 8j35050
DTC_CLEAR 1
:
DiagmeRA-Grundwerte:
INFO5 8j36160iv73220v 2056
MT_NR_DATA 2901037700
DATA_BGS 0F2E12
Diagtest 06BB1C
SGtddNr 0000000000
A_fbs_serie 0.00
N_kl17 13.00
Odo_Rel_Lang 102008.00
Odo_Rel 3208.00
kmubmclr_w 318.00
BLTPT_Odo_Rel_Frz 102008.100
Lu_w 144.5703
bk_w 0.0000
tjsn 30.00
nk 10.152
bnzez_w 0.000
knte_w 0.000
qsa 11.75
ctjenxtted 12.50
Kannst du damit was anfangen?
LG

Anzeige
AW: application.match application.vlookup Fehler 2042
05.02.2016 14:26:02
Daniel
Hi
der Code müsste eigentlich funktionieren.
der Suchbegriff muss aber in der Spalte vorhanden sein, in genau dieser Schreibweise.
die Variante mit letztem Parameter = 1 darfst du nur verwenden, wenn die Liste aufsteigend sortiert ist, das die Grundvoraussetztung für diese Variante.
du musst also schauen, ob datsächlich nur "Datei" dort steht und nicht irgendwasanderes (auch nicht "Datei ")
vielleicht ist es einfacher, wenn du das Array selber mit einer Schleife durchsuchst.
dann musst du zwar die Suchschleife programmieren, aber das kannst du dann direkt mit dem 2-D-Array machen.
Da du direkt mit dem Array arbeitest, ist das auch nicht viel langsamer als die Application.Match-Funktion (diese sucht nach dem gleichen Prinzip)
das Verwenden von Application.Match ist beim Arbeiten mit Arrays nur dann sinnvoll, wenn die Listen sortiert sind und du mit dem 3. Parameter = 1 arbeitest, weil dann aufgrund der Sortierung ein wesentlich schnellerer Suchalgorythmus verwendet wird als bei der unsortierten Suche und dieser etwas auswendiger zu programmieren ist als eine einfache Schleife mit einer Abfrage.
Gruß Daniel

Anzeige
AW: application.match application.vlookup Fehler 2042
05.02.2016 14:34:56
Timm
Hallo,
ich habs grad mal mit "Datei*" ausprobiert. Es hat funktioniert. DANKE!!
Manchmal ist VBA zum verfluchen.
LG
;
Anzeige
Anzeige

Infobox / Tutorial

Anwendung von Application.Match und Application.VLookup: Fehler 2042 beheben


Schritt-für-Schritt-Anleitung

  1. Überprüfe die Daten: Stelle sicher, dass der Suchbegriff, den Du verwendest, genau in der ersten Spalte des Arrays vorhanden ist. Achte auf Leerzeichen oder unterschiedliche Schreibweisen, da dies oft zu einem Excel Fehler 2042 führt.

  2. Code anpassen: Wenn Du Application.Match verwendest, stelle sicher, dass Du den dritten Parameter auf 0 (exakte Übereinstimmung) setzt, um Fehler zu vermeiden. Wenn Du 1 verwendest, muss das Array aufsteigend sortiert sein.

    Beispiel:

    erg1 = Application.Match(gesucht, arrtmp, 0) 'exakte Übereinstimmung
  3. Fehlerbehandlung einbauen: Um den Fehler 2042 abzufangen, kannst Du eine Fehlerbehandlungsroutine in Deinen Code einfügen:

    On Error Resume Next
    erg1 = Application.Match(gesucht, arrtmp, 0)
    If IsError(erg1) Then
       Debug.Print "Fehler 2042 aufgetreten."
    End If
  4. Suchmuster verwenden: Wenn Du mit Wildcards arbeitest, kannst Du den Suchbegriff anpassen. Zum Beispiel gesucht = "Datei*" funktioniert besser, wenn Du ähnliche Begriffe finden möchtest.


Häufige Fehler und Lösungen

  • Fehler 2042: Dieser Fehler tritt auf, wenn Application.Match oder Application.VLookup den gesuchten Wert nicht finden kann. Überprüfe die Variablen auf Schreibfehler oder zusätzliche Leerzeichen.

  • Falsches Suchverhalten mit VLookup: Wenn die Funktion nicht das erwartete Ergebnis liefert, stelle sicher, dass Du das letzte Argument korrekt gesetzt hast. Bei False wird eine exakte Übereinstimmung gesucht.

  • Suchbegriff nicht vorhanden: Vergewissere Dich, dass der Suchbegriff tatsächlich im Array vorhanden ist. Benutze Debugging, um den Inhalt des Arrays zu prüfen.


Alternative Methoden

Wenn Du weiterhin Probleme mit Application.Match oder Application.VLookup hast, kannst Du auch eine Schleife verwenden, um das Array manuell zu durchsuchen:

Dim i As Long
Dim gefunden As Boolean
gefunden = False

For i = LBound(vnt_Ausgabe, 1) To UBound(vnt_Ausgabe, 1)
    If vnt_Ausgabe(i, 1) = gesucht Then
        gefunden = True
        Exit For
    End If
Next i

If gefunden Then
    Debug.Print "Wert gefunden in Zeile: " & i
Else
    Debug.Print "Wert nicht gefunden."
End If

Praktische Beispiele

Hier ist ein Beispiel, wie Du Application.Match und Application.VLookup in einem einfachen VBA-Skript verwenden kannst:

Sub Beispiel()
    Dim vnt_Ausgabe As Variant
    Dim gesucht As Variant
    Dim erg As Variant
    Dim erg1 As Variant

    ' Beispiel-Array
    vnt_Ausgabe = Range("A1:C4000").Value
    gesucht = "Datei"

    erg1 = Application.Match(gesucht, WorksheetFunction.Index(vnt_Ausgabe, 0, 1), 0)
    If Not IsError(erg1) Then
        erg = Application.VLookup(gesucht, vnt_Ausgabe, 2, False)
        Debug.Print "Wert gefunden: " & erg
    Else
        Debug.Print "Fehler 2042 aufgetreten."
    End If
End Sub

Tipps für Profis

  • Debugging nutzen: Verwende Debug.Print, um den Inhalt Deiner Variablen während der Laufzeit zu überwachen und Fehler schneller zu identifizieren.

  • Array-Dimensionen prüfen: Stelle sicher, dass Dein Array die erwarteten Dimensionen hat, bevor Du darauf zugreifst.

  • Wildcard-Suchen: Nutze Wildcards in Deinen Suchanfragen, um mehr Flexibilität zu haben, z.B. gesucht = "Datei*".


FAQ: Häufige Fragen

1. Was bedeutet der Fehler 2042?
Der Fehler 2042 tritt auf, wenn eine Suchfunktion wie Application.Match oder Application.VLookup keinen Wert finden kann.

2. Wie kann ich Fehler 2042 vermeiden?
Vergewissere dich, dass der gesuchte Wert genau im Array vorhanden ist, und verwende exakte Übereinstimmungen, wenn nötig.

3. Kann ich mit Wildcards arbeiten?
Ja, Du kannst Wildcards verwenden, um ähnliche Begriffe zu finden, beispielsweise gesucht = "Datei*".

4. Was ist der Unterschied zwischen VLookup und Match?
VLookup gibt den Wert einer bestimmten Spalte zurück, während Match nur die Position des gesuchten Wertes im Array liefert.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige