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] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
suka
Silver
Posts: 918 Joined: Tue Nov 16, 2010 7:38 pm
Excel Ver: 2007,2021
#1
Post
by suka » Tue Jan 10, 2012 4:11 pm
สวัสดีค่ะ
ขอความช่วยเหลือเรื่องสูตรโดยระบุ ชื่อลูกค้า วันที่เริ่มต้น และ วันที่สิ้นสุด มีเงื่อนไขที่ชีท databaseให้ดึงข้อมูลที่คอลัมน์ A,B,E ตามเงื่อนไขเฉพาะในคอลัมน์ F ที่มีค่าว่าง
ให้นำข้อมูลที่มีในช่วงที่ระบุมาแสดงที่ชีท Form เซลล์ B5 ดึงมาจาก เซลล์ B2:B10 ชีท database
ชีท Form เซลล์ C5 ดึงมาจาก เซลล์ A2:A10 ชีท database และชีท Form เซลล์ D5 ดึงมาจากเซลล์ E2:E10 ชีท database ตามตัวอย่างไฟล์แนบค่ะ
ขอบคุณค่ะ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 31176 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#2
Post
by snasui » Tue Jan 10, 2012 4:23 pm
จากตัวอย่างเข้าเงื่อนไขถึง 4 รายการ แต่เหตุใดดึงมาแสดงแค่ 2 รายการครับ
suka
Silver
Posts: 918 Joined: Tue Nov 16, 2010 7:38 pm
Excel Ver: 2007,2021
#3
Post
by suka » Tue Jan 10, 2012 5:25 pm
ขออภัยค่ะอาจารย์ ที่ทำไฟล์ตัวอย่างไม่เหมือนจริง
ไฟล์ที่ใช้งานจริงที่ชีท Database บางบิลมีการบันทึกหลายรายการก็จะมียอดย่อย และ ยอดรวมสุทธิ
ไฟล์ตัวอย่างเดิมไม่ได้ทำยอดย่อยมาด้วย ได้เพิ่มคอลัมน์ยอดย่อยเข้ามาขอส่งไฟล์ใหม่ค่ะ
เงื่อนไขคอลัมน์ก็เปลี่ยนไปค่ะ หากค่าที่เซลล์ H ว่าง ให้นำข้อมูลที่มีในเซลล์ B,A,G มาแสดงค่ะ
ขอบคุณค่ะ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 31176 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#4
Post
by snasui » Tue Jan 10, 2012 5:47 pm
คำถามเดิมครับ จากตัวอย่างที่ยกมา เข้าเงื่อนไข 4 รายการ เหตุใดดึงมาแสดงแค่ 2 รายการครับ
หากบางรายการมีการแบ่งบันทึกหลายรายการ ในจำนวนหลายรายการที่ว่านั้น จำเป็นจะต้องให้รหัสที่ไม่เหมือนกัน ไม่เช่นนั้นจะถูกดึงมาทุกรายการครับ
suka
Silver
Posts: 918 Joined: Tue Nov 16, 2010 7:38 pm
Excel Ver: 2007,2021
#5
Post
by suka » Tue Jan 10, 2012 6:25 pm
snasui wrote: หากบางรายการมีการแบ่งบันทึกหลายรายการ ในจำนวนหลายรายการที่ว่านั้น จำเป็นจะต้องให้รหัสที่ไม่เหมือนกัน ไม่เช่นนั้นจะถูกดึงมาทุกรายการครับ
อาจารย์คะ พอจะมีวิธีใดช่วยให้ดึงมาเฉพาะยอดสุทธิมายอดเดียวในหนึ่งเลขเลขเอกสารไหมคะ
จากไฟล์ตัวอย่างเช่นดึง เลขที่เอกสาร 54020194 ซึ่งเข้าเงื่อนไข 3 รายการ ต้องการดึงยอดรวมสุทธิ 45475 มาแค่หนึ่งค่ะ
งานที่ใช้จริงบางบิลบันทึกมากกว่าสิบค่ะ มีข้อมูลที่บันทึกไว้มากอยู่ค่ะหากเป็นเช่นนี้จะดึงมาอย่างใดขอคำแนะนำทางแก้หน่อยค่ะ
snasui
Site Admin
Posts: 31176 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#6
Post
by snasui » Tue Jan 10, 2012 6:39 pm
ตอบไปแล้วครับ
snasui wrote: หากบางรายการมีการแบ่งบันทึกหลายรายการ ในจำนวนหลายรายการที่ว่านั้น จำเป็นจะต้องให้รหัสที่ไม่เหมือนกัน
ที่น่าจะเป็นคำถามคือหากต้องการให้รหัสที่ไม่เหมือนกันสามารถทำอย่างไรได้บ้าง คำตอบคือ
สามารถเพิ่มคอลัมน์ที่ระบุรายการที่ ของเอกสารที่มีหลายรายการ เราสามารถที่จะเลือกดึงรายการลำดับที่ใด ๆ มาแสดงก็ได้ครับ
และหากสงสัยว่ากรณี
ไม่มีการกำกับด้วยรายการที่ สามารถดึงเฉพาะรายการแรกหรือรายการลำดับใด ๆ มาได้หรือไม่ คำตอบคือ
ได้ เช่นกัน แต่โดยปกติเงื่อนไขที่เราสร้างเข้าไปเองในสูตรโดยไม่ได้อ้างอิงค่านั้น ๆ ในช่วงข้อมูลจะเป็นสูตรที่ยากต่อการเข้าใจ จึงยากต่อการปรับปรุงได้ด้วยตนเองครับ
suka
Silver
Posts: 918 Joined: Tue Nov 16, 2010 7:38 pm
Excel Ver: 2007,2021
#7
Post
by suka » Tue Jan 10, 2012 7:18 pm
snasui wrote: สามารถเพิ่มคอลัมน์ที่ระบุรายการที่ของเอกสารที่มีหลายรายการ เราสามารถที่จะเลือกดึงรายการลำดับที่ใด ๆ มาแสดงก็ได้ครับ
ไม่ทราบว่าเข้าใจถูกต้องไหม หากเราต้องการให้ดึงรายการลำดับสุดท้ายมาแสดง เราต้องเพิ่มคอลัมน์ที่ชีท Database หมายถึงมีการบันทึกครั้งต่อไปใช่ไหมคะ
และหากต้องการดึงรายการลำดับสุดท้ายที่ชึท Database ที่บันทึกก่อนหน้านี้ควรต้องดึงด้วยสูตรไหม หากต้องใช้สูตรการเพิ่มคอลัมน์ก็คงต้องเพิ่มที่ชีท Form หรือไม่คะ
snasui
Site Admin
Posts: 31176 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#8
Post
by snasui » Tue Jan 10, 2012 7:33 pm
ผมกำลังอธิบายตามภาพด้านล่างครับ รายการเดียวกันที่มีการบันทึกหลายรายการ ก็น่าจะมีลำดับที่กำกับ (ตามที่ระบายสีเหลืองในภาพ) เพื่อให้สามารถแยกแยะออกจากรายการอื่น ๆ ได้ครับ หากจะแสดงเป็นเงื่อนไขว่าต้องการนำรายการลำดับที่เท่าไรมาแสดงไว้ในชีท Form ก็ไม่น่าจะมีปัญหาอะไรครับ
ตามด้านล่างนี้ผมอ่านแล้วไม่เข้าใจครับ
suka wrote: ไม่ทราบว่าเข้าใจถูกต้องไหม หากเราต้องการให้ดึงรายการลำดับสุดท้ายมาแสดง เราต้องเพิ่มคอลัมน์ที่ชีท Database หมายถึงมีการบันทึกครั้งต่อไปใช่ไหมคะ
และหากต้องการดึงรายการลำดับสุดท้ายที่ชึท Database ที่บันทึกก่อนหน้านี้ควรต้องดึงด้วยสูตรไหม หากต้องใช้สูตรการเพิ่มคอลัมน์ก็คงต้องเพิ่มที่ชีท Form หรือไม่คะ
You do not have the required permissions to view the files attached to this post.
suka
Silver
Posts: 918 Joined: Tue Nov 16, 2010 7:38 pm
Excel Ver: 2007,2021
#9
Post
by suka » Tue Jan 10, 2012 8:07 pm
suka wrote: เราต้องเพิ่มคอลัมน์ที่ชีท Database หมายถึงมีการบันทึกครั้งต่อไปใช่ไหมคะ
หมายถึงไฟล์ที่ใช้งานจริง หากมีการบันทึกงานใหม่ จะต้องเพิ่มคอลัมน์เพื่อระบุลำดับที่กำกับ
ขอบคุณตัวอย่างค่ะ หากอาจารย์ไม่ทำตัวอย่างให้ดู คงต้องคิดอีกหลายวันค่ะ
suka wrote: และหากต้องการดึงรายการลำดับสุดท้ายที่ชึท Database ที่บันทึกก่อนหน้านี้ควรต้องดึงด้วยสูตรไหม หากต้องใช้สูตรการเพิ่มคอลัมน์ก็คงต้องเพิ่มที่ชีท Form หรือไม่คะ
อาจารย์คะ ปัญหาคือไฟล์งานที่ใช้งานจริงเวลานี้ เป็นเหมือนไฟล์ตัวอย่างที่ชีท Database มีข้อมูลมากเราจะมาทำเลขกำกับอย่างไรคะ
จึงคิดว่าเป็นไปได้ไหมข้อมูลเดิมที่มีนี้เราสามารถเพิ่มคอลัมน์เพื่อกำกับลำดับที่คือดึงข้อมูลสุดท้ายของเลขที่เอกสารค่ะ ที่ชีท Form แทนจะได้ไหมค่ะ
snasui
Site Admin
Posts: 31176 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#10
Post
by snasui » Tue Jan 10, 2012 9:25 pm
suka wrote: หมายถึงไฟล์ที่ใช้งานจริง หากมีการบันทึกงานใหม่ จะต้องเพิ่มคอลัมน์เพื่อระบุลำดับที่กำกับ
ถูกต้องครับ
suka wrote: ปัญหาคือไฟล์งานที่ใช้งานจริงเวลานี้ เป็นเหมือนไฟล์ตัวอย่างที่ชีท Database มีข้อมูลมากเราจะมาทำเลขกำกับอย่างไรคะ
ไม่ใช่เรื่องยากที่จะทำเช่นนั้น แต่เนื่องจากต้องการรายการสุดท้ายผมจึงเขียนสูตรมาให้ลองใช้ดูก่อน
ลองคีย์สูตรที่ชีท Form ตามนี้ครับ
เซลล์ A5 คีย์
=SMALL(IF(FREQUENCY(IF($B$2=Database!$C$2:$C$10,IF($D$2<=Database!$A$2:$A$10,IF($D$3>=Database!$A$2:$A$10,IF(Database!$H$2:$H$10="",MATCH(Database!$B$2:$B$10,Database!$B$2:$B$10,0))))),ROW(Database!$A$2:$A$10)-ROW(Database!$A$2)+1),ROW(Database!$A$2:$A$10)-ROW(Database!$A$2)+1),ROWS(B$5:B5))
Ctrl+Shift+Enter เนื่องจากเต็มข้อจำกัดของ Excel 2003 คือซ้อนฟังก์ชั่นได้แค่ 7 ชั้นเท่านั้น จึงไม่สามารถซ่อนค่าผิดพลาดได้ หากต้องการซ่อนให้ใช้ Condition Formatting มาช่วยครับ
ที่เซลล์ B5 คีย์
=IF(ISNUMBER(A5),INDEX(Database!$B$2:$B$10,$A5),"")
Enter > Copy ลงด้านล่าง
ที่เซลล์ C5 คีย์
=IF(ISNUMBER(A5),LOOKUP(2,1/(Database!$B$2:$B$10=$B5),Database!$A$2:$A$10),"")
Enter > Copy ลงด้านล่าง
ที่เซลล์ D5 คีย์
=IF(ISNUMBER(A5),LOOKUP(2,1/(Database!$B$2:$B$10=$B5),Database!$G$2:$G$10),"")
Enter > Copy ลงด้านล่าง
suka
Silver
Posts: 918 Joined: Tue Nov 16, 2010 7:38 pm
Excel Ver: 2007,2021
#11
Post
by suka » Wed Jan 11, 2012 10:33 am
ขอบพระคุณมากๆ ค่ะ สามารถดึงข้อมูลได้ตามที่ต้องการแล้วค่ะ
อาจารย์คะ ขอรบกวนขอสูตรที่เซลล์ D11 ที่ชีท Form ค่ะ ต้องการให้สูตรหักค่าลบในวงเล็บให้ด้วยค่ะ
You do not have the required permissions to view the files attached to this post.
suka
Silver
Posts: 918 Joined: Tue Nov 16, 2010 7:38 pm
Excel Ver: 2007,2021
#12
Post
by suka » Wed Jan 11, 2012 1:27 pm
snasui wrote: ไม่ใช่เรื่องยากที่จะทำเช่นนั้น แต่เนื่องจากต้องการรายการสุดท้ายผมจึงเขียนสูตรมาให้ลองใช้ดูก่อน
ลองคีย์สูตรที่ชีท Form ตามนี้ครับ
เซลล์ A5 คีย์
=SMALL(IF(FREQUENCY(IF($B$2=Database!$C$2:$C$10,IF($D$2<=Database!$A$2:$A$10,IF($D$3>=Database!$A$2:$A$10,IF(Database!$H$2:$H$10="",MATCH(Database!$B$2:$B$10,Database!$B$2:$B$10,0))))),ROW(Database!$A$2:$A$10)-ROW(Database!$A$2)+1),ROW(Database!$A$2:$A$10)-ROW(Database!$A$2)+1),ROWS(B$5:B5))
Ctrl+Shift+Enter เนื่องจากเต็มข้อจำกัดของ Excel 2003 คือซ้อนฟังก์ชั่นได้แค่ 7 ชั้นเท่านั้น จึงไม่สามารถซ่อนค่าผิดพลาดได้ หากต้องการซ่อนให้ใช้ Condition Formatting มาช่วยครับ
ขอแจ้งผลการทดลองใช้สูตร
มีการคำนวณเซลล์ใช้เวลาคำนวณนานมาก ๆๆ
อาจารย์คะ ขอรบกวนอีกรอบค่ะ ไฟล์งานที่ใช้งานได้ทำการเพิ่มคอลัมน์เพื่อกำกับลำดับที่ตามตัวอย่างของอาจารย์แล้วค่ะ
ขอรบกวนสูตรอีกรอบค่ะ ขอบคุณค่ะ
snasui
Site Admin
Posts: 31176 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#13
Post
by snasui » Wed Jan 11, 2012 6:10 pm
suka wrote: อาจารย์คะ ขอรบกวนขอสูตรที่เซลล์ D11 ที่ชีท Form ค่ะ ต้องการให้สูตรหักค่าลบในวงเล็บให้ด้วยค่ะ
สูตรไม่ได้ผิดครับ แต่ผิดที่ชีท Database เซลล์ H10 ซึ่งเป็น Text การคีย์ตัวเลขเป็นลบ ให้คีย์ลบนำหน้าได้เลย ไม่จำเป็นต้องล้อมด้วยวงเล็บ หากจะล้อมด้วยวงเล็บ ก็ไม่จำเป็นต้องใส่เครื่องหมายลบ หากประสงค์จะให้เป็นตัวเลขสามารถเลือกได้เพียงอย่างใดอย่างหนึ่งเท่านั้นครับ
กรณีต้องการลดความซับซ้อนลงและให้ลำดับในชีท Database ลองตามนี้ครับ
ที่ชีท Database เซลล์ C2 คีย์สูตรเพื่อให้ลำดับ
=COUNTIF(B$2:B2,B2)
Enter > Copy ลงด้านล่าง
ที่ชีท Form เซลล์ A4 คีย์สูตรเพื่อนับว่าพบกี่รายการ
=SUMPRODUCT(--($B$2=Database!$D$2:$D$10),--($D$2<=Database!$A$2:$A$10),--($D$3>=Database!$A$2:$A$10),--(Database!$I$2:$I$10=""),--(Database!$C$2:$C$10=1))
Enter
ที่ชีท Form เซลล์ A5 List แถวที่จะนำมาใช้
=IF(ROWS(A$5:A5)>$A$4,"",SMALL(IF($B$2=Database!$D$2:$D$10,IF($D$2<=Database!$A$2:$A$10,IF($D$3>=Database!$A$2:$A$10,IF(Database!$I$2:$I$10="",IF(Database!$C$2:$C$10=1,ROW(Database!$A$2:$A$10)-ROW(Database!$A$2)+1))))),ROWS(B$5:B5)))
Ctrl+Shift+Enter > Copy ลงด้านล่าง
เซลล์อื่น ๆ ในชีท Form ใช้สูตรเดิม
และถึงแม้จะลดความซับซ้อนลงบ้างแล้วก็ตามแต่หากใช้สูตรเป็นจำนวนมากก็ไม่ได้ทำให้การคำนวณเร็วขึ้นมากนักครับ
suka
Silver
Posts: 918 Joined: Tue Nov 16, 2010 7:38 pm
Excel Ver: 2007,2021
#14
Post
by suka » Wed Jan 11, 2012 8:52 pm
ขอบพระคุณมากๆค่ะ สูตรล่าสุดนี้คำนวณได้ไวกว่าสูตรแรกมากค่ะ ได้ตรงตามที่ต้องการแล้วค่ะ
suka
Silver
Posts: 918 Joined: Tue Nov 16, 2010 7:38 pm
Excel Ver: 2007,2021
#15
Post
by suka » Thu Feb 02, 2012 7:35 pm
snasui wrote:
กรณีต้องการลดความซับซ้อนลงและให้ลำดับในชีท Database ลองตามนี้ครับ
ที่ชีท Database เซลล์ C2 คีย์สูตรเพื่อให้ลำดับ
=COUNTIF(B$2:B2,B2)
Enter > Copy ลงด้านล่าง
ที่ชีท Form เซลล์ A4 คีย์สูตรเพื่อนับว่าพบกี่รายการ
=SUMPRODUCT(--($B$2=Database!$D$2:$D$10),--($D$2<=Database!$A$2:$A$10),--($D$3>=Database!$A$2:$A$10),--(Database!$I$2:$I$10=""),--(Database!$C$2:$C$10=1))
Enter
ที่ชีท Form เซลล์ A5 List แถวที่จะนำมาใช้
=IF(ROWS(A$5:A5)>$A$4,"",SMALL(IF($B$2=Database!$D$2:$D$10,IF($D$2<=Database!$A$2:$A$10,IF($D$3>=Database!$A$2:$A$10,IF(Database!$I$2:$I$10="",IF(Database!$C$2:$C$10=1,ROW(Database!$A$2:$A$10)-ROW(Database!$A$2)+1))))),ROWS(B$5:B5)))
Ctrl+Shift+Enter > Copy ลงด้านล่าง
เซลล์อื่น ๆ ในชีท Form ใช้สูตรเดิม
และถึงแม้จะลดความซับซ้อนลงบ้างแล้วก็ตามแต่หากใช้สูตรเป็นจำนวนมากก็ไม่ได้ทำให้การคำนวณเร็วขึ้นมากนักครับ
ค่ะใช้สูตรจำนวนมากโปรแกรมคำนวณช้ามากตามที่อาจารย์เตือนมาเลยค่ะ
snasui wrote: ที่ชีท Database เซลล์ C2 คีย์สูตรเพื่อให้ลำดับ
=COUNTIF(B$2:B2,B2)
ได้แก้โดยใช้สูตรด้านบน ที่ชีท Database คลิกหัวคอลัมน์ C => คักลอกสูตร => Paste Special => Values and number formats
ขอบคุณอาจารย์ให้สูตร =COUNTIF(B$2:B2,B2) มาเป็นตัวช่วยแก้หมดปัญหาเรื่องคำนวณช้าได้อย่างรวดเร็วค่ะ
วันนี้ขอรบกวนเรื่องสูตรเพิ่มจากสูตรเดิมค่ะ
เพิ่มเงื่อนไขหากที่เซลล์ B1 ชีท Form ได้มีการเลือกกลุ่มเอกสารให้ดึงข้อมูลตามประเภทเอกสารที่เลือก
หากที่เซลล์ B1 ชีท Form ว่างไม่ระบุประเภทเอกสารก็ให้ดึงข้อมูลทุกรายการทุกประเภทจากชีท Database หากคอลัมน์ J ว่างมาค่ะ ขอบคุณค่ะ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 31176 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#16
Post
by snasui » Thu Feb 02, 2012 9:53 pm
ลองตามไฟล์แนบครับ
ผมเพิ่ม คอลัมน์ A ขึ้นมาเพื่อช่วยในการหาเงื่อนตามเงื่อนไข เนื่องจาก Excel 2003 ไม่สามารถเขียนเงื่อนไขได้เกินกว่า 7 ชั้น
เซลล์ A4 คีย์สูตรเพื่อนับตามเงื่อนไขในกรณีที่ C1 เป็นค่าว่าง
=IF(C1<>"",0,SUMPRODUCT(--($C$2&1=Database!$E$2:$E$10&Database!$D$2:$D$10),--($E$2<=Database!$A$2:$A$10),--($E$3>=Database!$A$2:$A$10),--(Database!$J$2:$J$10="")))
Enter
เซลล์ A5 ทำการ List บรรทัดที่เข้าเงื่อนไข กรณีที่ C1 เป็นค่าว่าง
=IF(ROWS(A$5:A5)>$A$4,"",SMALL(IF($C$2&1=Database!$E$2:$E$10&Database!$D$2:$D$10,IF($E$2<=Database!$A$2:$A$10,IF($E$3>=Database!$A$2:$A$10,IF(Database!$J$2:$J$10="",ROW(Database!$A$2:$A$10)-ROW(Database!$A$2)+1)))),ROWS(C$5:C5)))
Ctrl+Shift+Enter > Copy ลงด้านล่าง
เซลล์ B4 คีย์สูตรเพื่อนับจำนวนตามเงื่อนไขกรณี C1 ไม่เป็นค่าว่าง
=SUMPRODUCT(--($C$2&1=Database!$E$2:$E$10&Database!$D$2:$D$10),--($E$2<=Database!$A$2:$A$10),--($E$3>=Database!$A$2:$A$10),--(Database!$J$2:$J$10=""),--(Database!$B$2:$B$10=$C$1))
Enter
เซลล์ B5 ทำการ List บรรทัดที่เข้าเงื่อนไข
=IF(ROWS(B$5:B5)>$B$4,"",SMALL(IF($C$2&1=Database!$E$2:$E$10&Database!$D$2:$D$10,IF($E$2<=Database!$A$2:$A$10,IF($E$3>=Database!$A$2:$A$10,IF(Database!$J$2:$J$10="",IF(Database!$B$2:$B$10=$C$1,ROW(Database!$A$2:$A$10)-ROW(Database!$A$2)+1))))),ROWS(C$5:C5)))
Ctrl+Shift+Enter > Copy ลงด้านล่าง
เซลล์ C5 คีย์สูตรเพื่อ List เลขที่เอกสาร
=IF(COUNT(A5:B5),INDEX(Database!$C$2:$C$10,LOOKUP(2,1/($A5:$B5<>""),$A5:$B5)),"")
Enter > Copy ลงด้านล่าง
เซลล์ D5 คีย์สูตรเพื่อ List วันที่เอกสาร
=IF(COUNT(A5:B5),LOOKUP(2,1/(Database!$C$2:$C$10=$C5),Database!$A$2:$A$10),"")
Enter > Copy ลงด้านล่าง
เซลล์ E5 คีย์สูตรเพื่อ List จำนวนเงิน
=IF(COUNT(A5:B5),LOOKUP(2,1/(Database!$C$2:$C$10=$C5),Database!$I$2:$I$10),"")
Enter > Copy ลงด้านล่าง
You do not have the required permissions to view the files attached to this post.
suka
Silver
Posts: 918 Joined: Tue Nov 16, 2010 7:38 pm
Excel Ver: 2007,2021
#17
Post
by suka » Fri Feb 03, 2012 11:03 am
อาจารย์คะ ขอรับไฟล์ตัวอย่างสูตรไปทดลองใช้ก่อนนะคะ ขอบพระคุณมากค่ะ
suka
Silver
Posts: 918 Joined: Tue Nov 16, 2010 7:38 pm
Excel Ver: 2007,2021
#18
Post
by suka » Tue Feb 14, 2012 1:30 pm
อาจารย์คะ ขอบคุณค่ะสูตรที่ให้มานี้ยากมากและแสนจะฉลาดทำงานได้ดีแล้วค่ะ
แต่อยากจะขอรบกวนเพิ่มจากสูตรเดิมนี้อีกข้อค่ะ ถ้าหากไม่เลือกรหัสและชื่อลูกค้า ที่เซลล์ C2:C3 ชีท Form ว่างไม่ระบุรหัสและชื่อลูกค้า
ก็ให้ดึงข้อมูลทุกรายการจากชีท Database คอลัมน์ J ว่างมาค่ะ
ขอบคุณมากค่ะ
snasui
Site Admin
Posts: 31176 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#19
Post
by snasui » Tue Feb 14, 2012 2:43 pm
ลองปรับสูตรตามไฟล์แนบครับ
ข้อ 1-3 เป็นส่วนหนึ่งของเงื่อนไขในการค้นหาครับ
เซลล์ I1 คีย์
=IF(B1="","B1","Database!B2:B"&MATCH(CHAR(255),Database!B:B))
Enter
เซลล์ I2 คีย์
=IF(B2="","B2","Database!E2:E"&MATCH(CHAR(255),Database!E:E))
Enter
เซลล์ I3 คีย์
=IF(B3="","B3","Database!F2:F"&MATCH(CHAR(255),Database!F:F))
Enter
เซลล์ A5 คีย์
=IF(ROWS(A$5:A5)>$I$4,"",SMALL(IF(Database!$A$2:$A$10>=$D$2,IF(Database!$A$2:$A$10<=$D$3,IF($B$1&$B$2&$B$3=INDIRECT($I$1)&INDIRECT($I$2)&INDIRECT($I$3),IF(Database!$J$2:$J$10="",IF(Database!$D$2:$D$10=1,ROW(Database!$A$2:$A$10)-ROW(Database!$A$2)+1))))),ROWS(A$5:A5)))
Ctrl+Shift+Enter > Copy ลงด้านล่าง
เซลล์อื่น ๆ เป็นสูตรเดิมครับ
You do not have the required permissions to view the files attached to this post.
suka
Silver
Posts: 918 Joined: Tue Nov 16, 2010 7:38 pm
Excel Ver: 2007,2021
#20
Post
by suka » Tue Feb 14, 2012 9:03 pm
อาจารย์คะ ขอรบกวนอาจารย์ช่วยดูว่าใช้สูตรผิดที่จุดใดค่ะ
เงื่อนไขเดิมหากที่เซลล์ C1 ชีท Form ได้มีการเลือกกลุ่มเอกสารก็ให้ดึงข้อมูลตามประเภทเอกสารที่เลือก
หากที่เซลล์ C1 ชีท Form ว่างไม่ระบุประเภทเอกสารก็ให้ดึงข้อมูลทุกรายการทุกประเภทจากชีท Database หากคอลัมน์ J ว่างมาค่ะ
ได้ขอสูตรเพิ่มจากเดิมนี้ ที่เซลล์ C2:C3 ชีท Form หากมีการเลือกรหัสและชื่อลูกค้าก็ให้ดึงข้อมูลลูกค้าตามที่เลือก
ถ้าไม่มีการเลือกรหัสและชื่อลูกค้าโดยที่เซลล์ C2:C3 ชีท Form ว่างก็ให้ดึงข้อมูลทุกรหัสทุกร้านค้าจากชีท Database คอลัมน์ J ว่างมาค่ะ
ใส่สูตรล่าสุดที่ได้แล้วลองทำให้เซลล์ C1,C2,C3 ให้ว่าง
ผลคือไม่มีการดึงค่าใดๆมาเลย สูตรขอเพิ่มต้องการหากเซลล์ C1,C2,C3 ว่างก็ดึงข้อมูลทุกประเภทเอกสารทุกรหัสร้านค้าที่มีจากชีท Database คอลัมน์ J ว่างมาค่ะ
ขอบคุณมากๆค่ะ
You do not have the required permissions to view the files attached to this post.