Ich habe versucht, Online-Tools zu verwenden, die im Internet verfügbar sind, aber sie sind nicht nützlich / sie extrahieren nur die erste verfügbare E-Mail-Adresse im Excel-Feld.
Gibt es eine Möglichkeit, mehrere E-Mail-Adressen aus einer Excel-Zelle zu extrahieren
Erforderliche Ausgabe - Extrahieren Sie E-Mails und speichern Sie sie in einem separaten Arbeitsblatt oder in der nebenstehenden Spalte
===========================
Eingabeformat 3
#
Für den folgenden HTML-Code in der Excel-Zelle kann ich nur das erste Vorkommen der E-Mail extrahieren, die ich bekomme, jedoch nicht alle mehrfach genannten E-Mail-Adressen.
Ja, dafür gibt es mehrere Möglichkeiten. `kutools` soll für mehrere E-Mail-Adressen funktionieren. Welche anderen Optionen haben Sie ausprobiert und was ist das Problem. Welche der verschiedenen Tags ("unix", "vba", "Google-Spreadsheets", "Excel") möchten Sie verwenden? Welche Art von Ausgabe möchten Sie?
Ron Rosenfeld vor 6 Jahren
0
@RonRosenfeld Erforderliche Ausgabe - Extrahieren Sie E-Mails und speichern Sie sie in einem separaten Arbeitsblatt oder in der nebenstehenden Spalte. Ich möchte die Excel-VBA verwenden, oder was auch immer einfacher ist
Matt vor 6 Jahren
0
1 Antwort auf die Frage
1
Ron Rosenfeld
Diese User Defined Function (UDF) gibt ein Array der vorhandenen E-Mail-Adressen in der referenzierten Zelle zurück.
Die einzelnen Adressen können dann auf verschiedene Weise abgerufen werden:
Verwenden Sie die INDEX-Funktion
Geben Sie die Funktion als Array über mehrere Zellen ein
Verwenden Sie es in einem Makro, um spezielle Aktionen auszuführen, die Sie möglicherweise benötigen.
Der Charakter einer E-Mail-Adresse wird durch das Regex-Muster bestimmt sPatund im Folgenden detailliert beschrieben.
Sie legen die UDF in einem regulären Modul ab
Option Explicit Function ExtrEmail(S As String) As String() Dim sTemp() As String Dim RE As Object, MC As Object, M As Object Const sPat As String = "\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]\b" 'Regex for emails Dim I As Long 'Initialize Regex engine Set RE = CreateObject("vbscript.regexp") With RE .Pattern = sPat .Global = True .ignorecase = True If .test(S) = True Then Set MC = .Execute(S) ReDim sTemp(1 To MC.Count) I = 0 For Each M In MC I = I + 1 sTemp(I) = M Next M End If End With ExtrEmail = sTemp End Function
Eine Möglichkeit zur Verwendung ist in der Abbildung unten dargestellt (Verwendung der INDEX-Funktion). Die Formel wird B1rechts unten eingetragen und gefüllt. Die IFERRORKlausel bewirkt, dass eine leere Zeichenfolge zurückgegeben wird, wenn weniger Übereinstimmungen als gefüllte Zellen vorhanden sind.
Bearbeiten: Bild geändert, um alle drei Beispiele anzuzeigen
Regex Pattern Erklärung
E-Mail-Addresse
\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]\b
Optionen: Groß- und Kleinschreibung nicht berücksichtigt; ^ $ passen nicht zu Zeilenumbrüchen
@Matt Wenn es für Sie funktioniert, können Sie meine Antwort bitte als akzeptiert markieren? Bitte lesen Sie [Was kann ich tun, wenn jemand meine Frage beantwortet?] (Https://superuser.com/help/someone-answers)
Ron Rosenfeld vor 6 Jahren
0
Ich habe Ihre Lösung für das Eingabeformat 3 ausprobiert. Leider funktioniert Ihre Lösung nicht. Es extrahiert nur das erste Vorkommen der E-Mail. Es werden nicht alle in der Zelle vorhandenen mehreren E-Mails extrahiert. Sie sind sich nicht sicher, ob das Problem auf die Eingabedaten zurückzuführen ist oder dass ich sie falsch ausführte - = IFERROR (INDEX (ExtrEmail ($ A1), COLUMNS ($ A: A)), "")
Matt vor 6 Jahren
0
@Matt Scheint hier mit den gerade hinzugefügten Input Format 3-Daten zu funktionieren. Ihre Formel erscheint in Ordnung, vorausgesetzt, Ihre Daten sind A1. Ich werde einen Screenshot meiner Ergebnisse mit all Ihren Informationen posten
Ron Rosenfeld vor 6 Jahren
0