เวบถาม-ตอบปัญหา Excel http://www.snasui.com/
Group Blog
 
<<
มิถุนายน 2554
 
 1234
567891011
12131415161718
19202122232425
2627282930 
 
30 มิถุนายน 2554
 
All Blogs
 

การแสดงข้อมูลจากฐานข้อมูลตามเงื่อนไขด้วย VBA

ตัวอย่างการดึงข้อมูลจากฐานข้อมูลที่จะนำเสนอต่อไปนี้เป็นการใช้ VBA ในการจัดการ ซึ่งเป็นหนึ่งในหลาย ๆ วิธีครับ โดยมีฐานข้อมูลพนักงานอยู่ที่ชีท Database ส่วนชีท Report จะเป็นการดึงรายชื่อของพนักงานมาแสดงตามแผนกที่เลือกในเซลล์ E2 ของชีท Report
หลังจากนำข้อมูลมาวางแล้วก็กำหนดให้จัดรูปแบบให้ด้วยเพื่อให้มีความสวยงามน่าใช้งาน โดยทำการจัดรูปแบบเฉพาะช่วงที่มีข้อมูลเท่านั้น ดูภาพ Database และ Report ตามด้านล่างครับ
ภาพตัวอย่างฐานข้อมูลพนักงาน
EmpNameByDept
ภาพตัวอย่าง Report ที่ต้องการ
EmpNameByDept1
ภาพแสดงตัวอย่างการทำงาน
ShowDataByCondWithVBA
โดยใช้ Code VBA ดังต่อไปนี้
Smile Code ด้านล่างวางไว้ที่ชีท Report
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$2" And Target <> "" Then
    ShowEmp
ElseIf Target.Address = "$E$2" And Target = "" Then
    MsgBox "Please select data."
End If
End Sub

Smile Code ด้านล่างวางที่ Module ปกติ
Option Explicit
Option Base 1

Sub ShowEmp()
Dim a() As Variant, lng As Long
Dim r As Range, rAll As Range
Dim rt As Range, rl As Long
Application.EnableEvents = False
Application.ScreenUpdating = False
rl = Rows.Count
With Worksheets("Database")
    Set rAll = .Range("F2", .Range("F" & rl).End(xlUp))
End With
For Each r In rAll
    If r = Worksheets("Report").Range("E2") Then
        lng = lng + 1
        ReDim Preserve a(5, lng)
        a(1, lng) = lng
        a(2, lng) = r.Offset(0, -5)
        a(3, lng) = r.Offset(0, -4)
        a(4, lng) = r.Offset(0, -3)
        a(5, lng) = r.Offset(0, -2)
    End If
Next r
If lng > 0 Then
    With Worksheets("Report")
        Set rt = .Range("A5", .Range("E" & lng - 1 + 5))
        .Range("A5", .Range("A" & rl).End(xlUp).Offset(0, 4)).ClearContents
        .Range("A5:E5").Copy
        rt.PasteSpecial xlPasteFormats
        rt = Application.Transpose(a)
        .Range("B5", .Range("B" & rl).End(xlUp)).NumberFormat = "000000"
        .Range(.Range("A5").End(xlDown).Offset(1, 0), .Range("E" & rl)).Clear
        .Range("E2").Activate
    End With
Else
    MsgBox "Data not found."
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

ซึ่งมีหลักการทำงานสำคัญ ๆ ดังนี้
1. นำเซลล์ E2 ในชีท Report ไปเปรียบเทียบกับค่าในคอลัมน์ F ของชีท Database
2. ค่าที่ตรงกันจะเก็บไว้ใน Array
3. นำ Array มาวางที่ชีท Report
4. จัดรูปแบบให้กับรายงานที่ได้
นอกจากการใช้ Array เข้ามาช่วยแล้ว ทางเลือกอื่นในการเขียน Code เช่น สามารถเลือกเขียน Code ให้ทำ Advanced Filter แล้วเลือกเฉพาะข้อมูลที่ต้องการมาแสดงเช่นนี้เป็นต้นครับ Winking smile




 

Create Date : 30 มิถุนายน 2554
2 comments
Last Update : 10 กุมภาพันธ์ 2556 19:34:57 น.
Counter : 10261 Pageviews.

 

อาจารย์ครับผมเข้าเวบ snasui ไม่ได้พอเข้าแล้วจะเด้งออกเลย ผมเลยส่งข้อความสอบถามไม่ได้ครับ

 

โดย: มาโนช IP: 115.67.103.92 26 กันยายน 2555 11:24:00 น.  

 

กรณีมีปัญหาในการใช้งานฟอรัม //www.snasui.com/ สามารถติดต่อผมได้ที่ snasui@gmail.com ครับ

 

โดย: คนควน 26 กันยายน 2555 20:46:53 น.  


คนควน
Location :
สงขลา Thailand

[ดู Profile ทั้งหมด]

ฝากข้อความหลังไมค์
Rss Feed
Smember
ผู้ติดตามบล็อก : 27 คน [?]





MVP Excel



MOS Expert in Excel 2003
MOS Specialist in Excel 2003



คนควน เป็นคน อ.สะเดา จ.สงขลา จบการศึกษาทางด้านการบัญชีระดับปริญญาตรีและปริญญาโท จากมหาวิทยาลัยรามคำแหง มีความถนัดหลายด้าน ทั้งเรื่อง ศิลปะ ดนตรี กีฬา คอมพิวเตอร์ จากการที่ได้คลุกคลีกับโปรแกรมชุด Microsoft Office จึงได้เรียนรู้เกี่ยวกับเทคนิคการใช้งานต่าง ๆ โดยเฉพาะ Excel จะมีความถนัดเป็นพิเศษ เนื่องจากใช้เป็นส่วนใหญ่ในการทำงานประจำวัน ได้รับ MOS Cetificate (Microsoft Office Specialist) ทั้ง Specialist และ Expert อีกทั้งเป็นคนชอบศึกษาค้นคว้าทดลองและชอบแบ่งปัน จึงได้เขียน Blog เพื่อเผยแพร่เทคนิคการใช้งาน Excel เพื่อประโยชน์แก่ผู้สนใจจะได้มีแหล่งศึกษา นำไปประยุกต์ใช้ให้เกิดประโยชน์สูงสุดกับงานของตนเองต่อไป












เมื่อวันที่ 24 ม.ค. 2553 ได้เปิด Forum เพื่อถาม-ตอบปัญหาเกี่ยวกับ Excel ทั้งเป็นแหล่งศึกษาให้กับผู้สนใจทั่วไป สามารถคลิกภาพด้านบนเพื่อไปยัง Forum ได้ครับ



ข้อความหรือรูปภาพที่ปรากฏในกระทู้ที่ท่านเห็นอยู่นี้ เกิดจากการตั้งกระทู้และถูกส่งขึ้นกระดานข่าวโดยอัตโนมัติจากบุคคลทั่วไป ซึ่ง เจ้าของ Blog มิได้มีส่วนร่วมรู้เห็น ตรวจสอบ หรือพิสูจน์ข้อเท็จจริงใด ๆ ทั้งไม่ร่วมรับผิดชอบต่อความคิดเห็นของบุคคลใด ๆ ทั้งสิ้น


Statistics Hits
New Comments
Friends' blogs
[Add คนควน's blog to your web]
Links
 

 Pantip.com | PantipMarket.com | Pantown.com | © 2004 BlogGang.com allrights reserved.