Excel มีเครื่องมือสำหรับการนำเฉพาะค่าที่ไม่ซ้ำมาแสดงคือ Data > Remove Duplicates แต่จะทำเช่นนี้ได้ข้อมูลจะต้องอยู่ในชีตเดียวกันเท่านั้น หากข้อมูลอยู่ในหลาย ๆ ชีต แต่ละชีตมีหลายตำแหน่ง จะไม่สามารถใช้เครื่องมือตัวนี้จัดการได้ในทันที จำเป็นต้องใช้ VBA เข้ามาจัดการ ?
Video ด้านล่างนี้เป็นการนำค่าจากหลายชีตและหลายคอลัมน์และมีตำแหน่งไม่แน่นอนมาจัดเรียงใหม่เป็น Database ด้วย VBA โดยข้อมูลที่ซ้ำกันจะนำมาแสดงเพียงค่าเดียว สามารถทำซ้ำได้ตามต้องการ หากเป็นการทำซ้ำโปรแกรมจะทำการลบข้อมูลที่มีอยู่เดิมใน Database ทิ้งไปก่อนแล้วค่อย Loop เพื่อนำค่ามาแสดงใหม่ ตัวอย่าง Code ตามด้านล่างครับ
Sub CollectDataFromMultipleSheets() Dim s As Worksheet, r As Range, d As Object Set d = CreateObject("Scripting.Dictionary") On Error Resume Next For Each s In Worksheets For Each r In s.UsedRange.SpecialCells( _ xlCellTypeConstants) If Not d.Exists(r.Value) Then d.Add r.Value, r.Value End If Next r Next s With Sheets("Sheet1").Application .Range("a:a").ClearContents .Range("a1").Resize(d.Count).Value = _ .Transpose(d.keys) End With End Sub
📹 Video แสดงการนำข้อมูลหลายชีตมาเรียงใหม่เฉพาะค่าที่ไม่ซ้ำ
🧭 Timeline หัวข้อหลัก
- 00:00:13 แนะนำวัตถุประสงค์: รวมข้อมูลจากหลายชีตโดยนำเฉพาะค่าที่ไม่ซ้ำ
- 00:00:36 เปิด VBE และสร้าง Module สำหรับเขียนโค้ด
- 00:01:06 ประกาศตัวแปร: S, R, D โดยใช้ Scripting Dictionary
- 00:01:59 วนลูปเข้าแต่ละชีต ยกเว้นชีตปลายทาง
- 00:02:35 วนลูปเข้าแต่ละเซลล์ในชีตต้นทาง
- 00:03:02 ตรวจสอบค่าซ้ำ: ถ้ายังไม่มี → Add เข้า Dictionary
- 00:03:39 นำค่าที่ไม่ซ้ำจาก Dictionary ไปวางในชีตปลายทาง
- 00:04:32 รันโค้ดและตรวจสอบผลลัพธ์ในคอลัมน์ A