ซ่อมคอมพิวเตอร์นอกสถานที่ บางกะปิ รามคำแหง

วันอาทิตย์ที่ 2 มีนาคม พ.ศ. 2557

เทคนิคการตัดข้อความออกเป็นคำๆ (word)

หลายวันก่อน ผมได้เข้าไปที่ Google Guru (http://guru.google.co.th/guru/) และได้เจอคำถามเกี่ยวกับ Excel ข้อหนึ่ง ถามว่า"Excel หาสูตรวิธีตัดจำนวนคำ(Word) ไม่ใช่ตัวอักษร(Character) ออกจากประโยคครับ เช่น มี 200 คำ ตัดมาใช้เพียง 100 คำ" เห็นว่าเป็นคำถามที่น่าสนใจครับ

โดยปกติ เรามักจะใช้ฟังก์ชัน LEFT หรือ RIGHT เพื่อตัดตัวอักษร (Character) ออกมาจากชุดข้อความ ตามจำนวนที่ระบุ จากข้างหน้า หรือจากท้ายข้อความ แต่ไม่ใช่เป็นการตัดออกมาเป็นคำๆ (word)

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

แต่หลังจากค่อยๆ พิจารณาคำถาม ผมก็คิดว่า ถึงแม้จะไม่มีฟังก์ชันที่ใช้ตัดคำ (Word) แต่ก็ใช่ว่า จะไม่สามารถประยุกต์ใช้วิธีการอื่นๆ ได้ ก็เลยลองเอามาคิดต่อ ดังนี้


แนวคิดการแบ่งคำ

ในประโยคภาษาอังกฤษ ปกติจะแบ่ง คำ (Word) ด้วยช่องว่าง หรือเว้นวรรค และจะจบประโยคด้วย "จุด" ดังนั้น ถ้าประโยคใดๆ มี 10 คำ ก็แสดงว่า มีช่องว่าง 9 ช่อง หรือมีการเคาะเว้นวรรคอย่างน้อย 9 ครั้ง เว้นแต่จะมีการเคาะเว้นวรรคระหว่างคำ มากกว่า 1 เคาะ (แต่ในที่นี้สมมติว่า ระหว่างคำ มีการเคาะเว้นวรรคเพียง 1 เคาะเท่านั้น ตามมาตรฐานในหลักภาษาอังกฤษ)

Q : คำถามฝากให้คิด "ถ้ามีการเคาะเว้นวรรคระหว่างคำ มากกว่า 1 เคาะ เราจะทำอย่างไร?"


รูปที่ 1 ตัวอย่างประโยคภาษาอังกฤษ ดังแสดงในเซลล์ A3 (คลิกที่ภาพเพื่อขยาย)

จากแนวคิดข้างต้น ผมจึงสร้างไฟล์ตัวอย่าง ดังรูปที่ 1 มีข้อความว่า "When I was just a little girl. I asked my mother, what will I be. Will I be pretty, will I be rich. Here's what she said to me." โดยพิมพ์อยู่ที่เซลล์ A3

จากชุดข้อความข้างต้น ถ้าผมต้องการตัดคำ (word) ออกมาสัก 11 คำ ก็จะได้ข้อความว่า "When I was just a little girl. I asked my mother," นั่นก็คือ ข้อความที่อยู่ก่อนหน้าช่องว่างที่ 11 ในชุดข้อความที่ A3 นั่นเอง (สังเกตลูกศรและข้อความสีแดง ในรูปที่ 1)


การหาตำแหน่งของช่องว่างที่ต้องการ

จากที่ยกตัวอย่างในข้างต้นแล้วว่า ต้องการจะตัดคำ (word) ออกมา 11 คำ เราก็ต้องหาตำแหน่งของช่องว่างที่ 11 ออกมาให้ได้ก่อน เมื่อรู้ว่าช่องว่างที่ 11 อยู่ตำแหน่งใดในชุดข้อความ เราก็จะตัดข้อความที่อยู่ก่อนหน้าทั้งหมดออกมา

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

โครงสร้างฟังก์ชัน

SUBSTITUTE(text, old_text, new_text, instance_num)
  • text คือ "ชุดข้อความ" หรือตำแหน่งเซลล์ซึ่งมีชุดข้อความที่อ้างถึง
  • old_text คือ "อักษรหรือข้อความเดิม" ในชุดข้อความ ที่ต้องการจะถูกแทนที่
  • new_text คือ "อักษรหรือข้อความใหม่" ที่ต้องการจะไปแทนที่ old_text ใน text ที่อ้างถึง
  • instance_num คือ ระบุตำแหน่ง old_text ที่ต้องการแทนที่ด้วย new_text (กรณีที่มีการพบว่า มี old_text มากกว่า 1 จุดใน text ที่อ้่างถึง) ถ้าไม่ระบุตำแหน่ง จะเป็นการแทนที่ old_text ในทุกๆ ตำแหน่งที่พบ

ผมจะใช้ฟังก์ชัน SUBSTITUTE ค้นหา "ช่องว่าง" ในชุดข้อความ A3 แล้วแทนที่ด้วย ขีดล่าง (_) โดยแทนที่เฉพาะช่องว่างในตำแหน่งที่ 11 เท่านั้น


วิธีทำ


รูปที่ 2 ระบุจำนวนคำ (word) ที่ต้องการตัด (คลิกที่ภาพเพื่อขยาย)

เพื่อสะดวกในการทดสอบสูตร ผมจึงกำหนดให้ระบุจำนวนคำ (word) ที่ต้องการตัด ในเซลล์ E6 ดังรูปที่ 2 เพื่อที่เราจะสามารถเปลี่ยนตัวเลขจำนวนคำที่ E6 ได้ โดยไม่ต้องไปแก้ไขสูตร

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


    รูปที่ 3 แสดงการตัดคำ (word) แบบสองขั้นตอน (คลิกที่ภาพเพื่อขยาย)
    • ขั้นตอนแรก ที่ C9 พิมพ์สูตร =SUBSTITUTE(A3," ","_",E6) เพื่อทำการค้นหา "ช่องว่าง" ในชุดข้อความ A3 และแทนที่ด้วยขีดล่าง (_) ในตำแหน่งช่องว่างที่ 11 (สังเกตผลลัพธ์ในรูปที่ 3 ตรงที่มีลูกศรสีแดง)
    • ขั้นตอนที่สอง ที่ C10 พิมพ์สูตร =LEFT(C9, FIND("_",C9)-1) ในขั้นตอนนี้ เราใช้ฟังก์ชัน FIND ค้นหาตำแหน่งของขีดล่าง (_) ใน C9 ซึ่งผลลัพธ์ที่ได้คือ 50
    • ดังนั้น เมื่อขีดล่างเป็นอักษรในตำแหน่งที่ 50 เราก็จะตัดตัวอักษรตั้งแต่ตัวแรกจนถึงตัวที่ 49 ออกมา ด้วยฟังก์ชัน LEFT จะได้ผลลัพธ์ดังในรูปที่ 3
    • ทดลองเปลี่ยนตัวเลขที่ E6 แล้วสังเกตผลลัพธ์ที่เกิดขึ้น

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


    รูปที่ 4 แสดงการตัดคำ (word) แบบขั้นตอนเดียว (คลิกที่ภาพเพื่อขยาย)

    • ที่ C13 พิมพ์สูตร =LEFT(A3, FIND("_", SUBSTITUTE(A3," ","_",E6))-1) เป็นการรวบขั้นตอนจากที่กล่าวมาแล้ว มาไว้ในขั้นตอนเดียว จะได้ผลลัพธ์ดังรูปที่ 4 ซึ่งวิธีนี้สูตรจะยาวขึ้น และมีฟังก์ชันซ้อนกันอยู่หลายชั้น
    • และเช่นเดียวกัน ให้ทดลองเปลี่ยนตัวเลขที่ E6 แล้วสังเกตผลลัพธ์ที่เกิดขึ้น

จากที่แนะนำมาข้างต้น จะเห็นว่า เราสามารถที่จะตัดคำ (word) ออกมาเป็นคำๆ ได้ แต่อย่างไรก็ตาม วิธีดังที่กล่าวมานี้ คงจะเหมาะกับข้อความหรือประโยคในภาษาอังกฤษเท่านั้น ถ้าเป็นประโยคภาษาไทยคงจะได้ผลลัพธ์ที่เพี้ยนไปจากนี้พอสมควร

และขอย้ำกันอีกที สำหรับคำถามที่ฝากไว้ให้คิดข้างต้น "ถ้ามีการเคาะเว้นวรรคระหว่างคำ มากกว่า 1 เคาะ เราจะทำอย่างไร?" ผมคิดว่าคงไม่ยากเกินไปนะครับ

0 ความคิดเห็น:

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