Supportnet Computer Supportnet Games Supportnet Kochen Explipedia
Login: guestBesucher online: 239
Supportnet Computerforum
SUPPORT
Home
Forum
Tipps & Infos
Blitz Angebote
Members
Hilfe
Video

TOP THEMEN
SSD Test
Alles über SSDs

Android Tipps
iPad Tipps
Google Tipps
Windows 8 FAQ
Windows 7 FAQ
E-Mail FAQ
Netzwerk FAQ
Festplatten FAQ
Datenrettung FAQ
Bildbearbeitung FAQ

Top iPhone Apps
Computer Einsteiger
Die 5 besten...
Explipedia
Themen
Direktlinks

Neue Einträge
News einsenden News einschicken
Tipps einsenden Tipp einschicken

SN-LINKS

Suche
Befreundete Seiten
Top Seiten

Supportnet/Forum/Tabellenkalkulation



Supportnet/Forum/Tabellenkalkulation
von happy1998 vom 12.02.2018, 15:22 Diese Seite den Supportnet Favoriten hinzufügen  Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden


Übereinstimmungen in Rohdaten suchen (diverse Zeichenlängen)

 (239 Hits)

Hallo Zusammen,

wie lässt sich denn aus einer Buchstaben/Ziffernfolge eine Übereinstimmung finden?

Beispiel:
in den Rohdaten steht z.B.
123456789101112
1234567891011
12345678910
123456789
12345678
1234567
123456
12345
1234

In meiner Suchtabelle befinden sich zusammengesetzte Werte, wo ich nicht genau weiß wie zerlegen...

wert 1234jksdrd soll finden 1234
wert 1234500112244 soll finden 12345 usw.

derzeit habe ich das mit einer Vielzahl von SVerweisen gelöst
in A3 stehen die Anzahl der Zeichen
so kann ich suchen nach den ersten 16 Zeichen von links, dann den ersten 15 Zeichen von linkst usw.

=WENN(ISTFEHLER(SVERWEIS(LINKS($A3;C$2);Rohdaten!$A$2:$N$3321;8;FALSCH));"";SVERWEIS(LINKS($A3;C$2);Rohdaten!$A$2:$N$3321;8;FALSCH))

Frage:
Lässt sich das mit einem VBA Befehlt bewerkstelligen?


Antwort schreiben 50 Bonuspunkte

Antworten...
Antwort 1 von xlKing vom 12.02.2018, 20:32 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Hallo Happy,

für eine VBA-freie Lösung würde ich das ähnlich aufbauen, wie du. Hier bleibt einem leider nichts anderes übrig, als wirklich jeden Teil um jeweils
ein Zeichen weniger erneut zu suchen, da du leider eine lange Zeichenkette mit eher uninteressantem Rattenschwanz innerhalb einer kurzen
suchst. Umgekehrt wäre es einfacher.

Mit einer Benutzerdefinierten Funktion ließe sich das allerdings bewerkstelligen. Wenn du in ein allgemeines Modul (z.B. Modul1) den folgenden
Code eingibst...

Function TEILSVERWEIS(Bedingung, SuchBereich, Spalte, Optional Genauigkeit)
  Dim Teil As String, i As Long
  For i = Len(Bedingung) To 1 Step -1
    Teil = Left(Bedingung, i)
    Res = Application.VLookup(Teil, SuchBereich, Spalte, Genauigkeit)
    If Not IsError(Res) Then
      TEILSVERWEIS = Res
      Exit Function
    End If
  Next i
  TEILSVERWEIS = Res
End Function


...solltest du mit einer Formel wie =wennfehler(Teilsverweis(A3;Rohdaten!$A$2:$H$10;8;0);"") dein Ziel erreichen. Vorraussetzung ist
allerdings, dass die Vergleichswerte in den Rohdaten tatsächlich reine Texte sind. Falls du diese Daten erst als Zahl eingibst und dann lediglich
die Zelle als Text formatierst, wird der Wert von Sverweis erst gefunden, nachdem du nochmals in die Formelzeile gehst und nochmals Enter
drückst. Da du aber bereits ein paar SVERWEIS-Formeln hast gehe ich davon aus, dass das nicht nötig ist.

Gruß Mr. K.


Antwort noch nicht bewertet
Diese Antwort hat das Problem gelöst!
Antwort 2 von MixMax vom 12.02.2018, 20:40 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Möchte dir an dieser Stelle empfehlen das in Access zu machen.

Die Antwort mit der Funktion hatte ich ähnlich geschrieben aber der Kollege war schneller... Ist in jeden Fall für kleinere Datenmengen mit wenigen tausend einträgen sinnvoll.

In Access würde man dafür eine Abfrage schreiben - die könnte dann so aussehen:

Anstelle von 2 Blättern gibt es dann 2 Tabellen, die eine nenne ich nun also wie du sie genannt hast Rohdaten. Anstelle von Spalte A gibts hier eine Spalte mit dem namen rohwert.
Das andere Blatt nennen wir mal Suchtabelle, hier ist der vergleichswert nicht Spalte A oder so sondern textwert genannt.

Für eine kürzere Schreibreise und weil eine Tabelle 2x benutzt wird (Leider kennt Access nicht so gute befehle wie andere Datenbanken) ist nun die Rohdatentabelle einmal als R und einmal als RT bekannt, und die andere als D.

SELECT * FROM (
SELECT D.textwert, MAX(Len(R.rohwert)) AS maxroh
FROM Suchtabelle AS D INNER JOIN Rohdaten AS R ON D.textwert LIKE R.rohwert + '*'
GROUP BY D.textwert
) DT
INNER JOIN Rohdaten AS RT ON DT.textwert LIKE RT.rohwert + '*' AND Len(RT.rohwert)=DT.minroh

Das Ergebniss enthält nun ausgewählte Spalten der Suchtabelle, zusätzlich eine Spalte in der die Länge der Übereinstimmung steht (dies ist nötig um nur ein Ergebnis zu erhalten wenn 1234 und 12345 usw übereinstimmen) und den übereinstimmenden Teil:

textwert	maxroh	rohwert
1234jksdrd soll	4	1234
1234500112244	5	12345


Antwort noch nicht bewertet Als gute Antwort bewerten
Antwort 3 von M.O. vom 13.02.2018, 09:10 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Hallo,

dann komme ich mit dem 3. Vorschlag :-).

Du kannst das auch per Schleife lösen.

Sub beispiel()

Dim strSuchbegriff As String
Dim lngZeile As Long
Dim i As Long

strSuchbegriff = "1234jksdrd"

For i = Len(strSuchbegriff) To 1 Step -1
 'Suchbegriffe stehen in aktueller Tabelle in Spalte A ab Zeile 2
 For lngZeile = 2 To ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
  If Left(strSuchbegriff, i) = CStr(Cells(lngZeile, 1).Value) Then
    MsgBox "Gefunden in Zeile " & lngZeile & ": " & Cells(lngZeile, 1).Value
    Exit Sub
  End If
 Next lngZeile
Next i

End Sub

Falls mehrere Ergebnisse möglich sind, kann man diese z.B. in ein Array schreiben und dann auf einem Tabellenblatt ausgeben.

Gruß

M.O.


Antwort noch nicht bewertet Als gute Antwort bewerten
Antwort 4 von happy1998 vom 13.02.2018, 14:00 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Hallo,

die Lösung von xlKing mittels Function TEILSVERWEIS finde ich gut.

Echt super ! Hätte ich mal früher gefragt.

Danke Euch und besonders xlKing !! :)


Antwort noch nicht bewertet Als gute Antwort bewerten




Antwort schreiben
    Bitte einen 'Nickname' wählen.
Nickname:*
    (eMail-Adresse wird nicht veröffentlicht.)
eMail:
Nachricht: Ich möchte bei Antworten benachrichtigt werden.
    Hilfe zur Beitragsformatierung gibts [hier]
                   
Antwort:*
  Die Nutzungsbedingungen habe ich gelesen und akzeptiert.

MACHEN SIE IHRE WEBSITE ATTRAKTIVER
Sie haben eine eigene Website und wollen Ihre Besucher auf den Supportnet-Service aufmerksam machen? Kopieren Sie einfach den Quellcode in Ihre Seite und jeder Besucher Ihrer Seite kann direkt auf die Supportnet-Datenbank zugreifen.

My Supportnet


SUCHE

Gruppen im Forum
Betriebsysteme
Software
Hardware
Netzwerk
Programmierung
Sonstiges

Impressum © 1997-2018 Supportnet
Version: supportware 1.8.230E / 18.10.2010, Startzeit:Sat Feb 10 20:00:08 2018