Em muốn code VBA anh ơi!E4=SUMIF(Sheet1!$C$4:$C$275,Sheet2!C4,Sheet1!$E$4:$E$275)
Fill xuống
Sub GPE()
Dim Dic As Object, Tmp As String
Dim i As Long, j As Long, k As Long
Dim Arr, dArr
Arr = Range(Sheet1.[C4], Sheet1.[C4].End(xlDown)).Resize(, 3)
ReDim dArr(1 To UBound(Arr, 1), 1 To 3)
Set Dic = CreateObject("Scripting.Dictionary")
With Dic
For i = 1 To UBound(Arr, 1)
Tmp = Arr(i, 1)
If Not .Exists(Tmp) Then
k = k + 1
.Add Tmp, k
For j = 1 To UBound(Arr, 2)
dArr(k, j) = Arr(i, j)
Next j
Else
dArr(.Item(Tmp), 3) = dArr(.Item(Tmp), 3) + Arr(i, 3)
End If
Next i
End With
Sheet2.Range("C4:C65000").Clear
Sheet2.Range("C4").Resize(k, 3) = dArr
Sheet2.Range("C4:E" & (k + 3)).Borders.LineStyle = 1
End Sub
Để code đơn giản thì bạn chền công thức trong code, sau khi fill ct xong thì thêm 1 dòng để chuyển từ công thức sang valueEm muốn code VBA anh ơi!
Sub run()
Dim i As Integer, last As Integer
last = Sheets("Sheet1").Range("C" & Rows.Count).End(3).Row
For i = 4 To Range("D" & Rows.Count).End(3).Row
Cells(i, 5) = "=SUMIF(Sheet1!$C$" & i & ":$C$" & last & ",Sheet2!C" & i & ",Sheet1!$E$" & i & ": $E$" & last & ")"
Next
Range("E4:E" & Range("D" & Rows.Count).End(3).Row).Value = Range("E4:E" & Range("D" & Rows.Count).End(3).Row).Value
End Sub
[
Em copy code mã trên khi chạy thấy báo lỗi 400 em k hiểu.Bạn thử dùng code này
Mã:Sub GPE() Dim Dic As Object, Tmp As String Dim i As Long, j As Long, k As Long Dim Arr, dArr Arr = Range(Sheet1.[C4], Sheet1.[C4].End(xlDown)).Resize(, 3) ReDim dArr(1 To UBound(Arr, 1), 1 To 3) Set Dic = CreateObject("Scripting.Dictionary") With Dic For i = 1 To UBound(Arr, 1) Tmp = Arr(i, 1) If Not .Exists(Tmp) Then k = k + 1 .Add Tmp, k For j = 1 To UBound(Arr, 2) dArr(k, j) = Arr(i, j) Next j Else dArr(.Item(Tmp), 3) = dArr(.Item(Tmp), 3) + Arr(i, 3) End If Next i End With Sheet2.Range("C4:C65000").Clear Sheet2.Range("C4").Resize(k, 3) = dArr Sheet2.Range("C4:E" & (k + 3)).Borders.LineStyle = 1 End Sub
Bạn thử code này coi. Tận dụng ghi macro. Chạy code Khi đang chọn sheet 2 nhéEm copy code mã trên khi chạy thấy báo lỗi 400 em k hiểu.
Nội dung của em gồm 2 vấn đề:
1. Lọc các dữ liệu trùng nhau trong cột C của Sheet1 sang cột C của Sheet2
2. Tính tổng các dữ liệu giống nhau ở Sheet 1 sang sheet2.
Mong các bác giúp em!
Sub run()
Dim i As Integer, last As Integer
Application.ScreenUpdating = False
last = Sheets("Sheet1").Range("C" & Rows.Count).End(3).Row
Sheets("Sheet1").Range("C4:D" & last).Copy Range("C4")
Range("$C$4:$D$" & last).RemoveDuplicates Columns:=1, Header:=xlNo
For i = 4 To Range("D" & Rows.Count).End(3).Row
Cells(i, 5) = "=SUMIF(Sheet1!$C$4:$C$" & last & ",Sheet2!C" & i & ",Sheet1!$E$4:$E$" & last & ")"
Next
Range("E4:E" & Range("D" & Rows.Count).End(3).Row).Value = Range("E4:E" & Range("D" & Rows.Count).End(3).Row).Value
Application.ScreenUpdating = True
End Sub
Nhờ anh giải thích giúp em dòng này với ạ:Bạn thử code này coi. Tận dụng ghi macro. Chạy code Khi đang chọn sheet 2 nhé
Sory bác giaiphap vì đã xen ngang
Mã:Sub run() Dim i As Integer, last As Integer Application.ScreenUpdating = False last = Sheets("Sheet1").Range("C" & Rows.Count).End(3).Row Sheets("Sheet1").Range("C4:D" & last).Copy Range("C4") Range("$C$4:$D$" & last).RemoveDuplicates Columns:=1, Header:=xlNo For i = 4 To Range("D" & Rows.Count).End(3).Row Cells(i, 5) = "=SUMIF(Sheet1!$C$4:$C$" & last & ",Sheet2!C" & i & ",Sheet1!$E$4:$E$" & last & ")" Next Range("E4:E" & Range("D" & Rows.Count).End(3).Row).Value = Range("E4:E" & Range("D" & Rows.Count).End(3).Row).Value Application.ScreenUpdating = True End Sub
Nhờ anh giải thích giúp em dòng này với ạ:
For i = 4 To Range("D" & Rows.Count).End(3).Row
Cells(i, 5) = "=SUMIF(Sheet1!$C$4:$C$" & last & ",Sheet2!C" & i & ",Sheet1!$E$4:$E$" & last & ")"