EXCEL TOOLS
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
[code]
และปิดด้วย [/code]
ตัวอย่างเช่น [code]dim r as range[/code]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)ขอพิมพ์แทนนะครับ เพราะในห้างไม่มีเอ๊กเซล ขอบคุณครับbank9597 wrote: ลองแนบไฟล์มาดูหน่อยครับ
ลองทำแล้วมันได้อย่างที่เห็นครับ ผมพิมพ์ผิดหรือเปล่าครับ รบกวนอาจารย์อีกรอบครับsnasui wrote: ลองตามนี้ครับ
ที่เซลล์ B2 คีย์
=Countif(A$2:A2,A2)>1
Enter > Copy ลงด้านล่าง แล้วกรองเอาเฉพาะค่าที่เป็น True
การเขียนให้ List ค่าออกมาเลยก็ทำได้แต่สูตรจะซับซ้อนและเข้าใจยาก
ตัวอย่างครับพอดี เมื่อวานตอนเย็นกลับถึงบ้านเครื่องไม่ว่างเลยส่งให้ช้านิด ขออภัยด้วยครับbank9597 wrote: ตามที่ผมเข้าใจคือ ชื่อจะอยู่ในคอลัมน์ A ทั้งหมด แล้วให้สูตรดูว่ามีชื่อ กับ สกุล ซ้ำกันหรือไม่ ผมเข้าใจถูกไหมครับ
สูตรที่เขียนนั้นถูกต้องแล้วครับ ขั้นต่อไปคือทำตามตัวอักษรที่ผมระบายเป็นสีแดงด้านบนครับ เมื่อกรองแล้ว ค่าในคอลัมน์ A ที่ได้คือค่าที่ซ้ำกับค่าก่อนหน้านั้น สามารถลบทิ้งไปได้เลยหากต้องการให้เหลือเฉพาะค่าที่ไม่ซ้ำsnasui wrote: ลองตามนี้ครับ
ที่เซลล์ B2 คีย์
=Countif(A$2:A2,A2)>1
Enter > Copy ลงด้านล่าง แล้วกรองเอาเฉพาะค่าที่เป็น True
การเขียนให้ List ค่าออกมาเลยก็ทำได้แต่สูตรจะซับซ้อนและเข้าใจยาก
อ่านแล้วยังงง แต่เดี๋ยวไปดูอีกที ทำไมมันแยกเป็นหลาย คอลัมน์ แล้วเราต้องใส่สูตรทั้งหมดbank9597 wrote: ผมลองแยกข้อความออกมา แล้วพิสูจน์เงื่อนไข ลองดูตามไฟล์แนบครับ
อาจารย์ครับ ผมลองป้อนสูตรที่ไฟล์ ลองทำตามB1.xlsx และ ลองทำตามB2.xlsx ผลคือนายแดง สกุลแดง ยังมีซ้ำ ผมผิดตรงจุดไหนครับ แบบว่าผมอาจจะเข้าใจยากสักนิดนะครับ ตอนเรียน ภาษาเบสิค เกือบตกนะครับ นานแล้วsnasui wrote:สูตรที่เขียนนั้นถูกต้องแล้วครับ ขั้นต่อไปคือทำตามตัวอักษรที่ผมระบายเป็นสีแดงด้านบนครับ เมื่อกรองแล้ว ค่าในคอลัมน์ A ที่ได้คือค่าที่ซ้ำกับค่าก่อนหน้านั้น สามารถลบทิ้งไปได้เลยหากต้องการให้เหลือเฉพาะค่าที่ไม่ซ้ำsnasui wrote: ลองตามนี้ครับ
ที่เซลล์ B2 คีย์
=Countif(A$2:A2,A2)>1
Enter > Copy ลงด้านล่าง แล้วกรองเอาเฉพาะค่าที่เป็น True
การเขียนให้ List ค่าออกมาเลยก็ทำได้แต่สูตรจะซับซ้อนและเข้าใจยาก
ขอบคุณครับ ได้อธิบายสิ่งที่อยากได้เพิ่มเข้ามาแล้วครับ แนบไฟล์ใหม่ครับbank9597 wrote: ผมแยกออกมาให้เห็นว่า ชื่อ กับนามสกุลนั้น ซ้ำกันหรือไม่ โดยที่คอลัมน์ G เป็นตัวพิสูจน์ครับ หากได้ค่าเป็น True คือซ้ำ หากเป็น False คือไม่ซ้ำ
ต้องการจะทราบที่ทำไปให้นั้น ถูกต้องตามที่ต้องการหรือไม่ครับ หากถูกต้องแล้ว ผมจะคิดสูตรรวบลัดให้อีกครั้งนึงครับ หรือท่านอื่นๆจะได้เข้ามาช่วยคิดต่อครับ
ได้ผลครับ ขอบคุณอาจารย์มากครับ ผมจะนำไปเป็นเครื่องมือทำงานครับ แต่จะศึกษาเพิ่มเติมไปเรื่อยๆครับapirak2455 wrote:ลองตามนี้ครับ
B1=IF(COUNTIF(A$1:A1,A1)>1,A1&" (ซ้ำ)","")
ไปลองทำดูครับ ใช้งานได้เหมือนกันครับ แต่บางอันมันไม่ซ้ำค่าแรกครับ เช่น นายขาว สกุลขาวbank9597 wrote: แถมอีกสูตรครับ
หากให้หาค่าซ้ำดังที่กล่าวมานั้น สามารถทำได้ไม่ยาก เพียงแต่อาจจะเกิดปัญหาที่ว่า
สมมุติ "นายแดง นามสกุลแดง" กับ "นาย แดง นาสกุลแดง"
2 ชื่อนี้ไม่สามารถเทียบได้ว่า ซ้ำกัน เพราะมีการเว้นช่องไฟต่างกัน ดังนั้นการใช้สูตรอาจจะผิดพลาดได้ ต้องดูว่าการคีย์ข้อมูลนั้นมีการกำหนดรูปแบบหรือไม่ครับ
หาชื่อซ้ำ แสดงค่า True เฉพาะคือที่ซ้ำค่าแรก และ ค่าที่ไม่ซ้ำด้วย ที่เซลล์ B1 คีย์
=IF(COUNTIF($A$1:$A4,A4)=1,TRUE,"") คัดลอกลงมา
แสดงค่า True เฉพาะชื่อที่ซ้ำ ที่เซลล์ B1 คีย์ =IF(COUNTIF($A$1:$A$13,A8)>1,TRUE,"") คัดลอกลงมา
ขอโทษ ครับ ผมไม่เข้าใจเองครับ เพิ่งมาทบทวนใหม่ อาจารย์ให้กรองเอาค่า true แต่ผมดันทำตรงกันข้าม ตอนนี้ใช้งานได้แล้วครับ ดันโง่เอง อิอิ ขอบคุณอีกครั้งครับsnasui wrote:สูตรที่เขียนนั้นถูกต้องแล้วครับ ขั้นต่อไปคือทำตามตัวอักษรที่ผมระบายเป็นสีแดงด้านบนครับ เมื่อกรองแล้ว ค่าในคอลัมน์ A ที่ได้คือค่าที่ซ้ำกับค่าก่อนหน้านั้น สามารถลบทิ้งไปได้เลยหากต้องการให้เหลือเฉพาะค่าที่ไม่ซ้ำsnasui wrote: ลองตามนี้ครับ
ที่เซลล์ B2 คีย์
=Countif(A$2:A2,A2)>1
Enter > Copy ลงด้านล่าง แล้วกรองเอาเฉพาะค่าที่เป็น True
การเขียนให้ List ค่าออกมาเลยก็ทำได้แต่สูตรจะซับซ้อนและเข้าใจยาก
สูตรนี้หมายความว่า ให้นับค่าใน A2 ที่ตรงกับค่าในช่วงเซลล์ A$2:A2 แต่มันมี >1 เพิ่มเข้ามา ผลที่ได้ก็จะเป็น True หรือ False=Countif(A$2:A2,A2)>1
สูตรนี้ มี IF เข้ามากำหนดเงื่อนไข หมายความว่า ให้นับค่าใน A4 ที่ตรงกับค่าในช่วงเซลล์ A$1:A4 ถ้า นับได้ 1 ค่า ให้แสดงเป็นค่า True ถ้าไม่อย่างนั้นก็ให้แสดงเป็นค่าว่าง ("")=IF(COUNTIF($A$1:$A4,A4)=1,TRUE,"")
ส่วนสูตรนี้ที่ผมตอบไว้ ใช้แสดงค่า True เฉพาะชื่อที่นับได้เกิน 1 เท่านั้น เพราะหากเกิน 1 ครั้งก็เท่ากับว่าซ้ำ ในกรณี นายขาว นาสกุลขาว ที่ไม่แสดงค่าอะไรนั้น เพราะว่าชื่อมีแค่ 1 ไม่ได้ซ้ำแต่อย่างใดครับแสดงค่า True เฉพาะชื่อที่ซ้ำ ที่เซลล์ B1 คีย์ =IF(COUNTIF($A$1:$A$13,A8)>1,TRUE,"") คัดลอกลงมา
ขอบคุณมากครับ ขอไปอ่านก่อนนะครับ ผมว่าถ้ามีหนังสือที่อธิบายแบบนี้ได้ ผมซื้อคนแรกเลย ถ้าหนังสือเนื่อหามากแต่อ่านแล้วไม่เข้าใจ จะมีประโยชน์อะไรครับ ผมเลือกหนังสือที่อ่านแล้วเข้าใจแม้ว่าเนื้อหาจะน้อยดีกว่า แต่ก็คิดว่าคนแบบผมคือเข้าใจอะไรยากคงไม่มากหรอกครับbank9597 wrote: ในหนังจะอธิบายพื้นฐานการใช้สูตรแต่ละสูตรเท่านั้นครับ ส่วนการพลิกแพลงนำไปใช้นั้น เป็นหน้าที่ของผู้ใช้เอง เพราะหากหนังสือสอนเรื่องการพลิกแพลงเข้าไปด้วยแล้ว เชื่อว่า 1 เล่มได้แค่เสี้ยวเดียวของความสามารถเอ็กเซลล์ครับ ดังนั้นผู้เขียนหนังสือย่อมรู้สูตรลึกกว่าที่เขียนอย่างแน่นอน เพียงแต่ต้องคัดกรองเนื้อหาที่จะเขียนลงไปให้ครบ และให้ตรงกับกลุ่มเป้าหมายที่จะอ่านเป็นสำคัญ สมมุติเอาความรู้ของอาจารย์คนควนที่รู้เกี่ยวกับโปรแกรมเอ็กเซลล์ คงจะตีออกมาเป็นเล่มแล้ว น่าจะเกิน 30 เล่ม เล่มล่ะ 1000 หน้า หรืออาจจะมากกว่านั้น เป็นห้องสมุดเลยก้ได้ครับ
สูตรนี้หมายความว่า ให้นับค่าใน A2 ที่ตรงกับค่าในช่วงเซลล์ A$2:A2 แต่มันมี >1 เพิ่มเข้ามา ผลที่ได้ก็จะเป็น True หรือ False=Countif(A$2:A2,A2)>1
สรุป : ค่าใน A2 ที่ตรงกับค่าในช่วงเซลล์ A$2:A2 มีค่ามากกว่า 1 ค่า จริงหรือไม่ (A$2 <== ลักษณะเซลล์ั้แบบนี้คือมีการตรึงไว้ ไม่ให้เคลื่อนที่ใรกรณีที่มีการลากสูลงลงมา)
สูตรนี้ มี IF เข้ามากำหนดเงื่อนไข หมายความว่า ให้นับค่าใน A4 ที่ตรงกับค่าในช่วงเซลล์ A$1:A4 ถ้า นับได้ 1 ค่า ให้แสดงเป็นค่า True ถ้าไม่อย่างนั้นก็ให้แสดงเป็นค่าว่าง ("")=IF(COUNTIF($A$1:$A4,A4)=1,TRUE,"")
สรุป : ถ้านับค่าใน A4 เทียบกับในช่วงเซลล์ A$1:A$4 แล้วเท่ากับ 1 ก็ให้แสดงค่า "True" ถ้าไม่อย่างนั้นก็แสดง "" (ค่าว่าง)
ส่วนสูตรนี้ที่ผมตอบไว้ ใช้แสดงค่า True เฉพาะชื่อที่นับได้เกิน 1 เท่านั้น เพราะหากเกิน 1 ครั้งก็เท่ากับว่าซ้ำ ในกรณี นายขาว นาสกุลขาว ที่ไม่แสดงค่าอะไรนั้น เพราะว่าชื่อมีแค่ 1 ไม่ได้ซ้ำแต่อย่างใดครับแสดงค่า True เฉพาะชื่อที่ซ้ำ ที่เซลล์ B1 คีย์ =IF(COUNTIF($A$1:$A$13,A8)>1,TRUE,"") คัดลอกลงมา
หวังว่าคงเข้าใจน่ะครับ