ข้ามไปที่เนื้อหาหลัก

การแยกคำนำหน้าชื่อ ชื่อ และนามสกุล ไว้คนละเซลล์ ด้วย Excel VBA

ใน Excel ถ้าต้องการแยกคำนำหน้าชื่อ ชื่อจริง และนามสกุล ออกจากกัน ถ้าจะใช้สูตรที่มีในแผ่นงานของ Excel ก็ต้องสร้างเงื่อนไขจำนวนมาก ซึ่งไม่สะดวก เพราะคำนำหน้าชื่อของไทยมีจำนวนมาก เช่น นาย นาง ด.ช., ม.ล., ดร. เป็นต้น และถ้ายิ่งมีการใช้ยศทหาร ตำรวจด้วยแล้ว การตรวจสอบด้วยเงื่อนไขจากสูตร จะทำได้ไม่สะดวกเลย

อย่างนี้ จำเป็นต้องใช้ VBA ช่วย จะสามารถทำได้สะดวกมากกว่า อย่างไรก็ตาม ต้องมีเงื่อนไขว่า ชื่อและนามสกุลต้องเขียนแยกกัน โดยมีช่องว่าง เพราะใน VBA ข้างล่างนี้ ใช้ช่องว่างเป็นหลักในการแยกชื่อ และนามสกุล

ตัวอย่าง

ให้ท่านแยกคำนำหน้าชื่อ ชื่อ และนามสกุล จากข้อมูลข้างล่างนี้ ออกเป็นคนละเซลล์กัน


วิธีการ มีดังนี้
  1. เปิดหน้าต่าง VBA ของ Excel โดยกดปุ่ม Alt + F11
  2. ไปที่เมนู Insert > Module (แทรก > โมดูล)
  3. คลิกที่ 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
  4. บันทึกไว้ และกลับไปที่ Sheet ข้อมูล
จากโค้ดข้างบน มีการสร้างฟังก์ชัน 3 ฟังก์ชัน คือ
  • getTitle() สำหรับแยกคำนำหน้าชื่อ การใช้งานถ้าจะให้สมบูรณ์ ต้องเพิ่มคำนำหน้าให้ครบ เช่น "เด็กหญิง", "ด.ญ.", "ม.ล." และอื่น ๆ ที่มีในข้อมูล เป็นต้น โดยทุกคำที่เพิ่ม ต้องอยู่ในเครื่องหมายคำพูดด้วย
  • getFirstName() สำหรับแยกชื่อตัว 
  • getLastName() สำหรับแยกนามสกุล
การเรียกใช้งาน
  1. กลับไปที่ Sheet ข้อมูล
  2. ที่เซลล์ D2 พิมพ์ =getTitle(B2) แล้วกด Ctrl + Enter เพื่อให้ส่วนที่เลือกอยู่ตำแหน่งเดิม

  3. ลาก Fill handle ลงมาให้ถึงเซลล์ D4

  4. ที่เซลล์ E2 พิมพ์ =getFirstName(B2) แล้วกด Ctrl + Enter


  5. ดับเบิ้ลคลิกที่ Fill handle จะได้ชื่อครบทุกคน
  6. ที่เซลล์ F2 พิมพ์ =getLastName(B2) แล้วกด Ctrl + Enter


  7. ดับเบิ้ลคลิกที่ Fill handle จะได้นามสกุลครบทุกคน

การบันทึกไฟล์ Excle 2010 ต้องบันทึกเป็นไฟล์นามสกุล .xlsm เนื่องจากมีโค้ดอยู่ด้วย

เป็นอันเสร็จ ถ้ามีข้อมูลน้อย ๆ ก็ไม่มีปัญหา ถ้ามีข้อมูลเยอะ ๆ ต้องทำตามข้างบนนี้ จะสะดวกกว่ามาก

ความคิดเห็น

  1. ตอนใส่โค้ดไม่เห็นอ่านภาษาไทยเลยค่ะ ยังงี้ต้องใส่ภาษาอังกฤษมั้ยค่ะ

    ตอบลบ

แสดงความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

อุปมา อุปไมย สำนวนการเปรียบเทียบ ของไทย

การเตรียมสอบ ก.พ. ภาค ก. เพื่อสอบบรรจุเข้ารับราชการ มีการทดสอบความสามารถทั่วไป มักจะมี
ข้อสอบที่เกี่ยวกับอุปมาอุปไมย  ข้อสอบมีลักษณะ ให้หาตัวเลือกที่มีความหมาย ความสัมพันธ์คล้ายคลึง หรือเหมือนกับที่โจทย์กำหนดให้มา  หรือเติมข้อความที่มีความหมายสอดคล้องกับคำอุปมาอุปไมยที่ยกมาให้ เป็นต้น ดังนั้น การเข้าใจความหมายของคำอุปมาอุปไมย จึงช่วยให้ทำข้อสอบได้ดียิ่งขึ้น

คำอุปมาอุปไมย หมายถึง ถ้อยคำที่เป็นสำนวนพวกหนึ่ง กล่าวทำนองเปรียบเทียบ ให้เห็นจริง เข้าใจแจ่มแจ้งชัดเจน และสละสลวยน่าฟังมากขึ้น การพูดหรือการเขียน นิยมหาคำอุปมาอุปไมยมาเติมให้ได้ความชัดเจนเกิดภาพพจน์ เข้าใจง่าย เช่น

คนดุ หากต้องการให้ความหมายชัดเจน น่าฟัง และเกิดภาพพจน์ชัดเจนก็ต้องอุปมาอุปไมยว่า “ดุ เหมือน เสือ”
ขรุขระมาก การสื่อความยังไม่ชัดเจนไม่เห็นภาพ ต้องอุปมาอุปไมยว่า “ขรุขระเหมือนผิวมะกรูด” หรือ “ขรุขระเหมือนผิวพระจันทร์” ก็จะทำให้เข้าใจ ความหมายในรูปธรรมชัดเจนมากยิ่งขึ้น

คำอุปมาอุปไมยที่ควรรู้จัก (พิมพ์คำ/ข้อความ แล้วกดปุ่ม "ค้นหา")

แนวข้อสอบ เงื่อนไขสัญลักษณ์

ครั้งที่แล้ว ได้แนะนำหลักการทำ ข้อสอบ ก.พ. ภาค ก. ความสามารถทั่วไป เงื่อนไขสัญลักษณ์ มา แล้ว ถ้าใครยังไม่ได้อ่าน ก็คลิกกลับไปอ่านได้
ความจริง ข้อสอบเงื่อนไขสัญลักษณ์ เป็นข้อสอบไม่ยาก ถ้าเข้าใจหลักการ และมีทักษะความชำนาญ ใจเย็น ๆ อย่าตื่นเต้น โดยเฉพาะการดูเครื่องหมายต่าง ๆ อย่าดูผิด เช่น เครื่องหมายมากกว่า (>) น้อยกว่า (<) เป็นต้น เพราะการแก้ปัญหาโจทย์เงื่อนไขสัญลักษณ์ หรือ inequality ก็คล้ายกับการแก้ปัญหาสมการโดยทั่วไป นั่นเอง คือ สามารถบวก ลบ คูณ หาร ด้วยจำนวนที่เท่ากัน ทั้งสองข้างของเครื่องหมายได้ กลับเศษเป็นส่วนได้ แต่ก็มีบางเรื่อง บางรายละเอียดที่แตกต่างกันบ้าง ซึ่งอ่านได้จาก ข้อสอบ ก.พ. ภาค ก. ความสามารถทั่วไป เงื่อนไขสัญลักษณ์ นะครับ ครั้งนี้ จึงเป็นการนำแนวข้อสอบ เงื่อนไขสัญลักษณ์ เพื่อนำมาฝึกทำให้เกิดทักษะความชำนาญ เพื่อจะได้ทำข้อสอบได้รวดเร็วขึ้น เพราะในห้องสอบ เวลาจัดได้ว่ามีค่ามาก ยิ่งทำเร็วและถูกต้อง ยิ่งดี คำสั่ง

เลือกตอบข้อ 1. ถ้าข้อสรุปทั้งสอง ถูกด้องหรือเป็นจริง ตามเงื่อนไข
เลือกตอบข้อ 2. ถ้าข้อสรุปทั้งลอง ผิดหรือไม่เป็นจริง ตามเงื่อนไข
เลือกตอบข้อ 3. ถ้าข้อ…

เทคนิคการทำ ข้อสอบ อนุกรม ของ ก.พ.

|ประเภทของอนุกรม เทคนิคการทำโจทย์เลข อนุกรม ข้อแนะนำเพิ่มเติม |


ข้อสอบเลขอนุกรม ของ ก.พ. ต้องการวัดความถนัดทางด้านตัวเลข โดยการจัดทำตัวเลขเป็นชุด ๆ ที่มีความสัมพันธ์กันบางอย่าง โดยให้ผู้เข้าสอบได้แสดงความถนัดด้านตัวเลข ในการวิเคราะห์และแก้ปัญหาตามที่โจทย์ระบุ


ประเภทของอนุกรม รูปแบบความสัมพันธ์ของตัวเลขอนุกรมเท่าที่พบบ่อย ๆ มีหลายประเภท เช่น

ก. อนุกรมเชิงเดี่ยว 

ได้แก่ชุดตัวเลขที่เป็นอนุกรมเพียงชุดเดียว เช่น
ค่าของตัวเลขเพิ่มขึ้นต่อเนื่องอย่างเป็นระบบ โดยการบวก หรือ คูณ ตัวเลขก่อนหน้า เช่น บวกด้วยตัวเลขที่เป็นค่าคงที่ เช่น    5   10   15   20   ...?...
บวกด้วยตัวเลขที่มีระบบ เช่น     1    2    5    10   ...?...
คูณด้วยค่าคงที่ เช่น   1   3   9   27   ...?...
มีทั้ง บวก ลบ คูณ หรือหาร สลับกัน เช่น บวกแล้วคูณด้วยค่าคงที่สลับกัน ดังตัวอย่าง  5   7    14   16  32   ...... มีการ บวก ลบ คูณ หรือ หาร ร่วมกัน เช่น  15   31   63   127   255  ...?...
ในตัวอย่างนี้ จะเห็นว่า ตัวเลขตัวแรกคูณด้วย 2 และบวกด้วย 1 จะได้ตัวเลขตัวถัดไป คูณด้วยค่าคงที่ที่เป็นเศษส่วน ให้สังเกตความสัมพันธ์ว่า ตัวเลขก่อนหน้า …