nếu bạn không chê làm bàng VBA thì hãy copy và paste vào modul1 và chạy thử.Nhờ các anh chị em giúp đỡ dùng công thức gì để theo file đính kèm. Xin cảm ơn nhiều.
Sub NhanHang()
Dim I&, J&, R&, k&, t&, Lr
Dim Arr(), KQ()
Dim dic As Object
With Sheet1
Lr = .Cells(Rows.Count, 1).End(xlUp).Row
Arr = .Range("A2:A" & Lr).Value
R = UBound(Arr, 1)
ReDim KQ(1 To R * 7, 1 To 1)
Set dic = CreateObject("Scripting.Dictionary")
For I = 1 To R
DK = Arr(I, 1)
If Not dic.exists(DK) Then
t = t + 1
dic.Add (DK), t
For J = 7 To 1 Step -1
k = t * 7 - J
KQ(k + 1, 1) = Arr(I, 1)
Next J
End If
Next I
If t Then
.[E2].Resize(t * 7, 1) = KQ
' .[K2].Resize(t * 7, 1).Borders.LineStyle = 1
End If
End With
Set dic = Nothing
End Sub
Với yêu cầu này thì đâu cần dùng Dic .nếu bạn không chê làm bàng VBA thì hãy copy và paste vào modul1 và chạy thử.
kết quả trả về ở cột E từ E2 xuống khoảng gần 65k dòng
Mã:Sub NhanHang() Dim I&, J&, R&, k&, t&, Lr Dim Arr(), KQ() Dim dic As Object With Sheet1 Lr = .Cells(Rows.Count, 1).End(xlUp).Row Arr = .Range("A2:A" & Lr).Value R = UBound(Arr, 1) ReDim KQ(1 To R * 7, 1 To 1) Set dic = CreateObject("Scripting.Dictionary") For I = 1 To R DK = Arr(I, 1) If Not dic.exists(DK) Then t = t + 1 dic.Add (DK), t For J = 7 To 1 Step -1 k = t * 7 - J KQ(k + 1, 1) = Arr(I, 1) Next J End If Next I If t Then .[E2].Resize(t * 7, 1) = KQ ' .[K2].Resize(t * 7, 1).Borders.LineStyle = 1 End If End With Set dic = Nothing End Sub
Public Sub GPE()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long
With Sheet1
sArr = .Range("A2", .Range("A2").End(xlDown)).Value
R = UBound(sArr)
ReDim dArr(1 To R * 7, 1 To 2)
For I = 1 To R
For J = 1 To 7
K = K + 1
dArr(K, 1) = sArr(I, 1)
dArr(K, 2) = "FA0" & J
Next J
Next I
.Range("E2").Resize(K, 2) = dArr
End With
End Sub
Tôi nghĩ là dữ liệu nhiều như vậy thì có thể có trùng nên dùng Dic để loại bỏ trùng mà.Với yêu cầu này thì đâu cần dùng Dic .
PHP:Public Sub GPE() Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long With Sheet1 sArr = .Range("A2", .Range("A2").End(xlDown)).Value R = UBound(sArr) ReDim dArr(1 To R * 7, 1 To 2) For I = 1 To R For J = 1 To 7 K = K + 1 dArr(K, 1) = sArr(I, 1) dArr(K, 2) = "FA0" & J Next J Next I .Range("E2").Resize(K, 2) = dArr End With End Sub
Cũng là "lo xa"? Người ta đâu có yêu cầu bỏ trùng:Tôi nghĩ là dữ liệu nhiều như vậy thì có thể có trùng nên dùng Dic để loại bỏ trùng mà.
Muốn kết quả là: nhân cell a2 thành 7 hàng giống nhau và tiếp tục là a3... |
Làm tương tựEm chào các anh, cùng câu hỏi nhưng em muốn thay vì tạo ra 7 dòng khác nhau. Em cần tạo ra số dòng theo 1 cột số lượng bên cạnh thì sao ạ. em cảm ơn nhiều!
For J = 1 To .range("B"&i).valueEm cần thêm chỗ này ạ, ví dụ: 114284 cần 2 dòng, 114285 cần 3 dòng,.... Em cảm ơn !
View attachment 268474
Tại sao có những dòng không có số lượng?Em bị lỗi như này ạ. mong anh giúp đỡ
View attachment 268478
Dữ liệu và kết quả ở sheet2Đây a xem giúp em! Em chỉ ví dụ lấy 5 dòng đầu tiên thử thôi á
Sub ABC()
Dim sArr(), res(), eRow&, sRow&, i&, r&, k&
With Sheet2
eRow = .Range("B" & Rows.Count).End(xlUp).Row
If eRow < 2 Then MsgBox ("Khong co du lieu!"): Exit Sub
sArr = .Range("A2:B" & eRow).Value
ReDim res(1 To Application.Sum(Range("B2:B" & eRow)), 1 To 1)
sRow = UBound(sArr)
For i = 1 To sRow
For r = 1 To sArr(i, 2)
k = k + 1
res(k, 1) = sArr(i, 1)
Next r
Next i
.Range("E2").Resize(k) = res
End With
End Sub
Chân thành cảm ơn anh, em tìm hơn tháng nay mới tìm được anh giúp đỡ. Cảm ơn anh rất nhiều, chúc anh cuối tuần vui vẻ!!!Dữ liệu và kết quả ở sheet2
Mã:Sub ABC() Dim sArr(), res(), eRow&, sRow&, i&, r&, k& With Sheet2 eRow = .Range("B" & Rows.Count).End(xlUp).Row If eRow < 2 Then MsgBox ("Khong co du lieu!"): Exit Sub sArr = .Range("A2:B" & eRow).Value ReDim res(1 To Application.Sum(Range("B2:B" & eRow)), 1 To 1) sRow = UBound(sArr) For i = 1 To sRow For r = 1 To sArr(i, 2) k = k + 1 res(k, 1) = sArr(i, 1) Next r Next i .Range("E2").Resize(k) = res End With End Sub