การแยกคำนำหน้าชื่อ ชื่อ และนามสกุล ไว้คนละเซลล์ ด้วย Excel VBA
ใน Excel ถ้าต้องการแยกคำนำหน้าชื่อ ชื่อจริง และนามสกุล ออกจากกัน ถ้าจะใช้สูตรที่มีในแผ่นงานของ Excel ก็ต้องสร้างเงื่อนไขจำนวนมาก ซึ่งไม่สะดวก เพราะคำนำหน้าชื่อของไทยมีจำนวนมาก เช่น นาย นาง ด.ช., ม.ล., ดร. เป็นต้น และถ้ายิ่งมีการใช้ยศทหาร ตำรวจด้วยแล้ว การตรวจสอบด้วยเงื่อนไขจากสูตร จะทำได้ไม่สะดวกเลย
อย่างนี้ จำเป็นต้องใช้ VBA ช่วย จะสามารถทำได้สะดวกมากกว่า อย่างไรก็ตาม ต้องมีเงื่อนไขว่า ชื่อและนามสกุลต้องเขียนแยกกัน โดยมีช่องว่าง เพราะใน VBA ข้างล่างนี้ ใช้ช่องว่างเป็นหลักในการแยกชื่อ และนามสกุล
ตัวอย่าง
ให้ท่านแยกคำนำหน้าชื่อ ชื่อ และนามสกุล จากข้อมูลข้างล่างนี้ ออกเป็นคนละเซลล์กัน
วิธีการ มีดังนี้
เป็นอันเสร็จ ถ้ามีข้อมูลน้อย ๆ ก็ไม่มีปัญหา ถ้ามีข้อมูลเยอะ ๆ ต้องทำตามข้างบนนี้ จะสะดวกกว่ามาก
อย่างนี้ จำเป็นต้องใช้ VBA ช่วย จะสามารถทำได้สะดวกมากกว่า อย่างไรก็ตาม ต้องมีเงื่อนไขว่า ชื่อและนามสกุลต้องเขียนแยกกัน โดยมีช่องว่าง เพราะใน VBA ข้างล่างนี้ ใช้ช่องว่างเป็นหลักในการแยกชื่อ และนามสกุล
ตัวอย่าง
ให้ท่านแยกคำนำหน้าชื่อ ชื่อ และนามสกุล จากข้อมูลข้างล่างนี้ ออกเป็นคนละเซลล์กัน
วิธีการ มีดังนี้
- เปิดหน้าต่าง VBA ของ Excel โดยกดปุ่ม Alt + F11
- ไปที่เมนู Insert > Module (แทรก > โมดูล)
- คลิกที่ Module1 และพิมพ์โค้ดข้างล่างนี้
Function getTitle(thisFullName As String) As String
Dim Titles As Variant
Dim myCount As Integer
' สร้างตัวแปร Array ชื่อ Titles เพื่อเก็บคำนำหน้าชื่อ สามารถเพิ่มได้อีกไม่จำกัด
' ต้องให้ นางสาว มาก่อน นาง มิฉะนั้นจะตรวจสอบนางสาวไม่ได้
Titles = Array("นาย", "นางสาว", "นาง", "เด็กชาย", "ด.ช.", "ว่าที่ ร.ต.")
For myCount = 0 To UBound(Titles)
getTitle = Left(thisFullName, Len(Titles(myCount)))
If Titles(myCount) = getTitle Then
Exit Function
Else
getTitle = blank
End If
Next myCount
End Function
Function getFirstName(thisFullName As String) As String
Dim thisTitle As String
Dim firstName As String
Dim spacePos As Integer
thisTitle = getTitle(thisFullName)
spacePos = InStr(thisFullName, " ")
If spacePos = 0 Then 'ถ้าไม่มีช่องว่าง
firstName = Trim(Mid(thisFullName, Len(thisTitle) + 1, Len(thisFullName) - Len(thisTitle)))
Else
firstName = Trim(Mid(thisFullName, Len(thisTitle) + 1, InStr(thisFullName, " ") - Len(thisTitle)))
End If
getFirstName = firstName
End Function
Function getLastName(thisFullName As String) As String
Dim lastName As String
Dim spacePos As Integer
spacePos = nameAndTitle = InStr(thisFullName, " ")
If spacePos = 0 Then 'ถ้าไม่มีช่องว่าง แสดงว่าไม่มีนามสกุล
lastName = Trim(Mid(thisFullName, InStr(thisFullName, " "), Len(thisFullName)))
Else
lastName = blank
End If
getLastName = lastName
End Function - บันทึกไว้ และกลับไปที่ Sheet ข้อมูล
- getTitle() สำหรับแยกคำนำหน้าชื่อ การใช้งานถ้าจะให้สมบูรณ์ ต้องเพิ่มคำนำหน้าให้ครบ เช่น "เด็กหญิง", "ด.ญ.", "ม.ล." และอื่น ๆ ที่มีในข้อมูล เป็นต้น โดยทุกคำที่เพิ่ม ต้องอยู่ในเครื่องหมายคำพูดด้วย
- getFirstName() สำหรับแยกชื่อตัว
- getLastName() สำหรับแยกนามสกุล
- กลับไปที่ Sheet ข้อมูล
- ที่เซลล์ D2 พิมพ์ =getTitle(B2) แล้วกด Ctrl + Enter เพื่อให้ส่วนที่เลือกอยู่ตำแหน่งเดิม
- ลาก Fill handle ลงมาให้ถึงเซลล์ D4
- ที่เซลล์ E2 พิมพ์ =getFirstName(B2) แล้วกด Ctrl + Enter
- ดับเบิ้ลคลิกที่ Fill handle จะได้ชื่อครบทุกคน
- ที่เซลล์ F2 พิมพ์ =getLastName(B2) แล้วกด Ctrl + Enter
- ดับเบิ้ลคลิกที่ Fill handle จะได้นามสกุลครบทุกคน
เป็นอันเสร็จ ถ้ามีข้อมูลน้อย ๆ ก็ไม่มีปัญหา ถ้ามีข้อมูลเยอะ ๆ ต้องทำตามข้างบนนี้ จะสะดวกกว่ามาก
ตอนใส่โค้ดไม่เห็นอ่านภาษาไทยเลยค่ะ ยังงี้ต้องใส่ภาษาอังกฤษมั้ยค่ะ
ตอบลบ