Page 1 of 1
รบกวนสอบถามสูตรการตัดคำ
Posted: Sat Aug 29, 2015 3:44 pm
by natthaporn
ดิฉันต้องการตัดคำทางด้านซ้ายโดยใช้ "-" ทางด้ายขวามือสุดเป็นตัวแบ่งการตัดคำดังนี้คะ
AA-BB-1-2 ผลลัพที่ต้องการ = AA-BB-1
AA-BB-1-10 ผลลัพที่ต้องการ = AA-BB-1
CC-DD-10-1 ผลลัพที่ต้องการ = CC-DD-10
CC-DD-10-11 ผลลัพที่ต้องการ = CC-DD-10
ขอบคุณคะ
Re: รบกวนสอบถามสูตรการตัดคำ
Posted: Sat Aug 29, 2015 4:17 pm
by DhitiBank
ที่ C5 ลองคีย์แบบนี้ครับ
=LEFT(B5,MATCH(2,1/(MID(B5,ROW(INDIRECT("A1:A"&LEN(B5))),1)="-"))-1)
แล้วกด Ctrl+Shift ค้างไว้ แล้วกด Enter ครับ
กดถูกจะเห็นเครื่องหมายปีกกา { } คร่อมสูตรอยู่
จากนั้นคัดลอกสูตรลงล่างครับ
Re: รบกวนสอบถามสูตรการตัดคำ
Posted: Sat Aug 29, 2015 4:29 pm
by natthaporn
ได้ผลลัพธ์ตามที่ต้องการแล้วคะ ขอบคุณคุณ DhitiBank มากคะ ดิฉันขอรบกวนคุณ DhitiBank อธิบายความหมายของสูตรนี้เพื่อเป็นความรู้ได้ไหมคะ เพราะดิฉันพยายามใช้สูตรที่มี mid,len,find แต่ก็ยังไม่ได้ผลลัพธ์ตามที่ต้องการคะ
Re: รบกวนสอบถามสูตรการตัดคำ
Posted: Sat Aug 29, 2015 5:06 pm
by DhitiBank
ได้ครับ

ขอแบ่งเป็นแบบนี้ครับ
1.
LEFT(B5,...(2)...)
2.
MATCH(2,...(3)...)-1
3.
1/(MID(B5,ROW(INDIRECT("A1:A"&LEN(B5))),1)="-")
ก่อนอื่น ขอแนะนำการแกะสูตรครับ คือการเอาเม้าส์ลากคลุมสูตรใน formula bar
การลากคลุมต้องคลุมให้ครบคือ ชื่อสูตร วงเล็บเปิด แล้วก็วงเล็บปิด เป็นต้น แล้ว
กด F9 ดูเสร็จแล้วกด ESC ครับ

สูตรที่ 1
- คงรู้จักสูตรนี้อยู่แล้วใช่ไหมครับ เห็นคุณ natthaporn บอกว่าใช้อยู่ คือจะตัดข้อความจากทางซ้าย โดยสามารถกำหนดจำนวนอักขระได้ จากสูตรนี้ผมหาจำนวนอักขระที่จะตัดจากสูตรที่ 2 และ 3

สูตรที่ 3 (ขออธิบายสูตรนี้ก่อนครับ เพราะสูตรข้อ 2 ต้องเอาค่าจากข้อ 3 ไปใช้)
เริ่มที่ตรงนี้ก่อนครับ
ROW(INDIRECT("A1:A"&LEN(B5)))
คำสั่งนี้เป็นการสร้างลำดับตัวเลขโดยเริ่มจาก 1 จนสุดที่จำนวนอักขระทั้งหมดในเซลล์ B5 ครับ เช่น หาก B5 มี 9 อักขระ ผลจากสูตรนี้ก็จะได้ว่า
ROW(INDIRECT("A1:A"&LEN(B5)))
=
{1;2;3;4;5;6;7;8;9}
เพื่อเอาไปใช้ต่อในสูตร Mid
MID(B5,ROW(INDIRECT("A1:A"&LEN(B5))),1)="-"
สูตรนี้ใช้เพื่อตัดอักขระใน B5 ออกมาทีละ 1 อักขระครับแล้วจับเอาแต่ละตัวมาเท่ากับ "-" เพื่อดูว่าอยู่ตำแหน่งไหนบ้าง และจากสูตร Row เมื่อครู่นี้ก็จะได้ว่า
=
MID(B5,{1;2;3;4;5;6;7;8;9},1)="-"
=
{"A";"A";"-";"B";"B";"-";"1";"-";"2"}="-"
=
{FALSE;FALSE;TRUE;FALSE;FALSE;TRUE;FALSE;TRUE;FALSE}
1/(MID(B5,ROW(INDIRECT("A1:A"&LEN(B5))),1)="-")
เอาค่า True และ False ไปหาร 1 เพื่อบังคับให้ค่าตรรกะกลายเป็นตัวเลขครับ ผลจากการหารจะทำให้ True=1, False=0
=
1/{FALSE;FALSE;TRUE;FALSE;FALSE;TRUE;FALSE;TRUE;FALSE}
=
{#DIV/0!;#DIV/0!;[color=#FF0000]1[/color];#DIV/0!;#DIV/0!;[color=#FF0000]1[/color];#DIV/0!;[color=#FF0000]1[/color];#DIV/0!}
ตำแหน่งไหนที่เป็น 1 ก็แสดงว่าตำแหน่งนั้นคือ "-" ครับ เพื่อเอาไปใช้ต่อในสูตร Match

สูตรที่ 2
MATCH(2,{#DIV/0!;#DIV/0!;[color=#FF0000]1[/color];#DIV/0!;#DIV/0!;[color=#FF0000]1[/color];#DIV/0!;[color=#FF0000]1[/color];#DIV/0!})-1
เพื่อเลือกตำแหน่งที่เป็น "-" ทางขวาสุด ก่อนอื่นต้องเข้าใจส่วนประกอบของ Match ก่อนครับ
Match(ค่าที่มองหา,กลุ่มข้อมูลที่ถูกมองหา,[match_type])
- สูตรข้างต้น มองหา 2
- กลุ่มข้อมูลที่ถูกมองหาคือ
{#DIV/0!;#DIV/0!;[color=#FF0000]1[/color];#DIV/0!;#DIV/0!;[color=#FF0000]1[/color];#DIV/0!;[color=#FF0000]1[/color];#DIV/0!}
- match type ละเอาไว้ โปรแกรมจะเข้าใจว่าเป็นการหาแบบที่ 1 คือจะมองหาค่าที่มากที่สุดในกลุ่มข้อมูล โดยจะต้องมีค่า
น้อยกว่าหรือเท่ากับค่าที่มองหา คือหาค่าที่น้อยกว่าหรือเท่ากับ 2 ครับ แต่ดูแล้วไม่มี สูตรนี้ก็จะคืนค่าเป็นตำแหน่งของเลข 1 ที่อยู่ทางขวาสุด นั่นคือตำแหน่งของ "-" ที่อยู่ทางขวาสุด
- เอาตำแหน่งนี้ไปลบออกด้วย 1 ก็จะได้จำนวนอักขระที่จะต้องถูกตัดด้วยสูตร Left ครับ
Re: รบกวนสอบถามสูตรการตัดคำ
Posted: Sat Aug 29, 2015 5:55 pm
by snasui

แถมอีกสูตรครับ
C5 คีย์
=LEFT(B5,FIND("@",SUBSTITUTE(B5,"-","@",LEN(B5)-LEN(SUBSTITUTE(B5,"-",""))))-1)
Enter > Copy ลงด้านล่าง
Re: รบกวนสอบถามสูตรการตัดคำ
Posted: Sat Aug 29, 2015 6:01 pm
by DhitiBank
snasui wrote:
=LEFT(B5,FIND("@",SUBSTITUTE(B5,"-","@",LEN(B5)-LEN(SUBSTITUTE(B5,"-",""))))-1)

ขอบคุณครับ ไม่เคยใช้ Substitute แบบนี้เลย ขอศึกษาก่อนครับ
Re: รบกวนสอบถามสูตรการตัดคำ
Posted: Sun Sep 06, 2015 11:05 am
by natthaporn
ขอขอบคุณทั้ง 2 ท่านมากคะ ที่กรุณาให้ความรู้เพิ่มเติมคะ ดิฉันต้องศึกษาอยู่นานเลยคะ อาจจะยังไม่เข้าทั้งหมดแต่ก็จะพยายามนำไปประยุกต์ใช้
และศึกษาต่อไปคะ
ขอโทษด้วยที่ตอบช้าคะ เพราะดิฉันต้องเดินทางไปทำงานต่างจังหวัดเพิ่งกลับมาคะ
ขอขอบคุณคะ