Extrahieren mehrerer E-Mail-Adressen aus einer Excel-Zelle / Excel-Datei

0

Gibt es eine Möglichkeit, mehrere E-Mail-Adressen aus einer Excel-Zelle / Excel-Datei zu extrahieren?

    |   A   |   B                                                                  
----|-------------
1   |HTML   |
    |Content|
    |   1   |
----|-------|-----
2   |HTML   |
    |Content|
    |   2   |
----|-------|-----
N Rows|     |

Mehr oder weniger ist der Inhalt in Spalten gleich

HTML-Inhalt in Spalte eins, Zeile eins


cid=9498&peid= **xyz9000@gmail.com** &mbrid=cf7cc75d395cbf901f73967b1267db42 style="text-decoration: none;  color: blue;">Update</a> contact/membership info.<font style="font-size:14px" face="Verdana" color="#000000">&nbsp;&nbsp;|&nbsp;&nbsp;<font style="font-size:12px" face="Verdana" color="#3c3c3c"><a href=https:///fe_web_member_subscription_verify.php?oeid= 
**navee@centra.com**&cid=9498 style="text-decoration: none;  color: blue;">Subscribe</a> to receive requirements & resumes
                                                                    </font>        
                                                            </p>
                                                       </td>
                                            </tr>

                              <tr>
                                                   <td colspan="2"  valign="middle">
                                                            <p style="margin-left:0px;margin-right:0px;margin-top:0px; margin-bottom:0px;"> 
                                                                    <font style="font-size:15px" color="#3C3C3C" face="Verdana" >
                                        <br><u>From</u>:<br>
                                               Navee ,<br>
                                               Centra<br>                                            
                                                                           qwerty@centra.com<br>
                                                                           <span style="background-color: #FFFF00"><b>Reply to:</b></span> &nbsp;&nbsp;navee@centra.com<br><br>

                                                                    </font>        
                                                            </p>
                                                  </td>
                                            </tr>  

                                                  <tr>
                                                    <td  colspan="2" valign="middle">
                                                            <br><p><strong>Big 

HTML-Inhalt in Spalte eins, Zeile zwei


cid=9498&peid= **xyz9000@gmail.com** &mbrid=cf7cc75d395cbf901f73967b1267db42 style="text-decoration: none;  color: blue;">Update</a> contact/membership info.<font style="font-size:14px" face="Verdana" color="#000000">&nbsp;&nbsp;|&nbsp;&nbsp;<font style="font-size:12px" face="Verdana" color="#3c3c3c"><a href=https:///fe_web_member_subscription_verify.php?oeid= 
**navee@centra.com**&cid=9498

Ich habe versucht, Online-Tools zu verwenden, die im Internet verfügbar sind, aber sie sind nutzlos. Sie extrahieren nur die erste verfügbare E-Mail-Adresse im Excel-Feld.

https://www.extendoffice.com/product/kutools-for-excel/excel-extract-email-address-from-string.html

Es gibt n Zeilen.

Gibt es eine Möglichkeit, mehrere E-Mail-Adressen aus einer Excel-Zelle zu extrahieren?

Erforderliche Ausgabe - E-Mails extrahieren und in einer separaten Tabelle oder in der angrenzenden Spalte speichern

========================


Eingabeformat 3

#

Für den folgenden HTML-Code in der Excel-Zelle kann ich nur das erste Vorkommen der E-Mail extrahieren, das ich erhalte, aber nicht alle genannten Mehrfach-E-Mail-Adressen.

            <p align="center"  style="margin-left:0px;margin-top:30px; margin-right:0px;margin-bottom:25px;">
                <table width="1024" cellspacing="0" cellpadding="0"  border="0" >
                        <tr>
                        <td colspan="2"  style="border-bottom: solid 1px #ff7373; " valign="bottom">
                            <p style="margin-left:0px;margin-right:0px;margin-top:0px; margin-bottom:0px;"> 
                                <font style="font-size:12px" color="#3C3C3C" face="Verdana" >
                                    <a href=https://house.com/powerhouse/fe_web_member_unsubscription.php?cid=4870&teid=volcan9@gmail.com&mbrid=cf7cc75d395cbf901f73967b1267db42 style="text-decoration: none; color: red;">Remove/unsubscribe</a><font style="font-size:14px" face="Verdana" color="#000000">&nbsp;&nbsp;|&nbsp;&nbsp;<font style="font-size:12px" face="Verdana" color="#3c3c3c"><a href=https://house.com/powerhouse/fe_web_member_update.php?cid=4870&peid=volcan9@gmail.com&mbrid=cf7cc75d395cbf901f73967b1267db42 style="text-decoration: none;  color: blue;">Update</a> contact/membership info.<font style="font-size:14px" face="Verdana" color="#000000">&nbsp;&nbsp;|&nbsp;&nbsp;<font style="font-size:12px" face="Verdana" color="#3c3c3c"><a href=https://house.com/powerhouse/fe_web_member_subscription_verify.php?oeid=mod.s@solutionsinc.com&cid=4870 style="text-decoration: none;  color: blue;">Subscribe</a> to receive requirements
                                </font> 
                            </p>
                            </td>
                    </tr>

                      <tr>
                        <td colspan="2"  valign="middle">
                            <p style="margin-left:0px;margin-right:0px;margin-top:0px; margin-bottom:0px;"> 
                                <font style="font-size:15px" color="#3C3C3C" face="Verdana" >
                                        <br><u>From</u>:<br>
                                       mod,<br>
                                       Solution<br>                                            
                                       mod.s@solutionsinc.com<br>
                                       <span style="background-color: #FFFF00"><b>Reply to:</b></span> &nbsp;&nbsp;mod.s@solutionsinc.com<br><br>

                                </font> 
                            </p>
                        </td>
                    </tr>  

                        <tr >
                            <td  width="800" valign="top"  style="border-top: solid 1px #333399; ">
                                <p align="justify" style="margin-left:0px;margin-right:0px;margin-top:0px; margin-bottom:0px;"> 
                                <font style="font-size:12px" color="#666666" face="Verdana">
                                     <a href="http://www.res.com/#!products/c5n6" style="text-decoration: none; color: red" title="Click to view more details">.</a>
                                </font>
                            </p>
                            </td>

                                <td    valign="top" style="border-top: solid 1px #333399; ">
                                    <p  align="right" style="margin-left:0px;margin-right:0px;margin-top:0px; margin-bottom:0px;">  
                                <font style="font-size:10px" color="#3C3C3C" face="Verdana">

                                </font>
                            </p>
                                </td>
                        </tr>
                </table><br>
            </p>
Matt
quelle
Ja, dazu gibt es verschiedene Möglichkeiten. kutoolssoll für mehrere E-Mail-Adressen funktionieren. Welche anderen Möglichkeiten haben Sie ausprobiert und worum geht es? Welche der verschiedenen Tags ( unix, vba, google-spreadsheets, excel) möchten Sie verwenden? Welche Art von Ausgabe möchten Sie?
Ron Rosenfeld
@RonRosenfeld Erforderliche Ausgabe - E-Mails extrahieren und in einer separaten Tabelle oder in der angrenzenden Spalte speichern. Ich möchte das Excel VBA verwenden oder welches ist einfacher
Matt

Antworten:

1

Diese benutzerdefinierte Funktion (User Defined Function, UDF) gibt ein Array der vorhandenen E-Mail-Adressen in der Zelle zurück, auf die verwiesen wird.

Die einzelnen Adressen können dann auf verschiedene Arten 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 nachfolgend detailliert beschrieben.

Sie setzen die UDF in ein reguläres Modul

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]{2,}\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 im folgenden Screenshot dargestellt (Verwendung der INDEX-Funktion). Die Formel wird B1rechts und unten eingegeben und ausgefüllt. Die IFERRORKlausel bewirkt, dass eine Nullzeichenfolge zurückgegeben wird, wenn weniger Übereinstimmungen als Zellen gefüllt sind.

Bearbeiten: Das Bild wurde geändert, um alle drei Beispiele anzuzeigen

Bildbeschreibung hier eingeben

Regex-Muster Erklärung

E-Mail-Addresse

\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b

Optionen: Groß- und Kleinschreibung wird nicht berücksichtigt; ^ $ stimmen nicht mit Zeilenumbrüchen überein

Erstellt mit RegexBuddy

Ron Rosenfeld
quelle
@Matt Wenn es für Sie funktioniert, können Sie meine Antwort bitte als akzeptiert markieren? Bitte lesen Sie Was soll ich tun, wenn jemand meine Frage beantwortet?
Ron Rosenfeld
Ich habe Ihre Lösung für das Eingabeformat 3 ausprobiert. Leider funktioniert Ihre Lösung nicht. Es wird nur das erste Auftreten der E-Mail extrahiert. Es werden nicht alle in der Zelle vorhandenen E-Mails extrahiert. Ich bin mir nicht sicher, ob das Problem auf die eingegebenen Daten zurückzuführen ist oder ob ich sie falsch ausführe - = IFERROR (INDEX (ExtrEmail ($ A1), SPALTEN ($ A: A)), "")
Matt
@Matt Scheint hier mit Ihren gerade hinzugefügten Input Format 3-Daten in Ordnung zu sein. Und Ihre Formel erscheint in Ordnung, vorausgesetzt, Ihre Daten sind A1. Ich werde einen Screenshot meiner Ergebnisse mit all deinen Informationen veröffentlichen
Ron Rosenfeld