Thanks 2 bác nhiệt tình wá


.
em bỏ code bác quanghai1969
Sub tachtach()
Dim data(), Res(1 To 65536, 1 To 3), I, K, X
With Sheet1
data = .Range(.[A2], .[A65536].End(3)).Resize(, 7).Value
End With
For X = 2 To 4
For I = 1 To UBound(data)
If data(I, X) <> "" Then
K = K + 1
Res(K, 1) = data(I, 1)
Res(K, 2) = data(I, X)
Res(K, 3) = data(I, X + 3)
End If
Next
Next
Sheet2.[A2].Resize(K, 3) = Res
End Sub
Thì chạy kết quả chỉ ra HCM
... ko ra mấy cái khác ... Hok biết mình có copy bỏ vào sai gì ko.
Code thứ 2 a đưa em chạy thì nó kêu debug end
... ko phãi dân code nên hok biết nó bị gì luôn.
Nhưng mà theo các anh giải thích thì em hiểu như vầy, ko biết đúng sai... có gì góp ý giúp em nha
Public Sub GPE()
Dim sArr(), dArr(), I As Long, J As Long, K As Long
With Sheet1
sArr = .Range(.[A2], .[A65536].End(xlUp)).Resize(, 7).Value
End With
ReDim dArr(1 To UBound(sArr, 1) * 3, 1 To 3)
For I = 1 To UBound(sArr, 1)
For J = 2 To 4
If sArr(I, J) <> Empty Then
K = K + 1
dArr(K, 1) = sArr(I, 1)
dArr(K, 2) = sArr(I, J)
dArr(K, 3) = sArr(I, J + 3)
End If
Next J
Next I
With Sheet2
.[A2:C50000].ClearContents
If K Then
.[A2].Resize(K, 3) = dArr
.[A2].Resize(K, 3).Sort Key1:=.[A2], Key2:=.[B2]
End If
End With
End Sub
-------------------------
Ở code này,
sArr = .Range(.[A2], .[A65536].End(xlUp)).Resize(,
7).Value
7 là số lượng cột
ReDim dArr(1 To UBound(sArr, 1) * 3, 1 To 3)
3 này là do mình có 3 cột sản phẩm và 3 cột mã
For J = 2 To 4
thì cái này là thứ tự cột mã sp là từ B --> D ( 2 tới 4 ko)
vậy nên từ code trên nếu đổi sang sp có 5 mã và 5 giá thì code thành như vầy
Public Sub GPE()
Dim sArr(), dArr(), I As Long, J As Long, K As Long
With Sheet1
sArr = .Range(.[A2], .[A65536].End(xlUp)).Resize(,
11).Value
End With
ReDim dArr(1 To UBound(sArr, 1) * 5, 1 To 5)
For I = 1 To UBound(sArr, 1)
For J = 2 To 6
If sArr(I, J) <> Empty Then
K = K + 1
dArr(K, 1) = sArr(I, 1)
dArr(K, 2) = sArr(I, J)
dArr(K, 3) = sArr(I, J + 3)
End If
Next J
Next I
With Sheet2
.[A2:C50000].ClearContents
If K Then
.[A2].Resize(K, 3) = dArr
.[A2].Resize(K, 3).Sort Key1:=.[A2], Key2:=.[B2]
End If
End With
End Sub