Page 4 of 8
Re: ขอความช่วยเหลือบันทึกการทำงานของพนักงานรายวันเป็นฐานข้อม
Posted: Wed Oct 19, 2011 3:00 pm
by suka
อาจารย์คะ เหตุใดจึงสั้นและง่ายปานนี้คะ คนธรรมดามิใช่( ระดับปรมาจารย์ )จะทราบความหมายของคำนี้ " (xlUp) _" ได้อย่างไรคะ
พยายามดูตรงไหนคือการให้คัดลอกสูตรคะ งงมากๆๆค่ะ รบกวนอาจารย์อธิบายหน่อยจะได้ไหมคะ
ขอบพระคุณมากๆๆค่ะ
Re: ขอความช่วยเหลือบันทึกการทำงานของพนักงานรายวันเป็นฐานข้อม
Posted: Wed Oct 19, 2011 3:49 pm
by snasui
snasui wrote: 
ลองปรับ Code เป็นตามด้านล่างครับ
Code: Select all
Sub Macro16()
Range("A" & Rows.Count).End(xlUp) _
.Resize(2, Columns.Count).FillDown
End Sub
จาก Code ด้านบน
การวรรคแล้วตามด้วยเครื่องหมาย _ เป็นการบอกว่าเป็น Code ที่ต่อเนื่องกันแต่เนื่องจากยาวเกินไป จึงให้ตัดเพื่อไปเขียนต่อในบรรทัดถัดไป หากไม่จำเป็นต้องขึ้นบรรทัดใหม่สามารถเขียนได้เป็น
Code: Select all
Sub Macro16()
Range("A" & Rows.Count).End(xlUp).Resize(2, Columns.Count).FillDown
End Sub
ความหมายคือ ให้เริ่มจากคอลัมน์ A รายการล่างสุดแล้วปรับขนาดเป็นสูง 2 บรรทัด ก็จะได้บรรทัดที่มีข้อมูลและบรรทัดว่าง โดยขยายความกว้างเท่ากับจำนวนคอลัมน์ทั้่งหมดแล้ว Copy ค่าแรกลงมาด้านล่าง
Re: ขอความช่วยเหลือบันทึกการทำงานของพนักงานรายวันเป็นฐานข้อม
Posted: Wed Oct 19, 2011 5:50 pm
by suka
ขอบคุณค่ะอาจารย์ ทั้งสอนทั้งอธิบาย พอจะเข้าใจสิ่งที่อาจารย์สอนและลองนำมาใช้กับชีท PrinReport แทรกแถวได้ตามต้องการ
หากแต่ติดที่เซลล์ BR4:BW4 ต้องการให้สูตรรวมยอดจากบรรทัดที่แทรกเข้ามาใหม่ต้วยค่ะ อาจารย์คะสูตรควรต้องปรับอย่างไรคะ
ขอบพระคุณมากๆๆค่ะ
Re: ขอความช่วยเหลือบันทึกการทำงานของพนักงานรายวันเป็นฐานข้อม
Posted: Wed Oct 19, 2011 6:09 pm
by snasui

ไม่เข้าใจครับ ช่วยทำตัวอย่างคำตอบที่ต้องการมาด้วยครับ
Re: ขอความช่วยเหลือบันทึกการทำงานของพนักงานรายวันเป็นฐานข้อม
Posted: Wed Oct 19, 2011 7:12 pm
by suka
อาจารย์คะ หมายถึงสูตรที่ชีท PrinReport เซลล์ BR4:BW4 ค่ะ
ยกตัวอย่างที่เซลล์ BR4 ก่อนคลิกแทรกบรรทัดมีตัวเลข18 ขณะที่ยังไม่คลิกเพิ่มบรรทัดสูตรที่เซลล์ BR4 จะเป็น =SUM(BR7:BR10)บรรทัดที่แทรกมาใหม่ในเซลล์ใหม่มีตัวเลข 8 เท่ากับที่เซลล์ BR4 ต้องได้ 26 ค่ะ หลังคลิกเพื่มอีกหนึ่งบรรทัด
ต้องการให้สูตรเซลล์ BR4 เปลี่ยนเป็น =SUM(BR7:BR11) หลังคลิกแทรกบรรทัด ไม่ทราบว่าพอจะเป็นไปได้ไหมคะ
ขอบคุณค่ะ
Re: ขอความช่วยเหลือบันทึกการทำงานของพนักงานรายวันเป็นฐานข้อม
Posted: Wed Oct 19, 2011 7:29 pm
by snasui

ถ้าเขียนสูตรไว้ล่วงหน้าเป็น
=SUM(BR7:BR65536)
เพื่อรองรับข้อมูลเท่าที่มี จะมีประเด็นอะไรไหมครับ
Re: ขอความช่วยเหลือบันทึกการทำงานของพนักงานรายวันเป็นฐานข้อม
Posted: Thu Oct 20, 2011 11:22 am
by suka
ค่ะอาจารย์ ลืมนึกถึงเรื่องเขียนสูตรไว้ล่วงหน้าเพื่อรองรับข้อมูลเลยค่ะ
หากจะขอเรียนถามถึงประเด็นใหม่ จากไฟล์ตัวอย่างที่ชืท PrinReport ตรง(ปุ่มแทรกบรรทัด)ขออาจารย์ช่วยด้วยเรื่องปรับ Code นี้
Code: Select all
Range("A" & Rows.Count).End(xlUp).Resize(2, Columns.Count).FillDown
จากเดิมที่แทรกบรรทัดต่อจากด้านล่างสุดของบรรทัดสุดท้าย เปลี่ยนเป็น แทรกเหนือบรรทัดสุดท้ายคือแทรกด้านบนแทน พอจะเป็นไปได้ไหมคะ หากได้ก็จะหมดปัญหาเรื่องต้องเขียนสูตรล่วงหน้าและยังช่วยเรื่องที่ได้กำหนดพื้นที่พิมพ์รายงานด้วยค่ะ
ขอบคุณค่ะ
Re: ขอความช่วยเหลือบันทึกการทำงานของพนักงานรายวันเป็นฐานข้อม
Posted: Thu Oct 20, 2011 12:11 pm
by snasui

หากไม่มีประเด็นในการเขียนสูตรไว้รองรับข้อมูลก็ไม่จำเป็นต้องแทรกบรรทัดครับ หากต้องการแทรก ลองเขียน Macro แล้วนำ Code มาปรับใช้ ติดตรงไหนก็มาถามกันต่อ ทุกครั้งที่มีปัญหาใหม่ ขอให้ลองทำเองก่อนครับ
Re: ขอความช่วยเหลือบันทึกการทำงานของพนักงานรายวันเป็นฐานข้อม
Posted: Thu Oct 20, 2011 4:45 pm
by suka
อาจารย์คะ ได้ลองบันทึก Macro ผลคือแทรกบรรทัดใด้แต่การคัดลอกสูตรจะซ้ำที่เดิมไม่ขยับตามบรรทัดที่แทรกค่ะ
Code: Select all
Sub Macro14()
Selection.EntireRow.Insert
Range("A9:CF9").Select
Selection.AutoFill Destination:=Range("A9:CF10"), Type:=xlFillDefault
Range("A9:CF10").Select
End Sub
มารบกวนขออาจารย์ช่วยเหลือค่ะ ขอบคุณค่ะ
Re: ขอความช่วยเหลือบันทึกการทำงานของพนักงานรายวันเป็นฐานข้อม
Posted: Thu Oct 20, 2011 5:13 pm
by snasui

ลองทดสอบ Code ตามด้านล่างดูครับ
Code: Select all
Sub Macro14()
Range("A" & Rows.Count).End(xlUp).EntireRow.Insert
Range("A2").End(xlDown).Resize(2, Columns.Count).FillDown
End Sub
Re: ขอความช่วยเหลือบันทึกการทำงานของพนักงานรายวันเป็นฐานข้อม
Posted: Thu Oct 20, 2011 6:10 pm
by suka
อาจารย์คะ รบกวนอีกแล้วค่ะไม่ทราบว่าทำอะไรผิดพลาดวาง Code ผิดที่หริออย่างไรก็มิทราบค่ะ
ได้นำ Code ไปวางที่ Module4 ชื่อ Button36_click ปุ่มแทรกบรรทัด ที่ชีท PrinReport ผลคือแทรกบรรทัดแต่ไม่คัดลอกสูตรให้ค่ะ
ขอบคุณค่ะ
Re: ขอความช่วยเหลือบันทึกการทำงานของพนักงานรายวันเป็นฐานข้อม
Posted: Thu Oct 20, 2011 9:55 pm
by snasui

ปรับ Code ที่บรรทัดนี้
Code: Select all
Range("A2").End(xlDown).Resize(2, Columns.Count).FillDown
เป็น
Code: Select all
Range("A6").End(xlDown).Resize(2, Columns.Count).FillDown
Re: ขอความช่วยเหลือบันทึกการทำงานของพนักงานรายวันเป็นฐานข้อม
Posted: Fri Oct 21, 2011 9:04 am
by suka
ขอบพระคุณมากค่ะอาจารย์ ลองแล้วได้ตรงตามที่ต้องการเลยค่ะ
Re: ขอความช่วยเหลือบันทึกการทำงานของพนักงานรายวันเป็นฐานข้อม
Posted: Tue Oct 25, 2011 10:11 pm
by suka
อาจารย์คะ ขอเรียนถามจากไฟล์ตัวอย่างได้ขยายข้อมูลที่ชีท Form แล้วที่ชีท Template เกิดเป็น #REF! ได้แก้ที่เซลล์ U1:V1 ของชีท Template เพื่อให้ทราบจำนวนบรรทัดและคอลัมน์ ก็ยังไม่สามารถแก้ได้ ที่ถูกควรต้องแก้จุดใดคะ
ขอบคุณค่ะ
Re: ขอความช่วยเหลือบันทึกการทำงานของพนักงานรายวันเป็นฐานข้อม
Posted: Tue Oct 25, 2011 11:57 pm
by snasui

เกิดจากการนำตำแหน่งข้อมูลที่อยู่นอกช่วงข้อมูลมาแสดง ยกตัวอย่างเช่น
=Index(A1:A12,50)
การคีย์สูตรเช่นนี้จะเกิด Error #Ref! เพราะช่วงข้อมูล A1:A12 มีแค่ 12 ข้อมูล แต่ให้นำข้อมูลลำดับที่ 50 มาแสดง จึงไม่สามารถนำมาแสดงได้เพราะอยู่นอกช่วงข้อมูล
กรณีนี้จึงต้องเปลี่ยนช่วงข้อมูลที่สูตร Index เสียใหม่ให้ครอบคลุมถึงช่วงข้อมูลทั้งหมด เช่นที่ E98 สูตรเดิมคือ
=IF(ROWS(E$2:E98)>$W$1,"",INDEX(
Form!$D$5:$D$12,INT((ROWS(E$2:E98)-1)/$V$1)+1))
ลองปรับเป็น
=IF(ROWS(E$2:E98)>$W$1,"",INDEX(
Form!$D$5:$D$1200,INT((ROWS(E$2:E98)-1)/$V$1)+1))
Re: ขอความช่วยเหลือบันทึกการทำงานของพนักงานรายวันเป็นฐานข้อม
Posted: Wed Oct 26, 2011 11:22 am
by suka
ขอบคุณค่ะอาจารย์ ที่ชีท Template แก้เรียบร้อยแล้วค่ะ
มีอีกหนึ่งจุดต้องขอคำแนะนำเพิ่มค่ะ ที่ชีท Employee Data เซลล์ G5 ได้ใส่สูตร =LOOKUP(5,1/(Database!$E$2:$E$65536=$D14),Database!$I$2:$I$65536)
เพื่อต้องการดึงค่าแรงที่เป็นข้อมูลล่าสุดมาแสดงที่ชีท Employee Data เซลล์ G5 ปัญหาคือหากที่ชีท Database ยังไม่มีข้อมูลของพนักงานเข้าใหม่
ที่ชืท Form เซลล์ G5 จะเป็น #N/A จุดนี้ยังไม่สามารถแก้ได้ค่ะ
และอีกหนึ่งคำถามไม่ทราบว่าการใช้สูตรนี้ดึงค่าแรงที่มีการปรับเป็นระยะแบบนี้เป็นวิธีที่ถูกต้องไหมค่ะ
ขอบคุณค่ะ
Re: ขอความช่วยเหลือบันทึกการทำงานของพนักงานรายวันเป็นฐานข้อม
Posted: Wed Oct 26, 2011 11:32 am
by snasui

ลองตามนี้ครับ
ที่ชีท Employee Data เซลล์ G2 คีย์
=LOOKUP(9.99999999999999E+307,CHOOSE({1,2},0,LOOKUP(2,1/(Database!$E$2:$E$65536=$D2),Database!$H$2:$H$65536)))
Enter > Copy ลงด้านล่าง
Re: ขอความช่วยเหลือบันทึกการทำงานของพนักงานรายวันเป็นฐานข้อม
Posted: Wed Oct 26, 2011 12:02 pm
by suka
อาจารย์คะ จากสูตรด้านบนมีข้อสงสัย ({1,2} และ (2,1/ ขอทราบความหมายทำไมต้องเป็น({1,2} และ (2,1/ ค่ะ
และจะนำมาปรับมาใช้กับชีท Employee ที่เซลล์ H2 ซึ่งเป็นค่าแรง OT จะใช้อย่างไรได้ถูกต้องค่ะ
ขอบคุณค่ะ
Re: ขอความช่วยเหลือบันทึกการทำงานของพนักงานรายวันเป็นฐานข้อม
Posted: Wed Oct 26, 2011 12:19 pm
by snasui

สำหรับ Lookup(2,1/(...),...) ทำความเข้าใจได้จากที่นี่ครับ
http://snasui.blogspot.com/2009/12/blog-post_4428.html
ส่วนสูตร
=Lookup(9.99999999999999e307,Choose({1,2},0,Num))
เมื่อแกะสูตรจะได้เป็น
=Lookup(9.99999999999999e307,{0,Num})
หาก Num เป็น ค่าผิดพลาดจะนำ 0 มาแสดง
สังเกตว่า Choose จะช่วยทำให้ 0 และ Num เข้ามาเป็นค่าคงที่ Array อยู่ในเครื่องหมายปีกกาในฟังก์ชั่น Lookup
Re: ขอความช่วยเหลือบันทึกการทำงานของพนักงานรายวันเป็นฐานข้อม
Posted: Wed Oct 26, 2011 3:15 pm
by suka
อาจารย์คะ ตาม Link ด้านบนอ่านอยู่หลายรอบก็ยังงงๆอยู่
ลองทำจากที่เข้าใจหากนำสูตรที่ชีท Employee Data เซลล์ G2 คีย์ปรับเปลี่ยนแค่ค่าที่ต้องการให้ค้นหาเท่านั้น ปรับมาใช้กับชีท Employee ที่เซลล์ H2 ซึ่งเป็นค่า OT
แก้เป็น=LOOKUP(9.99999999999999E+307,CHOOSE({1,2},0,LOOKUP(2,1/(Database!$E$2:$E$65536=$D2),Database!$I$2:$I$65536))) ไม่ทราบว่าเข้าใจถูกต้องหรือไม่คะ
ขอบคุณค่ะ