PHUNGUYENHAO
Thành viên mới

- Tham gia
- 9/3/19
- Bài viết
- 8
- Được thích
- 0
Có thể là bạn đang chờ code VBA.Em có mô tả diễn giải trong file kính nhờ các a/c code giúp em giảm bớt thao tác thủ công trong công việc, em cảm ơn nhiều !!!
Mình thấy ở yêu cầu 2 thì kết quả mong muốn và kết quả từ Power Query không khớp nhau.Có thể là bạn đang chờ code VBA.
Tôi nhìn dữ liệu của bạn là tôi muốn sử dụng Power Query ngay rồi.
Bạn tham khảo cách làm bằng Power Query theo file đính kèm.
Code VBA chờ các thành viên khác hỗ trợ nhé!
Chúc bạn cuối tuần vui vẻ.
P/s: Yêu cầu 1 bạn sai ở chỗ CAO THỊ F vì vẫn có giá trị E10.5 nằm trong bảng tham chiếu.
Tôi vừa xem lại, đúng là không giống ở cột Ten_nhom.Mình thấy ở yêu cầu 2 thì kết quả mong muốn và kết quả từ Power Query không khớp nhau.
alo, bạn xem dùm mình lỗi chố task 2 này dùm bạn Error: 5 arguments were passed to function which expects between 2 and 4. Mình sử dung offcie 2016Có thể là bạn đang chờ code VBA.
Tôi nhìn dữ liệu của bạn là tôi muốn sử dụng Power Query ngay rồi.
Bạn tham khảo cách làm bằng Power Query theo file đính kèm.
Code VBA chờ các thành viên khác hỗ trợ nhé!
Chúc bạn cuối tuần vui vẻ.
P/s: Yêu cầu 1 bạn sai ở chỗ CAO THỊ F vì vẫn có giá trị E10.5 nằm trong bảng tham chiếu.
alo, bạn xem dùm mình lỗi chố task 2 này dùm bạn Error: 5 arguments were passed to function which expects between 2 and 4. Mình sử dung offcie 2016Có thể là bạn đang chờ code VBA.
Tôi nhìn dữ liệu của bạn là tôi muốn sử dụng Power Query ngay rồi.
Bạn tham khảo cách làm bằng Power Query theo file đính kèm.
Code VBA chờ các thành viên khác hỗ trợ nhé!
Chúc bạn cuối tuần vui vẻ.
P/s: Yêu cầu 1 bạn sai ở chỗ CAO THỊ F vì vẫn có giá trị E10.5 nằm trong bảng tham chiếu.
Đăng cùng nội dung nhiều lần thế bạn. Người giúp có phải lúc nào cũng ở đây đợi bạn đâu, Chịu khó mà chờ chứ.alo, bạn xem dùm mình lỗi chố task 2 này dùm bạn Error: 5 arguments were passed to function which expects between 2 and 4. Mình sử dung offcie 2016
hai user tra lời nen k bit ai ahĐăng cùng nội dung nhiều lần thế bạn. Người giúp có phải lúc nào cũng ở đây chờ bạn đâu, Chịu khó mà chờ chứ.
Em đi mua dép mới rồi.
Gởi chuyển biếu cho mình đôi cũ của bạn nha; chi phí vận chuyển người nhân chịu, khỏi lăn tănEm đi mua dép mới rồi.
Gặp vụ ngôn ngữ bài #8 em chạy mất dép nên phải đi mua đôi mới đó ạ, để em mua đôi nữa tặng anh.Gởi chuyển biếu cho mình đôi cũ của bạn nha.
Option Explicit
Sub task1()
Dim lr1&, lr2&, i&, j&, k&, rng, arr(1 To 100000, 1 To 6)
Dim ghichu As Range, s, c As Boolean, gc As String
With Sheets("Task1")
lr1 = .Cells(Rows.Count, "A").End(xlUp).Row
rng = .Range("A3:E" & lr1).Value
lr2 = .Cells(Rows.Count, "H").End(xlUp).Row
Set ghichu = .Range("H3:H" & lr2)
End With
For i = 1 To UBound(rng)
c = False: gc = "": s = Split(";" & rng(i, 5), ";")
For j = 1 To UBound(s)
If WorksheetFunction.CountIf(ghichu, s(j)) Then
c = True
gc = IIf(gc = "", s(j), gc & ";" & s(j))
End If
Next
If c Then
k = k + 1: arr(k, 6) = gc
For j = 1 To 5
arr(k, j) = rng(i, j)
Next
End If
Next
With Sheets("ketqua1")
.Range("A2:E2").Value = Sheets("Task1").Range("A2:E2").Value
.Range("A3:F100000").ClearContents
If k > 0 Then .Range("A3").Resize(k, 6).Value = arr
End With
End Sub
Sub task2()
Dim lr1&, lr2&, i&, j&, c&, k&, t&, m&, rng, arr(1 To 100000, 1 To 8)
Dim tc As Range, cell As Range
With Sheets("Task2")
lr1 = .Cells(Rows.Count, "A").End(xlUp).Row
rng = .Range("A3:F" & lr1).Value
lr2 = .Cells(Rows.Count, "I").End(xlUp).Row
Set tc = .Range("I3:I" & lr2)
End With
For i = 1 To UBound(rng)
c = WorksheetFunction.CountIf(tc, rng(i, 6))
If c > 0 Then
k = k + 1: t = 0
For j = 1 To 6
arr(k, j) = rng(i, j)
Next
For Each cell In tc
If cell.Value = rng(i, 6) Then
k = k + 1: t = t + 1: m = m + 1
arr(k, 1) = m: arr(k, 2) = rng(i, 1): arr(k, 3) = rng(i, 3)
arr(k, 4) = rng(i, 4): arr(k, 5) = rng(i, 5): arr(k, 6) = rng(i, 6)
arr(k, 7) = cell.Offset(, 1).Value: arr(k, 8) = cell.Offset(, 2).Value
End If
Next
End If
Next
With Sheets("ketqua2")
.Range("A2:F2").Value = Sheets("Task1").Range("A2:F2").Value
.Range("G2:H2").Value = Array("Ten_nhom", "vi_tri")
.Range("A3:H100000").NumberFormat = "@"
.Range("A3:H100000").ClearContents
If k > 0 Then .Range("A3").Resize(k, 8).Value = arr
End With
End Sub
Giỡn mặt cha nội. Xúi dại người ta gởi đồ bậy bạ, đi tù ai chịu?Gởi chuyển biếu cho mình đôi cũ của bạn nha; chi phí vận chuyển người nhân chịu, khỏi lăn tăn
Đ/c nơi nhận dép cũ: Số 01 Lê Duẫn!
Cảm ơn. Code chạy ok ahBạn đổi tên các sheet có dấu thành không dấu nhé.
Mình đổi tên thành task1 và task2
Tại thêm 2 sheet trống ketqua1 và ketqua2 để lưu kết quả
PHP:Option Explicit Sub task1() Dim lr1&, lr2&, i&, j&, k&, rng, arr(1 To 100000, 1 To 6) Dim ghichu As Range, s, c As Boolean, gc As String With Sheets("Task1") lr1 = .Cells(Rows.Count, "A").End(xlUp).Row rng = .Range("A3:E" & lr1).Value lr2 = .Cells(Rows.Count, "H").End(xlUp).Row Set ghichu = .Range("H3:H" & lr2) End With For i = 1 To UBound(rng) c = False: gc = "": s = Split(";" & rng(i, 5), ";") For j = 1 To UBound(s) If WorksheetFunction.CountIf(ghichu, s(j)) Then c = True gc = IIf(gc = "", s(j), gc & ";" & s(j)) End If Next If c Then k = k + 1: arr(k, 6) = gc For j = 1 To 5 arr(k, j) = rng(i, j) Next End If Next With Sheets("ketqua1") .Range("A2:E2").Value = Sheets("Task1").Range("A2:E2").Value .Range("A3:F100000").ClearContents If k > 0 Then .Range("A3").Resize(k, 6).Value = arr End With End Sub
PHP:Sub task2() Dim lr1&, lr2&, i&, j&, c&, k&, t&, m&, rng, arr(1 To 100000, 1 To 8) Dim tc As Range, cell As Range With Sheets("Task2") lr1 = .Cells(Rows.Count, "A").End(xlUp).Row rng = .Range("A3:F" & lr1).Value lr2 = .Cells(Rows.Count, "I").End(xlUp).Row Set tc = .Range("I3:I" & lr2) End With For i = 1 To UBound(rng) c = WorksheetFunction.CountIf(tc, rng(i, 6)) If c > 0 Then k = k + 1: t = 0 For j = 1 To 6 arr(k, j) = rng(i, j) Next For Each cell In tc If cell.Value = rng(i, 6) Then k = k + 1: t = t + 1: m = m + 1 arr(k, 1) = m: arr(k, 2) = rng(i, 1): arr(k, 3) = rng(i, 3) arr(k, 4) = rng(i, 4): arr(k, 5) = rng(i, 5): arr(k, 6) = rng(i, 6) arr(k, 7) = cell.Offset(, 1).Value: arr(k, 8) = cell.Offset(, 2).Value End If Next End If Next With Sheets("ketqua2") .Range("A2:F2").Value = Sheets("Task1").Range("A2:F2").Value .Range("G2:H2").Value = Array("Ten_nhom", "vi_tri") .Range("A3:H100000").NumberFormat = "@" .Range("A3:H100000").ClearContents If k > 0 Then .Range("A3").Resize(k, 8).Value = arr End With End Sub
Bạn ơi, code chạy rất ok, cảm ơn bạn, tuy nhiên ở yêu cầu task1 bạn có thể hiệu chỉnh thêm dùm mình kết quả rán xuống vùng dữ liệu chỉ lấy những dòng có kết quả trả về, bỏ qua những dòng không trả về kết quả dc tô đỏ như trong hình đính kèm đc k ah, như jay jup tốc độ load dữ liệu xuống vùng kết quả nhanh hơn.Bạn đổi tên các sheet có dấu thành không dấu nhé.
Mình đổi tên thành task1 và task2
Tại thêm 2 sheet trống ketqua1 và ketqua2 để lưu kết quả
PHP:Option Explicit Sub task1() Dim lr1&, lr2&, i&, j&, k&, rng, arr(1 To 100000, 1 To 6) Dim ghichu As Range, s, c As Boolean, gc As String With Sheets("Task1") lr1 = .Cells(Rows.Count, "A").End(xlUp).Row rng = .Range("A3:E" & lr1).Value lr2 = .Cells(Rows.Count, "H").End(xlUp).Row Set ghichu = .Range("H3:H" & lr2) End With For i = 1 To UBound(rng) c = False: gc = "": s = Split(";" & rng(i, 5), ";") For j = 1 To UBound(s) If WorksheetFunction.CountIf(ghichu, s(j)) Then c = True gc = IIf(gc = "", s(j), gc & ";" & s(j)) End If Next If c Then k = k + 1: arr(k, 6) = gc For j = 1 To 5 arr(k, j) = rng(i, j) Next End If Next With Sheets("ketqua1") .Range("A2:E2").Value = Sheets("Task1").Range("A2:E2").Value .Range("A3:F100000").ClearContents If k > 0 Then .Range("A3").Resize(k, 6).Value = arr End With End Sub
PHP:Sub task2() Dim lr1&, lr2&, i&, j&, c&, k&, t&, m&, rng, arr(1 To 100000, 1 To 8) Dim tc As Range, cell As Range With Sheets("Task2") lr1 = .Cells(Rows.Count, "A").End(xlUp).Row rng = .Range("A3:F" & lr1).Value lr2 = .Cells(Rows.Count, "I").End(xlUp).Row Set tc = .Range("I3:I" & lr2) End With For i = 1 To UBound(rng) c = WorksheetFunction.CountIf(tc, rng(i, 6)) If c > 0 Then k = k + 1: t = 0 For j = 1 To 6 arr(k, j) = rng(i, j) Next For Each cell In tc If cell.Value = rng(i, 6) Then k = k + 1: t = t + 1: m = m + 1 arr(k, 1) = m: arr(k, 2) = rng(i, 1): arr(k, 3) = rng(i, 3) arr(k, 4) = rng(i, 4): arr(k, 5) = rng(i, 5): arr(k, 6) = rng(i, 6) arr(k, 7) = cell.Offset(, 1).Value: arr(k, 8) = cell.Offset(, 2).Value End If Next End If Next With Sheets("ketqua2") .Range("A2:F2").Value = Sheets("Task1").Range("A2:F2").Value .Range("G2:H2").Value = Array("Ten_nhom", "vi_tri") .Range("A3:H100000").NumberFormat = "@" .Range("A3:H100000").ClearContents If k > 0 Then .Range("A3").Resize(k, 8).Value = arr End With End Sub
Mình gửi lại file task1 nhờ bạn chỉnh giúp nhe, cảm ơn nhiềuBạn up lại file mới này đi. File cũ không có trường hợp này.
' Them 1 dieu kien: s(j) <>""
If WorksheetFunction.CountIf(ghichu, s(j)) And s(j) <> "" Then
'-----------------------------