Mengekstrak email dari string teks dalam excel / google spreadsheet

9

Saya mencari untuk mengekstrak alamat email dari string teks di Google Documents / Excel dan mengirim email secara otomatis, di mana konten sel saat ini tidak diketahui (hingga diperbarui oleh pengguna).

Misalnya, mereka mungkin membaca:

  1. Hai,

    Teman saya [email protected].

    Terima kasih,

    Contoh Joe

ATAU

  1. Anda harus bertanya

    [email protected]

Saat ini saya mendapat formula ini:

=IFERROR((LEFT(CELL,FIND("@",CELL)-1))&"@"&(regexextract(CELL,"@(.*)"))) 

Ini berfungsi untuk hampir semua kasus, kecuali

a) seperti pada contoh 1, di mana seseorang meletakkan, atau. di akhir email

b) seperti dalam contoh 2, di mana email dimulai pada baris baru, itu muncul sebagai misalnya.

meminta

[email protected]

Bagaimana saya bisa mengadaptasi formula untuk memperbaikinya?

Tom
sumber

Jawaban:

7

Untuk Google Spreadsheets

Google Spreadsheets memiliki formula regex keren yang sudah dibangun ini

Kami menggunakan yang pertama untuk mengekstrak alamat email. Masukkan formula ini ke dalam sel Google Spreadsheet:

=iferror(Regexextract(A1;"[A-z0-9._%+-]+@[A-z0-9.-]+\.[A-z]{2,4}");"")

masukkan deskripsi gambar di sini

Bagaimana cara kerja pola regex?

[A-z0-9 ._% + -] + @ [A-z0-9 .-] +. [Az] {2,4}

  • A-zmewakili karakter apa pun antara a Adan a z.
    Perhatikan huruf besar dan kecil. Dengan cara ini case-insensitive
  • 0-9 mewakili angka apa pun
  • ._%+- mewakili tanda-tanda itu sendiri
  • [ ] mewakili satu karakter yang diperbolehkan di dalam kurung
  • Menempatkan +tanda di belakang [ ]memungkinkan pola sebelumnya diulang tanpa batas
  • @tidak memiliki arti khusus. Secara harfiah mencari @tanda
  • [A-z0-9.-]+sama seperti di atas. Tetapi _%+tidak diperbolehkan di belakang @tanda kali ini
  • \.mencari satu titik. Itu harus diloloskan dengan pendahuluan \karena .biasanya adalah placeholder karakter apa pun
  • Pada [A-z]{2,4}pencarian terakhir untuk 2,3 atau 4 karakter case-sensitive

Sumber daya yang digunakan

nixda
sumber
Terima kasih atas jawaban Anda yang bermanfaat. Satu pemikiran yang saya miliki adalah itu {2, 4}bisa membatasi karena banyak TLD mendatang seperti .codesmelebihi 4 karakter.
Alex Booker
1

Ini untuk Excel.

Pertimbangkan Fungsi Buatan Pengguna (UDF) berikut:

Public Function GetEmailAddy(Sin As String) As String
    Dim s As String
    If InStr(1, Sin, "@") = 0 Then
        GetEmailAddy = ""
        Exit Function
    End If

    s = Replace(Sin, Chr(10), " ")
    s = Replace(s, Chr(13), " ")
    s = Application.WorksheetFunction.Trim(s)
    ary = Split(s, " ")

    For Each a In ary
        If InStr(1, a, "@") > 0 Then
            GetEmailAddy = a
            Exit Function
        End If
    Next a
End Function

User Defined Functions (UDFs) sangat mudah dipasang dan digunakan:

  1. ALT-F11 menampilkan jendela VBE
  2. ALT-I ALT-M membuka modul baru
  3. rekatkan barang-barang di dan tutup jendela VBE

Jika Anda menyimpan buku kerja, UDF akan disimpan bersamanya. Jika Anda menggunakan versi Excel di atas 2003, Anda harus menyimpan file sebagai .xlsm daripada .xlsx

Untuk menghapus UDF:

  1. buka jendela VBE seperti di atas
  2. hapus kode
  3. tutup jendela VBE

Untuk menggunakan UDF dari Excel:

=GetEmailAddy(A1)

Untuk mempelajari lebih lanjut tentang makro secara umum, lihat:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

dan

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

dan untuk spesifik tentang UDF, lihat:

http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

Makro harus diaktifkan agar ini berfungsi!

Berikut ini beberapa contohnya:

masukkan deskripsi gambar di sini

Pelajar Gary
sumber