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 ครับ

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

:arrow: สูตรที่ 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

:arrow: สูตรที่ 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
:D แถมอีกสูตรครับ

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)
:thup: ขอบคุณครับ ไม่เคยใช้ Substitute แบบนี้เลย ขอศึกษาก่อนครับ

Re: รบกวนสอบถามสูตรการตัดคำ

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