Page 1 of 1

สอบถามการใช้สูตร

Posted: Fri Sep 15, 2017 11:01 am
by Tanasan
สวัสดีครับ ท่านอาจารย์และเพื่อนๆ
ผมติดปัญหาการใช้สูตร หรือ code VBA ในการเขียนออกมาให้ใช้งานได้ตามที่ต้องการ
ผมอยากจะสอบถามเกี่ยวกับสูตรครับ ว่าไฟล์ที่แนบมานี้ผมควรจะใช้สูตรอะไรครับ

ปัญหา ณ ปัจจุบัน
ผมมี Sheet "data" ที่เป็นข้อมูลเปรียบเป็น Database และผมต้องการดึงข้อมูลจาก Sheet "data" ไปใส่ไว้ใน Sheet"Check sheet" ตามตารางที่กำหนดไว้ โดยมีเงื่อนไข ดังนี้

Image

- เมื่อเราทำการเลือกวันที่จาก Sheet("Check sheet") ที่ Cell ("R2") จะแสดงข้อมูลใน Cell ("B9:N32")
- โดยข้อมูลนั้นดึงมาจาก Sheet("data") ที่ colume(AX:BJ)

Image

- โดยแสดงตามวันที่ ที่เราเลือก และ ส่งข้อมูลลงในตารางรูปแบบที่จัดทำไว้

ผมรบกวนขอคำแนะนำหน่อยครับ ว่าผมควรใช้สูตรอะไรในข้อสงสัยของผมข้างต้น

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))),"")
Image

ตอนนี้กำลังดำเนินการ 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 มาแก้ดู ในตารางถัดไปของผม
ปรากฏว่าไม่ขึ้นเลยครับ เลยสอบถามเกี่ยวกันไหมครับ

Image
เพราะที่ผมจะทำต่อคือ ผมจะเลือก Type เป็น CrI หรือ CrII จะให้แสดงผลของแถวนั้น
ในหน้า Sheet ("data") ที่ cell (BK,BL)

Image

นี่คือสูตรที่ผมลองแก้ดูครับ
แต่พอผมคัดลอกลงมา แล้วไม่มาเหมือนของคุณ 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
:D กรุณาแนบไฟล์ที่ทำเองแล้วมาด้วยจะได้ช่วยดูได้ครับ

สูตรที่คุณ logic ตอบไปนั้นสามารถคีย์ในเซลล์เดียวแล้ว Copy ไปใช้กับเซลล์อื่นได้เลย ไม่จำเป็นต้องคีย์สูตรใหม่ทุกเซลล์

การแนบไฟล์ แนบภาพ กรุณาอ่านกฎการใช้บอร์ดข้อ 4 ด้านบนครับ :roll:

Re: สอบถามการใช้สูตร

Posted: Fri Sep 15, 2017 6:19 pm
by Tanasan
snasui wrote::D กรุณาแนบไฟล์ที่ทำเองแล้วมาด้วยจะได้ช่วยดูได้ครับ

สูตรที่คุณ logic ตอบไปนั้นสามารถคีย์ในเซลล์เดียวแล้ว Copy ไปใช้กับเซลล์อื่นได้เลย ไม่จำเป็นต้องคีย์สูตรใหม่ทุกเซลล์

การแนบไฟล์ แนบภาพ กรุณาอ่านกฎการใช้บอร์ดข้อ 4 ด้านบนครับ :roll:
ขอโทษด้วยครับ สำหรับการแนบไฟล์

คือผมลองทำกับ 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
:D สูตรควรเป็นตามด้านล่างครับ

=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::D สูตรควรเป็นตามด้านล่างครับ

=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
:D ปรับสูตรใหม่เป็นตามด้านล่างครับ

=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::D ปรับสูตรใหม่เป็นตามด้านล่างครับ

=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 ขอลองทำบ้างครับ