
ลองปรับ Code เป็นตามนี้ครับ
Code: Select all
Sub Copy_2()
Dim r As Range, rAll As Range
With Sheets("Sheet1")
Set rAll = .Range("A1", .Range("A" & Rows.Count).End(xlUp))
End With
For Each r In rAll
Select Case r.Value
Case "UCELLCAC"
Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp). _
Offset(1, 0).EntireRow = r.EntireRow.Value
Case "UCELLHCS"
Sheets("Sheet3").Range("A" & Rows.Count).End(xlUp). _
Offset(1, 0).EntireRow = r.EntireRow.Value
Case "UCELLDRD"
Sheets("Sheet4").Range("A" & Rows.Count).End(xlUp) _
.Offset(1, 0).EntireRow = r.EntireRow.Value
Case "UCELLINTERFREQHOCOV"
Sheets("Sheet5").Range("A" & Rows.Count).End(xlUp) _
.Offset(1, 0).EntireRow = r.EntireRow.Value
Case "UCELLINTERRATHOCOV"
Sheets("Sheet6").Range("A" & Rows.Count).End(xlUp) _
.Offset(1, 0).EntireRow = r.EntireRow.Value
Case "UCELLINTRAFREQHO"
End Select
Next r
End Sub
จากที่ถามมานี้แสดงว่ายังไม่เข้าใจในคำตอบในกระทู้ก่อนหน้าที่ถามมา
การ Loop ตามที่ถามมานี้มีข้อจำกัดว่าจะต้องรู้ว่ามีกี่ค่าเพื่อจะนำไปวางตาม Sheet ต่าง ๆ
สมมุติว่ามีเป็นหมื่นค่าก็ต้องเขียน Case กันเป็นหมื่นรอบ แต่สิ่งที่ผมแนะนำไปในกระทู้ก่อนคือ
ให้หาค่า Unique มาก่อน แล้วนำค่า Unique นั้นมา Loop จะเจอกี่ค่าก็ไม่มีปัญหา เจอค่า Unique หมื่นค่าก็ Loop ใส่หมื่นชีท
หากรายการจากฐานข้อมูลมีจำนวนมาก การ Loop ลักษณะเช่น Code ด้านบนนี้จะเสียเวลามาก จะซึ่งผมแนะนำให้ใช้ Advanced Filter เข้ามาช่วย ซึ่งจะทำงานได้เร็วกว่ากันมาก
สิ่งที่ควรทราบอีกอย่างคือ การบันทึก Macro กับการเขียน VBA Code นั้นไม่เหมือนกัน การบันทึก Macro คือให้โปรแกรมสร้างรหัสมาให้ตามการกระทำของเรา แล้วค่อยนำรหัสมาประยุกต์ใช้ แต่การเขียน VBA จะต้องเขียนลงไปเอง ซึ่งประการหลังจะต้องรู้ OOP ของ Excel มาบ้าง