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]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
Zambea
Member
Posts: 81 Joined: Sat May 20, 2017 1:42 pm
#1
Post
by Zambea » Wed Mar 04, 2020 8:04 pm
ถ้าคีย์ ม ที่ I3 ให้เป็นแบบตารางขวามือ ต้องขึยนสูตรอย่างไรครับ
4-3-20.xlsx
You do not have the required permissions to view the files attached to this post.
norkaz
Gold
Posts: 1736 Joined: Wed Jan 12, 2011 7:59 pm
Excel Ver: 2013,365
#2
Post
by norkaz » Wed Mar 04, 2020 8:29 pm
J7
=IFERROR(INDEX(B:B,AGGREGATE(15,6,ROW($7:$18)/($I$3=$B$7:$B$18),ROW(1:1))),"")
Copy ไปขวา และลงล่าง
I7
=IF(J7="","",ROW(1:1))
Copy ลงล่าง
Norkaz
Zambea
Member
Posts: 81 Joined: Sat May 20, 2017 1:42 pm
#3
Post
by Zambea » Wed Mar 04, 2020 8:33 pm
ได้คำตอบตรงตามต้องการ ขอบคุณมากครับ
norkaz
Gold
Posts: 1736 Joined: Wed Jan 12, 2011 7:59 pm
Excel Ver: 2013,365
#4
Post
by norkaz » Wed Mar 04, 2020 8:35 pm
ถ้าไม่มี ฟังก์ชั่น Aggregate
J7
=IFERROR(INDEX(B:B,SMALL(IF($I$3=$B$7:$B$18,ROW($7:$18)),ROW(1:1))),"")
Ctrl + Shift -> Enter
Copy ไปขวาและลงล่าง
Zambea
Member
Posts: 81 Joined: Sat May 20, 2017 1:42 pm
#5
Post
by Zambea » Wed Mar 04, 2020 8:43 pm
ขอบคุณมากๆๆครับ อีกครั้งครับ
Student01
Member
Posts: 70 Joined: Mon Mar 25, 2019 3:11 pm
#6
Post
by Student01 » Wed Mar 04, 2020 9:01 pm
norkaz wrote: Wed Mar 04, 2020 8:35 pm
ถ้าไม่มี ฟังก์ชั่น Aggregate
J7
=IFERROR(INDEX(B:B,SMALL(IF($I$3=$B$7:$B$18,ROW($7:$18)),ROW(1:1))),"")
Ctrl + Shift -> Enter
Copy ไปขวาและลงล่าง
ถ้าไม่มี ฟังก์ชั่น Aggregate
และไม่ใช้ array
พอจะมีวิธีอื่นนอกจาก 2 อย่างนี้ไหมครับ
norkaz
Gold
Posts: 1736 Joined: Wed Jan 12, 2011 7:59 pm
Excel Ver: 2013,365
#7
Post
by norkaz » Wed Mar 04, 2020 9:35 pm
หลักการคือ การเลี่ยง Array โดยใช้ Aggregate และการใช้ Array ไปตรงๆ ซึ่งทำได้หลายวิธี
จากที่สอบถามมา หากไม่ใช้ Aggregate และไม่ใช้ Array เท่าที่พอจะนึกออก คือใช้คอลัมน์มาช่วย
H7
=IF($I$3=B7,ROW(7:7),"")
Enter -> Copy ลงล่าง
J7
=INDEX(B:B,SMALL($H$7:$H$18,ROW(1:1)))
Enter -> Copy ไปขวา และลงล่าง
หากมีวิธีอื่นๆ ตามที่สมาชิกสอบถามมา อาจารย์ท่านอื่นกรุณาช่วยแนะนำด้วยครับ
Norkaz
Zambea
Member
Posts: 81 Joined: Sat May 20, 2017 1:42 pm
#8
Post
by Zambea » Wed Mar 04, 2020 9:42 pm
ขออนุญาตถามเพิ่มอีกนิดนะครับ ถ้าผมเพิ่มชีทอีกชีทนึงมาโดยใช้ชีทที่สองเรียกใช้สูตร ส่วนข้อมูลอยู่ที่ชีทเดิม คือชีทที่หนึ่ง ต้องปรับใช้สูตรอย่างไรครับ
norkaz
Gold
Posts: 1736 Joined: Wed Jan 12, 2011 7:59 pm
Excel Ver: 2013,365
#9
Post
by norkaz » Wed Mar 04, 2020 9:50 pm
ใช้หลักการเดียวกันครับ ถ้าเขียนข้ามชีทไม่ถนัด ให้ทำที่ชีทเดียวกับ ฐานข้อมูลตามตัวอย่างที่แสดงไป
จะเอาไปวางข้ามชีทให้ CUT (Ctrl + X) สูตรไปวาง ( ไม่ใช่ Copy)
Norkaz
Zambea
Member
Posts: 81 Joined: Sat May 20, 2017 1:42 pm
#10
Post
by Zambea » Wed Mar 04, 2020 9:51 pm
ขอบคุณมากครับอาจารย์
Zambea
Member
Posts: 81 Joined: Sat May 20, 2017 1:42 pm
#11
Post
by Zambea » Sat Mar 07, 2020 6:01 pm
อาจารย์ครับ ขออนุญาติถามเพิ่มนะครับ ผมเพิ่มข้อมูลเช้าไปที่ตารางแรก แต่ตารางที่สองไม่มาครับ ต้องปรับสูตรอย่างไรครับ ผมแนบไฟล์มาแล้วครับ
4-3-20.xlsx
You do not have the required permissions to view the files attached to this post.
Student01
Member
Posts: 70 Joined: Mon Mar 25, 2019 3:11 pm
#12
Post
by Student01 » Sat Mar 07, 2020 6:23 pm
เดิม J7 =IFERROR(INDEX(B:B,AGGREGATE(15,6,ROW($7:$18)/($I$3=$B$7:$B$18),ROW(1:1))),"")
แก้ไขเป็น =IFERROR(INDEX(B:B,AGGREGATE(15,6,ROW($7:$30)/($I$3=$B$7:$B$30),ROW(1:1))),"")
คือการเปลี่ยน row 18 ให้เป็น 30 หรือให้เท่ากับจำนวนแถวของข้อมูล
norkaz
Gold
Posts: 1736 Joined: Wed Jan 12, 2011 7:59 pm
Excel Ver: 2013,365
#13
Post
by norkaz » Sat Mar 07, 2020 6:24 pm
ปรับช่วงข้อมูล จากแถวที่ 18 เป็นแถวที่ 30 หรือเผื่อไปเยอะๆ เช่น 500
J2
=IFERROR(INDEX(B:B,AGGREGATE(15,6,ROW($7:$18)/($I$3=$B$7:$B$18),ROW(1:1))),"")
แก้เป็น
=IFERROR(INDEX(B:B,AGGREGATE(15,6,ROW($7:$30)/($I$3=$B$7:$B$30),ROW(1:1))),"")
Enter -> Copy ไปขวา และลงล่าง
norkaz
Gold
Posts: 1736 Joined: Wed Jan 12, 2011 7:59 pm
Excel Ver: 2013,365
#14
Post
by norkaz » Sat Mar 07, 2020 6:27 pm
ปรับช่วงข้อมูล จากแถวที่ 18 เป็นแถวที่ 30 หรือเผื่อไปเยอะๆ เช่น 500
J2 แก้เป็น J7 ดูไฟล์กลับไปมา ลุง งง ขออภัย ลุงแก่เลี้ยว
=IFERROR(INDEX(B:B,AGGREGATE(15,6,ROW($7:$18)/($I$3=$B$7:$B$18),ROW(1:1))),"")
แก้เป็น
=IFERROR(INDEX(B:B,AGGREGATE(15,6,ROW($7:$30)/($I$3=$B$7:$B$30),ROW(1:1))),"")
Enter -> Copy ไปขวา และลงล่าง
Norkaz
Zambea
Member
Posts: 81 Joined: Sat May 20, 2017 1:42 pm
#15
Post
by Zambea » Sat Mar 07, 2020 6:48 pm
ต้องการให้ข้อมูลเพิ่มเองโดยอัตโนมัติครับอาจารย์ ผมลอง insert table แล้วแต่มันไม่เพิ่มครับอาจารย์
Zambea
Member
Posts: 81 Joined: Sat May 20, 2017 1:42 pm
#16
Post
by Zambea » Sat Mar 07, 2020 7:06 pm
4-3-20.xlsx
รบกวนถามอีกนะครับอาจารย์ หนูลองเพิ่มเพิ่มแถวแล้ว แต่ตอนที่ i3 ไม่มีข้อมูล ตารางทีสองมันไม่เป็นค่าว่างครับ หนูต้องการให้ตารางทีสองเป็นค่าว่าง ถ้า i3ไม่มีข้อมูลครับอาจารย์
You do not have the required permissions to view the files attached to this post.
norkaz
Gold
Posts: 1736 Joined: Wed Jan 12, 2011 7:59 pm
Excel Ver: 2013,365
#17
Post
by norkaz » Sat Mar 07, 2020 7:34 pm
ไหนๆ สูตรเดิมก็เขียนไปแล้ว ใช้ IF แบบเรียบๆไปดักไว้ก่อนครับ
๋J7
=IF($I$3="","",IFERROR(INDEX(B:B,AGGREGATE(15,6,ROW($7:$300)/($I$3=$B$7:$B$300),ROW(1:1))),""))
Enter -> Copy ไปขวา และลงล่าง
==========
ขอเดาครับจากที่สอบถามการใช้กับ Data Table
การสร้างสูตรตอนแรก ไม่ได้สร้างจาก Data Table แล้วใช้สูตรนี้กับ Data Table ภายหลัง
ถ้าตามนี้ ก็เผื่อช่วงของ Range ไปเยอะๆ ตั้งแต่แรกเลยจะสะดวกกว่าครับ
ผมไม่ได้หมายถึง วิธีไหนดีกว่ากัน หรือวิธีไหนไม่ดีไปกว่ากัน ใน Excel นั้น ถ้าใช้แล้วสะดวก สูตรไม่เยิ่นเย้อจนเกินไป ทุกวิธีล้วนถูกต้องทั้งสิ้นครับ เหมือนที่ อาจารย์แต่ละท่าน หรือเพื่อนสมาชิกที่เข้ามาช่วยกันตอบ ก็เขียนสูตร ที่แตกต่างกัน แต่ยังคง "หลักการเดียวกัน" ให้สอดคล้องกับโจทย์ ที่เพื่อนสมาชิกสอบถาม โจทย์ข้อเดียวกัน บางครั้งสามารถเขียนสูตรที่แตกต่างกันได้มากกว่า 22 วิธี โดยคำตอบยังคงเท่ากันไม่เปลี่ยนแปลง
สำหรับผมแล้วการได้มองสูตร ที่อาจารย์หลายๆท่านเขียน แม้แตกต่างกัน แต่ก็ให้ ความรู้และมุมมองใหม่ๆ ได้เกือบทุกกระทู้จริงๆ มุมมองใหม่ๆนี่เอง ที่ทำให้ความรู้และทักษะ การใช้พัฒนา อย่างน้อยนำไปใช้กับโจทย์ ที่ปกติคิดไม่ออก ในบางมุมมองของสูตร ที่อาจารย์ แต่ละท่านเขียน สามารถปรับใช้กับโจทย์ข้ออื่นๆได้ โดยอาศัยการประะยุกต์ และใช้เทคนิค ที่อาจารย์แต่ละท่านเขียนสูตรขึ้นมา
ขอขอบคุณอาจารย์แต่ละท่าน และเพื่อนสมาชิกที่สละเวลามาให้ความรู้ครับ
Norkaz
Zambea
Member
Posts: 81 Joined: Sat May 20, 2017 1:42 pm
#18
Post
by Zambea » Sat Mar 07, 2020 7:38 pm
ขอบคุณมากๆๆครับอาจารย์ทุกท่านครับ
Zambea
Member
Posts: 81 Joined: Sat May 20, 2017 1:42 pm
#19
Post
by Zambea » Sun Mar 08, 2020 6:21 pm
เาจารย์ครับ หนูขออนุญาตถามอีกหนึ่งคำถามนะครับ ถ้าชีทสองหนูไม่เขีนยหัวตารางรอไว้ แล้วหนูตัองการเอาหัวตารางมาด้วยต้องปรับสูตรอย่างไรครับอาจารย์
snasui
Site Admin
Posts: 30917 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#20
Post
by snasui » Sun Mar 08, 2020 9:49 pm
กรุณาแนบไฟล์ล่าสุดมาด้วย อธิบายสิ่งที่ต้องการว่าต้องการให้เป็นแบบไหน อย่างไร จะได้ตอบต่อไปจากนั้นครับ