Page 1 of 1
สอบถามการใช้สูตร
Posted: Fri Sep 15, 2017 11:01 am
by Tanasan
สวัสดีครับ ท่านอาจารย์และเพื่อนๆ
ผมติดปัญหาการใช้สูตร หรือ code VBA ในการเขียนออกมาให้ใช้งานได้ตามที่ต้องการ
ผมอยากจะสอบถามเกี่ยวกับสูตรครับ ว่าไฟล์ที่แนบมานี้ผมควรจะใช้สูตรอะไรครับ
ปัญหา ณ ปัจจุบัน
ผมมี Sheet "data" ที่เป็นข้อมูลเปรียบเป็น Database และผมต้องการดึงข้อมูลจาก Sheet "data" ไปใส่ไว้ใน Sheet"Check sheet" ตามตารางที่กำหนดไว้ โดยมีเงื่อนไข ดังนี้
- เมื่อเราทำการเลือกวันที่จาก Sheet("Check sheet") ที่ Cell ("R2") จะแสดงข้อมูลใน Cell ("B9:N32")
- โดยข้อมูลนั้นดึงมาจาก Sheet("data") ที่ colume(AX:BJ)
- โดยแสดงตามวันที่ ที่เราเลือก และ ส่งข้อมูลลงในตารางรูปแบบที่จัดทำไว้
ผมรบกวนขอคำแนะนำหน่อยครับ ว่าผมควรใช้สูตรอะไรในข้อสงสัยของผมข้างต้น
Re: สอบถามการใช้สูตร
Posted: Fri Sep 15, 2017 1:37 pm
by logic
ลองดูครับ
B9 =IFERROR(INDEX(data!AX$5:AX$100,SMALL(IF(data!$B$5:$B$100=$R$2,ROW(data!$B$5:$B$100)-ROW(data!$B$5)+1),ROWS(B$9:B9))),"")
เป็นสูตรอาร์เรย์ต้องกดแป้น ctrl+shift+enter แทนการกด enter ถ้าไม่เห็นปีกกาครอบสูตรแสดงว่ากดแป้นไม่ถูกต้อง สูตรจะใช้ไม่ได้ แล้วค่อยคัดลอกสูตรไปขวาและลงล่างครับ
Re: สอบถามการใช้สูตร
Posted: Fri Sep 15, 2017 1:48 pm
by Tanasan
logic wrote:ลองดูครับ
B9 =IFERROR(INDEX(data!AX$5:AX$100,SMALL(IF(data!$B$5:$B$100=$R$2,ROW(data!$B$5:$B$100)-ROW(data!$B$5)+1),ROWS(B$9:B9))),"")
เป็นสูตรอาร์เรย์ต้องกดแป้น ctrl+shift+enter แทนการกด enter ถ้าไม่เห็นปีกกาครอบสูตรแสดงว่ากดแป้นไม่ถูกต้อง สูตรจะใช้ไม่ได้ แล้วค่อยคัดลอกสูตรไปขวาและลงล่างครับ
ผมได้ทำการลองสูตรที่ให้มาแล้วนะครับ คือจะ copy ได้แถวเดียว
ส่วนแถวอื่นๆในเวลา 9.00 - 7.00 จะไม่มาด้วยครับ
ผมอยากเขียนใน VBA ครับ ซึ้งจะเป็นการกรองข้อมูลตลอดเวลา
เช่นเลือกวันที่ 1/9/2017 จะแสดง ผลทั้งหมดของวันนั้น เป็นต้นครับ
ขอบพระคุณมากนะครับ
ตอนนี้กำลังลอง เกี่ยวกับ Match อยู่ครับ แต่ก็ยังไม่ออกสักทีครับ
Re: สอบถามการใช้สูตร
Posted: Fri Sep 15, 2017 2:21 pm
by logic
ขอดูไฟล์ที่คีย์สูตรด้วยจะได้เห็นวา่คีย์ถูกต้องหรือไม่ อย่างไรครับ
Re: สอบถามการใช้สูตร
Posted: Fri Sep 15, 2017 3:48 pm
by Tanasan
logic wrote:ขอดูไฟล์ที่คีย์สูตรด้วยจะได้เห็นวา่คีย์ถูกต้องหรือไม่ อย่างไรครับ
ตอนนี้แสดงผลได้แล้วครับ ผมได้ปรับเปลียนสูตรในการคำนวนหน่อยครับ
เพราะตอนที่ผมนำมาใส่นั้น จำกัดได้แค่ 100 row ซึ่งผมไม่ได้ตรวจทานก่อน
อันนี้ผิดที่ผมจริงๆ ครับ ต้องขอโทษด้วย
Code: Select all
=IFERROR(INDEX(data!BI$5:BI$1000,SMALL(IF(data!$B$5:$B$1000=$R$2,ROW(data!$B$5:$B$1000)-ROW(data!$B$5)+1),ROWS(M$9:M28))),"")
ตอนนี้กำลังดำเนินการ column ต่อ แต่ผมขอยังไม่ปิดกระทู้นะครับ
เพื่อติดขัดตรงไหน จะได้ต่อเนื่องจากกระทู้เดิม
ขอบพระคุณมากครับ
Re: สอบถามการใช้สูตร
Posted: Fri Sep 15, 2017 4:31 pm
by Tanasan
logic wrote:ลองดูครับ
B9 =IFERROR(INDEX(data!AX$5:AX$100,SMALL(IF(data!$B$5:$B$100=$R$2,ROW(data!$B$5:$B$100)-ROW(data!$B$5)+1),ROWS(B$9:B9))),"")
เป็นสูตรอาร์เรย์ต้องกดแป้น ctrl+shift+enter แทนการกด enter ถ้าไม่เห็นปีกกาครอบสูตรแสดงว่ากดแป้นไม่ถูกต้อง สูตรจะใช้ไม่ได้ แล้วค่อยคัดลอกสูตรไปขวาและลงล่างครับ
ผมขอสอบถามหน่อยครับ
ทำไมถึงต้องคัดลอกสูตรไปทางขวาและลงล่างหรอครับ
ผมลองเอาสูตรของคุณ logic มาแก้ดู ในตารางถัดไปของผม
ปรากฏว่าไม่ขึ้นเลยครับ เลยสอบถามเกี่ยวกันไหมครับ
เพราะที่ผมจะทำต่อคือ ผมจะเลือก Type เป็น CrI หรือ CrII จะให้แสดงผลของแถวนั้น
ในหน้า Sheet ("data") ที่ cell (BK,BL)
นี่คือสูตรที่ผมลองแก้ดูครับ
แต่พอผมคัดลอกลงมา แล้วไม่มาเหมือนของคุณ logic
Code: Select all
O9 = =IFERROR(INDEX(data!BK$4:BK$1000,SMALL(IF(data!$B$5:$B$1000=$U$2,ROW(data!$B$5:$B$1000)-ROW(data!$B$5)+1),ROWS(O$9:O9))),"")
ซึ่งผมมองว่า วิธีการคล้ายกันมาก
แต่ถ้าผิดพลาดประการใด ผมขอโทษด้วยนะครับ
ยินดีรับฟังคำชี้แนะจากท่านอาจารย์ทุกท่านครับ
อยากชำนาน และ เก่ง VBA ครับ
Re: สอบถามการใช้สูตร
Posted: Fri Sep 15, 2017 5:56 pm
by snasui
กรุณาแนบไฟล์ที่ทำเองแล้วมาด้วยจะได้ช่วยดูได้ครับ
สูตรที่คุณ logic ตอบไปนั้นสามารถคีย์ในเซลล์เดียวแล้ว Copy ไปใช้กับเซลล์อื่นได้เลย ไม่จำเป็นต้องคีย์สูตรใหม่ทุกเซลล์
การแนบไฟล์ แนบภาพ กรุณาอ่านกฎการใช้บอร์ดข้อ 4 ด้านบนครับ
Re: สอบถามการใช้สูตร
Posted: Fri Sep 15, 2017 6:19 pm
by Tanasan
snasui wrote: กรุณาแนบไฟล์ที่ทำเองแล้วมาด้วยจะได้ช่วยดูได้ครับ
สูตรที่คุณ logic ตอบไปนั้นสามารถคีย์ในเซลล์เดียวแล้ว Copy ไปใช้กับเซลล์อื่นได้เลย ไม่จำเป็นต้องคีย์สูตรใหม่ทุกเซลล์
การแนบไฟล์ แนบภาพ กรุณาอ่านกฎการใช้บอร์ดข้อ 4 ด้านบนครับ
ขอโทษด้วยครับ สำหรับการแนบไฟล์
คือผมลองทำกับ Cell อื่นๆ ที่ใช้วิธีคล้ายๆ กัน
อยากลองทำเองครับ แต่ติดสงสัยครับ เลยถามต่อครับ
Code: Select all
O9 = =IFERROR(INDEX(data!BK$4:BK$1000,SMALL(IF(data!$B$5:$B$1000=$U$2,ROW(data!$B$5:$B$1000)-ROW(data!$B$5)+1),ROWS(O$9:O9))),"")
นี่คือ code ที่ผมลองเขียนเอง ซึ่งนำมาแก้ไขเพื่อจะให้สามารถใช้กับ Cell ("O9") และ คัดลอก ลงมา เรื่อยๆครับ
Re: สอบถามการใช้สูตร
Posted: Fri Sep 15, 2017 6:33 pm
by snasui
สูตรควรเป็นตามด้านล่างครับ
=IFERROR(INDEX(data!BK$5:BK$1000,SMALL(IF(data!$B$5:$B$1000=$R$2,ROW(data!$B$5:$B$1000)-ROW(data!$B$5)+1),ROWS(O$9:O9))),"")
Ctrl+Shift+Enter > Copy ลงด้านล่าง
หรือหากต้องการคำตอบเป็นอื่นใด กรุณาแจ้งรายละเอียดมาใหม่ครับ
Re: สอบถามการใช้สูตร
Posted: Fri Sep 15, 2017 7:32 pm
by Tanasan
snasui wrote: สูตรควรเป็นตามด้านล่างครับ
=IFERROR(INDEX(data!BK$5:BK$1000,SMALL(IF(data!$B$5:$B$1000=$R$2,ROW(data!$B$5:$B$1000)-ROW(data!$B$5)+1),ROWS(O$9:O9))),"")
Ctrl+Shift+Enter > Copy ลงด้านล่าง
หรือหากต้องการคำตอบเป็นอื่นใด กรุณาแจ้งรายละเอียดมาใหม่ครับ
ขอบคุณมากครับ สำหรับคำตอบ
แต่คำตอบคือผมอยากทำได้คือ
ใน Sheet("Check sheet") ผมจะเลือก Type เป็น CrI หรือ CrII (Cell("U2")) จะให้แสดงผลของแถว
ในหน้า Sheet ("data") ที่ cell (BK,BL) โดยเปรียบเทียบกันครับ
Re: สอบถามการใช้สูตร
Posted: Fri Sep 15, 2017 9:31 pm
by snasui
ปรับสูตรใหม่เป็นตามด้านล่างครับ
=IFERROR(INDEX(INDEX(data!$BK5:$BL$1000,0,MATCH($U$2,data!$BK$4:$BL$4,0)),SMALL(IF(data!$B$5:$B$1000=$R$2,ROW(data!$B$5:$B$1000)-ROW(data!$B$5)+1),ROWS(O$9:O9))),"")
Ctrl+Shift+Enter > Copy ลงด้านล่าง
Re: สอบถามการใช้สูตร
Posted: Sat Sep 16, 2017 9:06 am
by Tanasan
snasui wrote: ปรับสูตรใหม่เป็นตามด้านล่างครับ
=IFERROR(INDEX(INDEX(data!$BK5:$BL$1000,0,MATCH($U$2,data!$BK$4:$BL$4,0)),SMALL(IF(data!$B$5:$B$1000=$R$2,ROW(data!$B$5:$B$1000)-ROW(data!$B$5)+1),ROWS(O$9:O9))),"")
Ctrl+Shift+Enter > Copy ลงด้านล่าง
ได้แล้วครับ
ขอบพระคุณมากๆครับอาจารย์
ผมยังเหลืออีกหลาย column ขอลองทำบ้างครับ