แยกอีเมลจากสตริงข้อความใน excel / google spreadsheet


9

ฉันต้องการแยกที่อยู่อีเมลจากสตริงข้อความใน Google Docs / Excel และส่งอีเมลโดยอัตโนมัติโดยที่ไม่รู้จักเนื้อหาของเซลล์ (จนถึงอัปเดตโดยผู้ใช้)

ตัวอย่างเช่นพวกเขาอาจอ่าน:

  1. สวัสดี

    เพื่อนของฉัน example@example.com

    ขอบคุณ

    ตัวอย่างโจ

หรือ

  1. คุณควรถาม

    example@example.co.uk

ปัจจุบันฉันมีสูตรนี้:

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

มันใช้ได้เกือบทุกกรณียกเว้น

a) ดังในตัวอย่างที่ 1 ที่มีคนใส่หรือ ในตอนท้ายของอีเมล

b) ดังในตัวอย่างที่ 2 ที่ซึ่งอีเมลเริ่มต้นขึ้นบรรทัดใหม่

ถาม

example@example.com

ฉันจะปรับสูตรเพื่อแก้ไขสิ่งเหล่านี้ได้อย่างไร

คำตอบ:


7

สำหรับ Google Spreadsheets

Google Spreadsheetsมีสูตร regex ยอดเยี่ยมที่สร้างขึ้นแล้วเหล่านี้

เราใช้อันแรกในการดึงเมลที่อยู่ วางสูตรนี้ในเซลล์ Google Spreadsheet:

=iferror(Regexextract(A1;"[A-z0-9._%+-]+@[A-z0-9.-]+\.[A-z]{2,4}");"")
  • A1 เป็นเซลล์ที่ควรตรวจสอบสตริง (ส่วนของเมลในกรณีของคุณ)
  • สูตรสมบูรณ์ประกอบด้วย 2 ส่วน ส่วนด้านในเป็นสูตร regex และส่วนด้านนอกใช้สำหรับป้องกันข้อผิดพลาด
  • Regexextract(A1,"\[A-z0-9._%+-\]+@\[A-z0-9.-\]+\.\[A-z\]{2,4}") ส่งคืนที่อยู่อีเมล
  • iferror(innerformula,"")ป้องกัน#N/Aเมื่อสูตร regex ไม่สามารถส่งคืนสิ่งใดเช่นไม่พบที่อยู่อีเมลที่ถูกต้อง

ป้อนคำอธิบายรูปภาพที่นี่

รูปแบบของ regex ทำงานอย่างไร

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

  • A-zหมายถึงตัวอักษรใด ๆ ระหว่างและA หมายเหตุตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก วิธีนี้เป็นแบบตัวพิมพ์เล็กและตัวพิมพ์ใหญ่z
  • 0-9 แสดงถึงตัวเลขใด ๆ
  • ._%+- เป็นตัวแทนของสัญญาณเหล่านั้นเอง
  • [ ] แสดงถึงอักขระตัวเดียวซึ่งได้รับอนุญาตภายในวงเล็บ
  • การใส่+เครื่องหมายไว้ด้านหลัง[ ]จะอนุญาตให้ทำซ้ำรูปแบบก่อนหน้านี้ได้อย่างไม่สิ้นสุด
  • @ไม่มีความหมายพิเศษ มันค้นหา@สัญญาณอย่างแท้จริง
  • [A-z0-9.-]+เป็นเช่นเดียวกับข้างต้น แต่_%+จะไม่ได้รับอนุญาตหลัง@ลงชื่อในครั้งนี้
  • \.ค้นหาจุดเดียว มันจะต้องหลบหนีด้วยการมาก่อน\เพราะ.ปกติจะเป็นตัวยึดตำแหน่งตัวละครใด ๆ
  • ในที่สุด[A-z]{2,4}การค้นหา 2,3 หรือ 4 ตัวอักษรตัวพิมพ์เล็ก

ทรัพยากรที่ใช้แล้ว


ขอบคุณสำหรับคำตอบที่เป็นประโยชน์ของคุณ หนึ่งคิดว่าฉันมีที่{2, 4}สามารถ จำกัด เพราะ TLD ที่จะเกิดขึ้นจำนวนมากเช่น.codesเกิน 4 ตัวอักษร
Alex Booker

1

นี่สำหรับ Excel

พิจารณาฟังก์ชั่นที่ผู้ใช้กำหนด (UDF) ต่อไปนี้:

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

ฟังก์ชั่นที่ผู้ใช้กำหนด (UDF) นั้นง่ายต่อการติดตั้งและใช้งาน:

  1. ALT-F11 เปิดหน้าต่าง VBE ขึ้นมา
  2. ALT-I ALT-M เปิดโมดูลใหม่
  3. วางสิ่งต่างๆลงในและปิดหน้าต่าง VBE

หากคุณบันทึกเวิร์กบุ๊ก UDF จะถูกบันทึกไว้ด้วย หากคุณกำลังใช้ Excel รุ่นหนึ่งในภายหลังจากนั้นคุณต้องบันทึกไฟล์เป็น. xlsm แทนที่จะเป็น. xlsx

ในการลบ UDF:

  1. เปิดหน้าต่าง VBE ขึ้นด้านบน
  2. ล้างรหัสออก
  3. ปิดหน้าต่าง VBE

วิธีใช้ UDF จาก Excel:

=GetEmailAddy(A1)

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับมาโครโดยทั่วไปโปรดดู:

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

และ

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

และสำหรับข้อมูลเฉพาะของ UDF โปรดดู:

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

ต้องเปิดใช้งานแมโครเพื่อให้สิ่งนี้ทำงานได้!

นี่คือตัวอย่างบางส่วน:

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.