
เนื่องจากที่ถามมานั้น มีการแบ่ง Code มาในลักษณะขาดบ้างเกินบ้าง หากอธิบายไปตามนั้นอาจจะทำให้สับสนได้ ผมจึงนำมาอธิบายใหม่ตามด้านล่าง
เป็นการกำหนดให้โปรแกรมไม่ Run Event ที่เป็นผลจากการ Run Code นี้
Code: Select all
Application.ScreenUpdating = False
เป็นการกำหนดให้หน้าจอไม่วูบวาบขณะ Run Code
เป็นการกำหนดค่าให้กับตัวแปร rl ว่าให้มีค่าเท่ากับจำนวนบรรทัดทั้งหมด
Code: Select all
With Worksheets("ฐานข้อมูลล่วงเวลา")
Set rAll = .Range("B7", .Range("B" & rl).End(xlUp))
End With
เป็นการกำหนดช่วงข้อมูลให้กับตัวแปร rAll
Code: Select all
For Each r In rAll
If r = Worksheets("Report").Range("F3") Then
lng = lng + 1
ReDim Preserve a(13, lng)
a(1, lng) = r.Offset(0, 11)
a(2, lng) = r.Offset(0, 4)
a(3, lng) = r.Offset(0, 6)
a(4, lng) = r.Offset(0, 7)
a(5, lng) = r.Offset(0, 13)
a(6, lng) = r.Offset(0, 14)
a(7, lng) = r.Offset(0, 15)
a(8, lng) = r.Offset(0, 16)
a(9, lng) = r.Offset(0, 17)
a(10, lng) = r.Offset(0, 18)
a(11, lng) = r.Offset(0, 19)
a(12, lng) = r.Offset(0, 20)
'a(13, lng) = r.Offset(0, 22)
End If
Next r
เป็นการกำหนดค่าให้กับตัวแปร Array a ซึ่งต้องเข้าใจ Array ก่อนถึงจะทำความเข้าใจ Code นี้ได้ สำหรับ Array นี้เป็นแบบ 2 มิติคือมีทั้ง Row และ Column
จากตัวอย่างด้านบน a(1, lng) = r.Offset(0, 11) หมายถึง ให้ Array a แถวที่หนึ่ง คอลัมน์ที่ได้จากค่า lng มีค่าเท่ากับ ค่าที่ถัดไปจากตัวแปร r ทางด้านขวา 11 คอลัมน์
Code: Select all
If lng > 0 Then
With Worksheets("Report")
Set rt = .Range("C11", .Range("N" & lng - 1 + 11))
If .Range("C11") <> "" Then 'Check if isblank
.Range("C11", .Range("C" & rl).End(xlUp).Offset(0, 12)).ClearContents
End If
.Range("C11:N11").Copy
rt.PasteSpecial xlPasteFormats
rt = Application.Transpose(a)
'.Range("B5", .Range("B" & rl).End(xlUp)).NumberFormat = "000000"
.Range(.Range("C10").End(xlDown).Offset(1, 0), .Range("N" & rl)).Clear 'Change new start cell
' .Range("F3").Select
End With
Else
MsgBox "Data not found."
End If
หมายถึงให้ดูว่าตัวแปร lng มีค่ามากกว่า 0 หรือไม่ หากมากกว่า 0 ก็ให้ Run Statement ด้านล่าง
Code: Select all
With Worksheets("Report")
Set rt = .Range("C11", .Range("N" & lng - 1 + 11))
If .Range("C11") <> "" Then 'Check if isblank
.Range("C11", .Range("C" & rl).End(xlUp).Offset(0, 12)).ClearContents
End If
.Range("C11:N11").Copy
rt.PasteSpecial xlPasteFormats
rt = Application.Transpose(a)
'.Range("B5", .Range("B" & rl).End(xlUp)).NumberFormat = "000000"
.Range(.Range("C10").End(xlDown).Offset(1, 0), .Range("N" & rl)).Clear 'Change new start cell
' .Range("F3").Select
End With
แต่หากไม่มากกว่า 0 ให้แสดงข้อความ Data not found
จาก Code ด้านบนหลัก ๆ จะเป็นการ
1. กำหนดค่าให้กับตัวแปร rt และตรวจสอบว่า C11 เป็นค่าว่างหรือไม่ หากเป็นค่าว่างก็ให้ทำการ Cleare ช่วงข้อมูล นับจาก C11 โดยมีความสูงเท่าที่มีข้อมูลและความกว้าง 12 คอลัมน์
2. ให้ Copy ค่าในช่วง C11:N11 แล้ววางเฉพาะ Format ให้กับตัวแปร rt
3. ให้ตัวแปร rt มีค่าเท่ากับค่าของ Array a
ในลักษณะสลับแกนตั้งเป็นแกนนอน