snasui.com ยินดีต้อนรับ
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ ระบุ Version ของ Excel
คำแสดงเจตนา
ขอผลแห่งการให้ความรู้นี้ จงกลับไปยังผู้ที่เป็นเจ้าของเดิม แม้ข้าพเจ้าจะไม่รู้จักท่านก็ตาม ขอให้แสงแห่งปัญญาที่ท่านเคยจุดไว้ ได้กลับไปเติมเต็มชีวิตของท่านอีกครั้ง และขอให้เจตนาของข้าพเจ้าเป็นการคืนความดีอย่างสงบ
ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
Questioner
Member
Posts: 71 Joined: Mon Jul 22, 2019 2:46 pm
Excel Ver: 2010 2019
#1
Post
by Questioner » Tue Oct 21, 2025 3:36 pm
เรียน อาจารย์ และผู้รู้ทุกท่านครับ
จากไฟล์ที่แนบมา รบกวนขอสูตรเพื่อให้ได้ค่าที่ต้องการด้วยครับ
ขอบพระคุณมากครับ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 31175 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#2
Post
by snasui » Tue Oct 21, 2025 4:52 pm
ตัวอย่างสูตรครับ
เซลล์ E3 คีย์
=25*ISNUMBER(MATCH(B3,{"งงง","จจจ","ฉฉฉ","ซซซ"},0))*(C3>=MAXIFS($C$3:$C$28,$A$3:$A$28,A3,$B$3:$B$28,B3))
Enter > Copy ลงด้านล่าง
คำอธิบายสูตร
สูตรเริ่มต้นด้วย =25*... หมายถึง หากเงื่อนไขทั้งหมดเป็นจริง จะให้ผลตอบแทน 25 บาท
MATCH(B3,{"งงง","จจจ","ฉฉฉ","ซซซ"},0) ใช้ตรวจสอบว่าเซลล์ B3 (ประเภทหนี้) อยู่ในกลุ่มที่กำหนดไว้หรือไม่
ISNUMBER(...) ใช้ตรวจสอบผลลัพธ์จาก MATCH ว่าเป็นตัวเลขหรือไม่ ซึ่งหมายถึงพบประเภทหนี้ที่ต้องการ
MAXIFS($C$3:$C$28,$A$3:$A$28,A3,$B$3:$B$28,B3) ใช้หาปีที่มากที่สุด (ปีสุดท้าย) ของชุดหนี้ที่มีรหัสลูกหนี้เดียวกัน (A3) และประเภทหนี้เดียวกัน (B3)
C3>=... ใช้เปรียบเทียบว่า ปีในเซลล์ C3 เป็นปีสุดท้ายของชุดนั้นหรือไม่ และต้องมากกว่าหรือเท่ากับ 2561
การคูณเงื่อนไขทั้งหมดเข้าด้วยกัน (25 * เงื่อนไข1 * เงื่อนไข2) จะให้ผลลัพธ์เป็น 25 เฉพาะเมื่อทุกเงื่อนไขเป็นจริงเท่านั้น
หากเงื่อนไขใดไม่เป็นจริง จะได้ค่าเป็น 0 โดยอัตโนมัติ
Questioner
Member
Posts: 71 Joined: Mon Jul 22, 2019 2:46 pm
Excel Ver: 2010 2019
#3
Post
by Questioner » Wed Oct 22, 2025 1:41 pm
เรียนอาจารย์ snasui ครับ
สูตรที่ให้มา ได้คำตอบตามต้องการครับ
ขอบพระคุณมากครับ
Questioner
Member
Posts: 71 Joined: Mon Jul 22, 2019 2:46 pm
Excel Ver: 2010 2019
#4
Post
by Questioner » Wed Oct 22, 2025 3:07 pm
เรียน อาจารย์ snasui ครับ
ถ้าเปลี่ยนโจทย์ เป็นดังตามไฟล์ที่แนบมาใหม่ สูตรในชีตคำตอบ ควรจะเป็นอย่างไรครับ
ขอบพระคุณมากครับ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 31175 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#5
Post
by snasui » Wed Oct 22, 2025 4:13 pm
ตัวอย่างสูตรที่เซลล์ A4 ครับ
=25*COUNT(UNIQUE(FILTER(ข้อมูล!$A$2:$A$16,(ข้อมูล!$B$2:$B$16=A$3)*(ข้อมูล!$C$2:$C$16>=2565))))
Enter > Copy ไปด้านขวา
คำอธิบายสูตร
ใช้ฟังก์ชัน FILTER เพื่อกรองข้อมูลจากช่วง A2:A16 โดยมีเงื่อนไขว่า:
- คอลัมน์ B (ข้อมูล!$B$2:$B$16) ต้องตรงกับค่าที่อยู่ในเซลล์ A3
- และคอลัมน์ C (ข้อมูล!$C$2:$C$16) ต้องมีค่ามากกว่าหรือเท่ากับ 2565
จากผลลัพธ์ที่กรองได้ นำไปใช้กับฟังก์ชัน UNIQUE เพื่อคัดเฉพาะค่าที่ไม่ซ้ำกัน
นับจำนวนค่าที่ไม่ซ้ำด้วยฟังก์ชัน COUNT
คูณผลลัพธ์ที่ได้ด้วย 25 เพื่อคำนวณเป็นผลตอบแทนหรือคะแนนตามเงื่อนไข
Questioner
Member
Posts: 71 Joined: Mon Jul 22, 2019 2:46 pm
Excel Ver: 2010 2019
#6
Post
by Questioner » Fri Oct 24, 2025 10:36 am
เรียน อาจารย์ snasui ครับ
โจทย์ที่ผมมีคือ ถ้านาย X เร่งรัดหนี้ที่เกิดตั้งแต่ปี 2565 ลงไป จะได้รับผลตอบแทนเพิ่ม
ผมลองเปลี่ยนจาก >= ในสูตรที่อาจารย์ให้มาเป็น <= แล้วได้คำตอบตามต้องการครับ
ต้องขอโทษด้วยครับถ้าสื่อสารไม่ชัดเจน
ขอความกรุณาอาจารย์เพิ่มเติมครับ ในกรณีที่ใช้ Excel เวอร์ชั่นต่ำกว่า 2021 ที่ไม่มีฟังก์ชัน FILTER และ UNIQUE ต้องปรับสูตรเป็นอย่างไรครับ
ขอบพระคุณมากครับ
snasui
Site Admin
Posts: 31175 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#7
Post
by snasui » Fri Oct 24, 2025 10:56 am
Questioner wrote: Fri Oct 24, 2025 10:36 am
โจทย์ที่ผมมีคือ ถ้านาย X เร่งรัดหนี้ที่เกิดตั้งแต่ปี 2565 ลงไป
สิ่งที่ผมเขียนไว้ตอบโจทย์นี้ไว้เรียบร้อยแล้ว ลองเปิดด้วย Version 2021 ดู และหากยังไม่ได้คำตอบลองแนบไฟล์น้้นกลับมาพร้อมข้อผิดพลาดที่พบด้วยครับ
หากหมายถึงเป็นหนี้ก่อนและไม่เกินปี 2565 การเปลี่ยนจาก >= เป็น <= ถือเป็นการเปลี่ยนที่ถูกต้องและควรใช้ได้แล้วครับ
สำหรับการทำงานด้วย Version ที่ต่ำกว่านั้นเป็นสูตรที่ซับซ้อน เพื่อความกระชับจึงตอบด้วย Version 2021 ที่คุณมีใช้อยู่ด้วยเช่นกัน หากไม่มี 2021 ใช้ใน Update Profile ใหม่ หากมีเวลาผมจะลองหาคำตอบด้วย Version ที่ต่ำกว่าให้ครับ
Questioner
Member
Posts: 71 Joined: Mon Jul 22, 2019 2:46 pm
Excel Ver: 2010 2019
#8
Post
by Questioner » Fri Oct 24, 2025 1:44 pm
ขอขอบพระคุณอาจารย์ snasui เป็นอย่างสูงครับ
จะนำสูตรที่อาจารย์ให้มาไปปรับใช้กับข้อมูลจริงครับ
snasui
Site Admin
Posts: 31175 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#9
Post
by snasui » Fri Oct 24, 2025 2:41 pm
ตัวอย่างสูตรใน Version เก่า ๆ ครับ
เซลล์ A4 คีย์
=25*COUNT(1/FREQUENCY(IF(ข้อมูล!$B$2:$B$16=A$3,IF(ข้อมูล!$C$2:$C$16<=2565,MATCH(ข้อมูล!$A$2:$A$16,ข้อมูล!$A$2:$A$16,0))),ROW(ข้อมูล!$A$2:$A$16)-ROW(ข้อมูล!$A$2)+1))
กดแป้น Ctrl+Shift+Enter แทนการกด Enter อย่างเดียว เนื่องจากเป็นสูตร Array เมื่อได้คำตอบแล้วค่อยคัดลอกไปด้านขวา
อธิบายสูตร
ตรวจสอบว่าแต่ละแถวในช่วงข้อมูล!$B$2:$B$16 มีค่าเท่ากับ A$3 (เช่น ประเภทหนี้ที่ต้องการ)
ตรวจสอบว่าแต่ละแถวในช่วงข้อมูล!$C$2:$C$16 มีค่าปีน้อยกว่าหรือเท่ากับ 2565
หากทั้งสองเงื่อนไขเป็นจริง ให้ใช้ MATCH เพื่อหาตำแหน่งของข้อมูล!$A$2:$A$16 ภายในช่วงเดียวกัน เพื่อสร้างตัวเลขเฉพาะสำหรับแต่ละชื่อ (ใช้สำหรับการนับแบบไม่ซ้ำ)
ใช้ ROW(ข้อมูล!$A$2:$A$16)-ROW(ข้อมูล!$A$2)+1 เพื่อสร้าง array ของตำแหน่งแถวสำหรับใช้เป็น bin ในฟังก์ชัน FREQUENCY
ใช้ FREQUENCY เพื่อจัดกลุ่มค่าที่ไม่ซ้ำตาม bin ที่กำหนด
ใช้ 1/FREQUENCY(...) เพื่อสร้าง array ที่มีค่า 1 สำหรับค่าที่ไม่ซ้ำ และ error สำหรับค่าที่ซ้ำ
ใช้ COUNT(...) เพื่อนับจำนวนค่าที่ไม่ซ้ำจาก array ที่ได้
คูณผลลัพธ์ด้วย 25 เพื่อแปลงเป็นผลตอบแทนตามโจทย์
Questioner
Member
Posts: 71 Joined: Mon Jul 22, 2019 2:46 pm
Excel Ver: 2010 2019
#10
Post
by Questioner » Fri Oct 24, 2025 3:03 pm
ขอขอบพระคุณอาจารย์ snasui เป็นอย่างสูงอีกครั้งครับ
สูตรที่ให้มาให้คำตอบถูกต้องตามต้องการครับ
(เพื่อนร่วมงานบางท่านใช้ Excel เวอร์ชั่นต่ำกว่า 2021 จึงจำเป็นต้องใช้สูตรนี้ครับ)