:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser
🪷 คำแสดงเจตนา
ขอผลแห่งการให้ความรู้นี้ จงกลับไปยังผู้ที่เป็นเจ้าของเดิม แม้ข้าพเจ้าจะไม่รู้จักท่านก็ตาม ขอให้แสงแห่งปัญญาที่ท่านเคยจุดไว้ ได้กลับไปเติมเต็มชีวิตของท่านอีกครั้ง และขอให้เจตนาของข้าพเจ้าเป็นการคืนความดีอย่างสงบ

สอบถามการใช้ตัวกรองจากVBA

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: สอบถามการใช้ตัวกรองจากVBA

#21

Post by yodpao.b »

ตอนนี้ผมทำได้แล้วครับแต่มันดูไม่ดีเอาเสียเลยคือมันไม่มีหลักการ
ขั้นตอนการทำดังนี้
-ทำตาม Code Sub ShowEmp() ที่อาจารย์ให้ไว้
-รอบแรกให้ดูข้อแม้ที่ F3 แล้วให้มันกรองข้อมูลจะได้ตารางมาหนึ่งตาราง (ตารางนี้จะมีทุกเดือนของชายคนนี้)
-จากนั้นให้นำตารางที่ได้มาหากรองอีกครั้งโดยข้อแม้ อยู่ที่ E3 (จะได้เฉพาะเดือนที่ต้องการ)
อาจารย์ต้องการทดสอบไหมครับ จะได้มีข้อเสนอแนะให้ผม
User avatar
snasui
Site Admin
Site Admin
Posts: 31176
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สอบถามการใช้ตัวกรองจากVBA

#22

Post by snasui »

:sg:
yodpao.b wrote:อาจารย์ต้องการทดสอบไหมครับ จะได้มีข้อเสนอแนะให้ผม
ไม่ต้องการทดสอบครับ :tt:

ประเด็นคือคุณ yodpao.b ไม่เข้าใจ Code นี้

Code: Select all

 If r = Worksheets("Report").Range("F3") and r.offset(0,100) = Worksheets("Report").Range("F1000") Then
ลองแปลมาให้หน่อยครับจากที่ถามผมในกระทู้อื่น ๆ ซึ่งผมได้อธิบายไปแล้วว่าแต่ละ Code มีความหมายว่าอย่างไร แล้วลองใช้ความเข้าใจนั้นมาใช้อธิบาย Code นี้ หากเข้าใจ Code นี้ได้ก็สามารถเขียนกรองข้อมูลได้ ไม่ต้องทำทีละเงื่อนไข

จากการที่ผมได้ดูการเขียน Code ที่คุณ yodpao.b แนบมาแล้วก็น่าจะสามารถเข้าใจ Code นี้ได้ไม่ยากครับ
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: สอบถามการใช้ตัวกรองจากVBA

#23

Post by yodpao.b »

อาจารย์ครับรบกวนหน่อยครับผมไม่เข้าใจจริงๆ

เช่น r คืออะไร
offset(0,100)ทำไม่ต้องไป offset นี้
Range("F1000") คืออะไร

จะลองแปลให้อาจารย์ดู
If r = Worksheets("Report").Range("F3") หมายถึง ถ้า r เท่ากับ Range("F3") ใน sheets("Report") ให้ทำตามด้านล่าง
User avatar
snasui
Site Admin
Site Admin
Posts: 31176
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สอบถามการใช้ตัวกรองจากVBA

#24

Post by snasui »

อ้างอิงตามด้านล่าง
snasui wrote:
yodpao.b wrote:code นี้เกี่ยวกับเดือนเหรอครับ
ไม่ใช่ครับ
yodpao.b wrote:ลอง run แล้วไม่มีอะไรเกิดขึ้น
ควรจะเป็นเช่นนั้นครับ

ที่เขียนมาให้นั้นเป็นตัวอย่างการปรับเงื่อนไขครับ :aru: ข้างบนก็บอกไว้แล้วครับ ส่วนเงื่อนไขอยู่เซลล์ไหนก็ต้องไปอ้างอิงให้ถูกครับ
ย้ำอีกทีว่าคือตัวอย่าง ซึ่งยังอ้างอิงไม่ตรงกับเซลล์จริง
yodpao.b wrote:อาจารย์ครับรบกวนหน่อยครับผมไม่เข้าใจจริงๆ

เช่น r คืออะไร
offset(0,100)ทำไม่ต้องไป offset นี้
Range("F1000") คืออะไร
r คือตัวแปรหนึ่งครับ และเป็นตัวแปรใน rAll ส่วน rAll คืออะไรดูจากตรงนี้
yodpao.b wrote:

Code: Select all

With Worksheets("ฐานข้อมูลล่วงเวลา")
     Set rAll = .Range("B7", .Range("B" & rl).End(xlUp))
End With
จะเห็นได้ว่า rAll คือช่วงข้อมูลในชีท ฐานข้อมูลล่วงเวลา เซลล์เริ่มต้นคือ B7 และจะสิ้นสุดตรงไหนก็ขึ้นอยู่กับค่าที่ได้จาก .Range("B" & rl).End(xlUp) ซึ่งหมายถึงให้ดูที่เซลล์สุดท้ายของคอลัมน์ B วิ่งไปยังเซลล์ที่มีข้อมูลตัวแรกนับจากด้านล่างขึ้นมา เช่นอาจจะเป็น B20 ความหมายของ .Range("B7", .Range("B" & rl).End(xlUp)) ก็จะได้เป็น B7:B20

และเมื่อเรากำหนดเป็น Set rAll = .Range("B7", .Range("B" & rl).End(xlUp)) ก็แสดงว่า rAll = B7:B20 เช่นนี้เป็นต้น

และจาก Code

Code: Select all

For Each r In rAll
ตัว r ก็คือแต่ละค่าใน B7:B20

และจาก

If r = Worksheets("Report").Range("F3") and r.offset(0,100) = Worksheets("Report").Range("F1000") Then

สมมุติว่า r คือ B7 ก็จะหมายความว่า ถ้า B7 มีค่าเท่ากับ F3 และ ค่าที่ถัดจาก B7 ไป 100 คอลัมน์มีค่าเท่ากับ F1000 แล้ว...

ซึ่งจะเห็นว่าเป็นการเขียนสองเงื่อนไขเข้าไปเลย ไม่ต้องไปทำคนละครั้ง เพียงแต่ที่เขียนให้นี้ยังไม่ตรงกับเซลล์จริงเพราะต้องการให้เข้าใจ สามารถปรับปรุง Code เองได้ การนำไปใช้ก็ต้องปรับให้ตรงกับเซลล์จริงก่อนครับว่าแต่ละเงื่อนไขคือนำค่าใดไปเทียบกับค่าใด
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: สอบถามการใช้ตัวกรองจากVBA

#25

Post by yodpao.b »

อาจารย์ครับอย่างให้อาจาร์ยดูให้หนอย แบบว่า
ในคอลัม C ตั้งแต่แถว11-14 ใช้ตัวกรอง และสูตร ทำทุกอย่างเหมือนกัน
แต่ไม่เข้าใจว่าทำไม C11-C14 รูปแบบวันที่เป็นข้อความแต่ถ้าเข้าไปแก้ฐานข้อมูล
ให้เป็น เดือนอื่น รูปแบบของวันที่ก็เป็นปกติ
หลังจากแก้ไขฐานข้อมูลแล้ว ให้รันซำอีกครั้ง จะเห็นว่าวันที่เป็นปกติ
untitled.GIF
ขั้นตอนการRun
1.เปิดไฟล์ไปที่ชีท Report
2.คลิกเลือกฟอร์ม
3.เลือกเดือนกรกฎาคม
4.เลือกชื่อยอดเผ่า
5.คลิก Go Report
จะแสดงผลดังรูปผม

ต่อไปลองแก้วันที่ทำล่วงเวลา แถว m7-m10 ให้เป็นเดือน 8 วันที่เดิม
กับไปทำข้อ2-5อีกครั้ง
ผมได้แนบไฟล์มาให้อาจาร์ยดูด้วย
อาจารย์ช่วยดูให้หน่อยครับ แก้ไขตรงนี้ได้ก็เสร๊จแล้ว
ขอบคุณครับผม
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31176
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สอบถามการใช้ตัวกรองจากVBA

#26

Post by snasui »

:D ลองเพิ่ม Code เข้าไปบังคับ Format ใน Sub ShowEmp ตามด้านล่างครับ

Code: Select all

'Other code
If lng > 0 Then
    With Worksheets("Report")
        Set rt = .Range("C11", .Range("P" & lng - 1 + 11))
        If .Range("C11") <> "" Then 'Check if isblank
             .Range("C11", .Range("C" & rl).End(xlUp).Offset(0, 14)).ClearContents
        End If
        .Range("C11:P11").Copy
        rt.PasteSpecial xlPasteFormats
        rt = Application.Transpose(a)
        For Each r In rt.Resize(, 1)
            r = FormatDateTime(r, vbLongDate)
        Next r
        .Range(.Range("C10").End(xlDown).Offset(1, 0), .Range("P" & rl)).Clear 'Change new start cell
        'ShowEmpOK
    End With
Else
    MsgBox "                     ไม่มีประวัติ { ชื่อนี้ } ในการทำล่วงเวลาของเดือนนี้ อยู่ในฐานข้อมูล                 "
End If
'Other code
ส่วน ShowEmpOK ถ้าต้องการใช้ก็ต้องเพิ่ม Code เช่นเดียวกัน
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: สอบถามการใช้ตัวกรองจากVBA

#27

Post by yodpao.b »

เรียนอาจารย์ครับ ทำตามแล้วครับได้ผลแล้วครับแต่สงสัยว่า
ก่อนแก้ไขผมทำใน โนต้บุค ไม่เกิดปัญหาเรืองวันที่ แต่พอมาทำในเครื่องตั้งโต๊ะกับเจอปัญหานี้
User avatar
snasui
Site Admin
Site Admin
Posts: 31176
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สอบถามการใช้ตัวกรองจากVBA

#28

Post by snasui »

:shock: ลอง Check Regional and Language ดูว่า Set ไว้เหมือนกันหรือไม่ครับ หากกำหนดไว้เหมือนกัน ตอนนี้ยังเดาไม่ออกว่าเกิดเพราะเหตุใดครับ :tt:
yodpao.b
Gold
Gold
Posts: 1608
Joined: Tue Jul 19, 2011 2:47 pm
Excel Ver: 2013,excel standard

Re: สอบถามการใช้ตัวกรองจากVBA

#29

Post by yodpao.b »

ครับผมเหมือนกันครับ แต่ก็ไม่เป็นไรครับ เพราะใช้ได้แล้ว
Post Reply