หากต้องการให้แสดงอย่างในรูป ลองรันโค้ดนี้ครับ
Code: Select all
Public Sub Search_II()
Dim r As Range, vPO As Variant _
, l2 As Long, l3 As Long, i As Long _
, m As Integer, n As Integer
With Sheets("sheet2")
.Range("a2:h" & .Rows.Count).Clear
End With
'Find total row of PO
With Sheets("sheet3")
l3 = .Range("b" & .Rows.Count).End(xlUp).Row
End With
'Loop...start
For i = 2 To l3
With Sheets("sheet2")
vPO = Sheets("sheet3").Cells(i, 2).Value
l2 = .Range("b" & .Rows.Count).End(xlUp).Row + 1
.Cells(l2, 1).Value = vPO
.Cells(l2, 1).Interior.Color = .Cells(1, 1).Interior.Color
End With
With Sheets("sheet1")
Set r = .Range("a1")
m = WorksheetFunction.CountIf(.Range("a:a"), vPO)
n = 0
Do While n < m
Set r = .Range("a:a").Find(What:=vPO, After:=r, LookIn:=xlValues _
, lookat:=xlPart, searchorder:=xlByRows, searchdirection:=xlNext _
, MatchCase:=False)
r.Offset(0, 1).Resize(1, 7).Copy
l2 = Sheets("sheet2").Range("b" & Sheets("sheet2").Rows.Count). _
End(xlUp).Row + 1
Sheets("sheet2").Cells(l2, 2).PasteSpecial xlPasteValues
Sheets("sheet2").Cells(l2, 2).PasteSpecial xlPasteFormats
n = n + 1
Loop
End With
Next i
Application.CutCopyMode = False
End Sub
ที่โค้ดยาวไปหน่อยเพราะเผื่อกรณีรายการสินค้าใน Sheet1 ของใบสั่งซื้อเดียวกันไม่ได้เรียงติดกันผมเลยใช้คำสั่ง
Find ดักไว้ครับ และหากข้อมูลจริงมีเยอะมากก็อาจใส่คำสั่ง
Application.Calculation=xlCalculationManual ก่อนเริ่มลูป และ
Application.Calculation=xlCalculationAutomatic ตอนจบลูป
เข้าไปด้วยเพื่อให้โค้ดทำงานเร็วขึ้นครับ