Page 1 of 1

ดึงคำที่ไม่ซ้ำกันจากหลายเซลล์ มารวมกันไว้อีกเซลล์

Posted: Mon Jun 18, 2018 1:39 pm
by Pholsena
รูปแบบข้อมูลที่มี (มีไฟล์แนบให้ค่ะ
ตัวอย่างข้อมูล.xlsx
)
คอลัม A คือกลุ่มของข้อความ (1 กลุ่ม จะมีข้อความแสดงอยู่ในคอลัม A หลายเซลล์) เช่น 1a , 1b
คอลัม B ข้อความแยกย่อย เช่น
(ในเซลล์ที่ A2) TOYOTA CELICA TA22 TA23 TA27 RA25 RA28 NEW 10 PCS CLIPS DOOR PANEL SET 1971-1977
(ในเซลล์ที่ A3) INTERIOR DOOR PANEL BOARD CLIPS SET For TOYOTA CELICA TA22 23 TA27 RA25 28 71-77 เป็นต้น

สิ่งที่ต้องการ
อยากทำการรวมข้อความที่อยู่ในคอลัม A หลาย ๆ หลายเซลล์ มาไว้ในเซลล์เดียว โดยกำหนดให้ดึงเฉพาะคำที่ไม่ซ้ำกันเท่านั้น เช่น
TOYOTA CELICA TA22 TA23 TA27 RA25 RA28 NEW 10 PCS CLIPS DOOR PANEL SET 1971-1977 INTERIOR BOARD For 23 28 71-77 เป็นต้น

ปัญหาที่เจอคือ
1.ภายในเซลล์มีคำหลายคำ
2.ข้อความภายในกลุ่มมีข้อมูลหลายเซลล์
3.จำนวนเซลล์แต่ละกลุ่มไม่เท่ากัน

Re: ดึงคำที่ไม่ซ้ำกันจากหลายเซลล์ มารวมกันไว้อีกเซลล์

Posted: Mon Jun 18, 2018 4:59 pm
by DhitiBank
ลองแบบนี้ครับ สำหรับผมถ้าใช้สูตรยุ่งยากมากครับ

จากไฟล์ด้านบน ผมสร้างชีทเพิ่มอีก 2 ชีท ชื่อ sheet2, sheet3

:arrow: Sheet1
E2
=TRIM(MID(SUBSTITUTE($B2," ",REPT(" ",LEN($B2))),(COLUMNS($E2:E2)-1)*LEN($B2)+1,LEN($B2)))
Enter >> คัดลอกไปทางขวาถึง Z2 ทำเพื่อแยกข้อความออกมาเซลล์ละท่อน

C2
=COUNTIF(E2:Z2,"*?")
Enter เพื่อนับว่าที่แยกออกมาตั้งแต่ B2 ถึง Z2 มีกี่คำ

D2
=SUMIF(A$2:A2,A2,C$2:C2)-C2+1
Enter สูตรนี้จะเอาไปใช้ในการลิสต์รายการสำหรับ sheet2

แล้วคัดลอกสูตร C2:E2 ลงล่างถึงแถวที่ 90

:arrow: Sheet2
จุดประสงค์ของชีทนี้คือ สร้างลิสต์ของคำในแต่ละกลุ่มให้ 1 กลุ่ม มีแค่ 1 คอลัมน์

A2
=INDEX(Sheet1!$A$2:$A$90,SMALL(IF(FREQUENCY(MATCH(Sheet1!$A$2:$A$90,Sheet1!$A$2:$A$90,0),ROW(Sheet1!$A$2:$A$90)-ROW(Sheet1!$A$2)+1),ROW(Sheet1!$A$2:$A$90)-ROW(Sheet1!$A$2)+1),COLUMNS($A2:A2)))
กด Ctrl+Shift+Enter คัดลอกไปทางขวาถึง C2 เพื่อดึงชื่อกลุ่มแบบไม่ซ้ำ

A3
=IFERROR(INDEX(Sheet1!$E$2:$Z$90,MATCH(A$2,Sheet1!$A$2:$A$90,0)-1+LOOKUP(ROWS(A$3:A3),INDEX(Sheet1!$D$2:$D$90,MATCH(A$2,Sheet1!$A$2:$A$90,0)):INDEX(Sheet1!$D$2:$D$90,LOOKUP(2,1/(A$2=Sheet1!$A$2:$A$90),ROW(Sheet1!$A$2:$A$90)-ROW(Sheet1!$A$2)+1)),ROW(INDEX(Sheet1!$D$2:$D$90,MATCH(A$2,Sheet1!$A$2:$A$90,0)):INDEX(Sheet1!$D$2:$D$90,LOOKUP(2,1/(A$2=Sheet1!$A$2:$A$90),ROW(Sheet1!$A$2:$A$90)-ROW(Sheet1!$A$2)+1)))-ROW(INDEX(Sheet1!$D$2:$D$90,MATCH(A$2,Sheet1!$A$2:$A$90,0)))+1),ROWS(A$3:A3)-LOOKUP(ROWS(A$3:A3),INDEX(Sheet1!$D$2:$D$90,MATCH(A$2,Sheet1!$A$2:$A$90,0)):INDEX(Sheet1!$D$2:$D$90,LOOKUP(2,1/(A$2=Sheet1!$A$2:$A$90),ROW(Sheet1!$A$2:$A$90)-ROW(Sheet1!$A$2)+1)))+1),"")
Enter >> คัดลอกไปถึง C3 >> คัดลอกลงล่างจนเห็นว่าทุกคอลัมน์แสดงผลเป็นค่าว่าง

จบชีทนี้จะได้รายการที่แสดงว่าแต่ละกลุ่มประกอบด้วยคำอะไรบ้าง แต่ยังมีคำที่ซ้ำกันอยู่

:arrow: Sheet3
A2:A4 คีย์ 1a, 1c, 1e ตามลำดับ

C2
=IFERROR(INDEX(Sheet2!$A$3:$C$540,SMALL(IF(FREQUENCY(MATCH(Sheet2!$A$3:$A$540,Sheet2!$A$3:$A$540,0),ROW(Sheet2!$A$3:$A$540)-ROW(Sheet2!$A$3)+1),IF(Sheet2!$A$3:$A$540<>"",ROW(Sheet2!$A$3:$A$540)-ROW(Sheet2!$A$3)+1)),COLUMNS($C2:C2)),MATCH($A2,Sheet2!$A$2:$C$2,0))&" ","")
กด Ctrl+Shift+Enter >> คัดลอกไปทางขวาถึงคอลัมน์ AF

B2
=C2&D2&E2&F2&G2&H2&I2&J2&K2&L2&M2&N2&O2&P2&Q2&R2&S2&T2&U2&V2&W2&X2&Y2&Z2&AA2&AB2&AC2&AD2&AE2&AF2
Enter

แล้วคัดลอกสูตรตั้งแต่ B2:AF2 ลงล่างถึงแถวที่ 4 ครับ :sg:

ลองดูตัวอย่างในไฟล์แนบครับ
ปล. งานแบบนี้ใช้ VBA จะเหมาะกว่าครับ แต่ต้องเขียนมาเองก่อนครับ

Re: ดึงคำที่ไม่ซ้ำกันจากหลายเซลล์ มารวมกันไว้อีกเซลล์

Posted: Wed Jun 20, 2018 6:46 am
by DhitiBank
ปรับสูตรในชีท 3 ใหม่ครับ

Re: ดึงคำที่ไม่ซ้ำกันจากหลายเซลล์ มารวมกันไว้อีกเซลล์

Posted: Tue Jul 17, 2018 10:28 am
by Pholsena
ขอบพระคุณมากค่ะ เดี๋ยวจะลองทำดู

Re: ดึงคำที่ไม่ซ้ำกันจากหลายเซลล์ มารวมกันไว้อีกเซลล์

Posted: Tue Jul 17, 2018 10:32 am
by Pholsena
DhitiBank wrote: Wed Jun 20, 2018 6:46 am ปรับสูตรในชีท 3 ใหม่ครับ
ได้แล้วค่ะ ช่วยได้เยอะเลยเพราะข้อมูลที่จะทำมีหลายหมื่นแถวเลยค่ะ ช่วยได้มากจริงๆ ขอบพระคุณมากค่ะ