ความยุ่งยากสำคัญอีกประการหนึ่งของผู้ทำรายงาน คือการทำรายงานจากรายงานที่ได้รับมาจากผู้อื่น เนื่องจากข้อมูลที่ได้รับมาส่วนใหญ่จะเป็นรายงานเช่นกัน หากรูปแบบไม่ตรงกันทุกประการจะเกิดความยุ่งยาก เพื่อให้ทำรายงานได้โดยง่าย ควรแปลงรายงานที่ได้รับมาให้เป็น Database เสียก่อน ?
Video ด้านล่างนี้เป็นการสาธิตการใช้ VBA แปลงรายงานที่อยู่ในหลาย ๆ ชีต มีคอลัมน์และบรรทัดไม่เท่ากันมาเป็น Database เสียใหม่ เพื่อให้สะดวกต่อการทำรายงานในทอดถัดไป สามารถทำซ้ำได้ตามต้องการ หากมีการทำซ้ำโปรแกรมจะลบข้อมูลใน Database ทิ้งไปก่อนแล้วทำการเก็บข้อมูลมาเรียงใหม่ โดยมีตัวอย่าง Code ตามด้านล่างครับ
Sub CollectData()
Dim r As Range, s As Worksheet
With Sheets("Database")
.UsedRange.ClearContents
.Range("a1:d1").Value = Array("CC", "Pd", "Mth", "Val")
End With
For Each s In Worksheets
If s.Name <> "Database" Then
For Each r In s.UsedRange.SpecialCells(xlCellTypeConstants, 1)
With Sheets("Database").Range("a" & Rows.Count) _
.End(xlUp).Offset(1, 0)
.Offset(0, 0).Value = s.Name
.Offset(0, 1).Value = s.Cells(r.Row, 1).Value
.Offset(0, 2).Value = s.Cells(1, r.Column).Value
.Offset(0, 3).Value = r.Value
End With
Next r
End If
Next s
End Sub
📹 Video แสดงการแปลง Report ไปเป็น Database
🧭 Timeline หัวข้อหลัก
- 0:16 แนะนำวัตถุประสงค์: แปลงข้อมูลรายงานให้เป็นฐานข้อมูล
- 0:37 วิเคราะห์ข้อมูลต้นทาง: cost center, product, ยอดขายรายเดือน
- 1:15 โครงสร้างฐานข้อมูลปลายทาง: cost center, product, month, amount
- 1:30 เปิด VBE และสร้าง Module สำหรับเขียนโค้ด
- 2:26 ล้างข้อมูลเก่าในชีต database ก่อนรันใหม่
- 3:04 สร้างหัวคอลัมน์ในชีต database ด้วย Array
- 3:33 Loop เข้าแต่ละชีตเพื่อดึงข้อมูล
- 4:01 ข้ามชีต database เพื่อไม่ให้วนซ้ำ
- 4:30 Loop เข้าแต่ละเซลล์ที่เป็นตัวเลขยอดขาย
- 5:02 วางข้อมูลในชีต database: cc, product, month, amount
- 6:19 รันโค้ดและตรวจสอบผลลัพธ์
- 6:44 สรุป: ได้ข้อมูลรวมจากทุกชีตในรูปแบบฐานข้อมูล

