- Tham gia
- 30/7/20
- Bài viết
- 15
- Được thích
- 3
theo cái hình của bạn thì mới nhìn vào Coca có tới 3 lận??? từ ngày tới ngày chứ đâu phải trong ngày đâu hả????Xin chào mọi người !
Tôi có 1 file excel tôi muốn cộng dồn số lượng tại ô G4 với điều kiện từ ngày đến ngày tại ô E4,F4 trong vùng dữ liệu B4:C50000. Nhưng do tôi chưa biết tên hàng trước nên không thể dùng SUmif được. Tôi nhờ mọi người giúp viết Code VBA để cộng được như ảnh bên dưới. Tôi cảm ơn !
View attachment 242487
Cái này là đếm chứ khộng phải cộng dồn.Xin chào mọi người !
Tôi có 1 file excel tôi muốn cộng dồn số lượng tại ô G4 với điều kiện từ ngày đến ngày tại ô E4,F4 trong vùng dữ liệu B4:C50000. Nhưng do tôi chưa biết tên hàng trước nên không thể dùng SUmif được. Tôi nhờ mọi người giúp viết Code VBA để cộng được như ảnh bên dưới. Tôi cảm ơn !
View attachment 242487
Public Function LietKe(ByVal Rng As Range, ByVal StartDate As Long, ByVal EndDate As Long) As String
Dim Dic As Object, arrData, i As Long, e
Set Dic = CreateObject("Scripting.Dictionary")
Dic.CompareMode = vbTextCompare
arrData = Rng.Value2
For i = 1 To UBound(arrData, 1)
If arrData(i, 1) >= StartDate And arrData(i, 1) <= EndDate Then
Dic.Item(arrData(i, 2)) = Dic.Item(arrData(i, 2)) + 1
End If
Next i
For Each e In Dic.keys
LietKe = LietKe & IIf(LietKe = "", "", "; ") & e & "( " & Dic.Item(e) & " )"
Next e
End Function
Xin lổi do mình nhầmtheo cái hình của bạn thì mới nhìn vào Coca có tới 3 lận??? từ ngày tới ngày chứ đâu phải trong ngày đâu hả????
Học đòi viết code:Xin chào mọi người !
Tôi có 1 file excel tôi muốn cộng dồn số lượng tại ô G4 với điều kiện từ ngày đến ngày tại ô E4,F4 trong vùng dữ liệu B4:C50000. Nhưng do tôi chưa biết tên hàng trước nên không thể dùng SUmif được. Tôi nhờ mọi người giúp viết Code VBA để cộng được như ảnh bên dưới. Tôi cảm ơn !
View attachment 242487
Sub congdon()
Dim sArr(), dArr(), DK1 As Date, DK2 As Date, i As Long, j As Long, k As Long, Res As String, Lr As Long
Dim Dic As Object
Set Dic = CreateObject("Scripting.dictionary")
With Sheets("Sheet1")
DK1 = .Range("E4").Value2
DK2 = .Range("F4").Value2
Lr = .Range("C" & Rows.Count).End(xlUp).Row
sArr = .Range("B4:C" & Lr).Value
End With
ReDim dArr(1 To UBound(sArr), 1 To 2)
If Lr = 3 Then MsgBox "Chua co du lieu": Exit Sub
For i = 1 To UBound(sArr)
If sArr(i, 1) >= DK1 And sArr(i, 1) <= DK2 Then
If Not Dic.exists(sArr(i, 2)) Then
k = k + 1
Dic.Add (sArr(i, 2)), k
dArr(k, 1) = sArr(i, 2)
dArr(k, 2) = 1
Else
dArr(Dic.Item(sArr(i, 2)), 2) = dArr(Dic.Item(sArr(i, 2)), 2) + 1
End If
End If
Next i
For j = 1 To k
Res = Res & ", " & dArr(j, 1) & "(" & dArr(j, 2) & ")"
Next j
Sheets("sheet1").Range("G4") = Res
End Sub
không biết mình làm thế này được không nhỉ...
For j = 1 To k
If Res <> "" then
Res = Res & ", " & dArr(j, 1) & "(" & dArr(j, 2) & ")"
else
Res = dArr(j, 1) & "(" & dArr(j, 2) & ")"
End If
Next j
Cái này là đếm chứ khộng phải cộng dồn.
Dùng hàm tự tạo:
Thử UDF:
Mã:Public Function LietKe(ByVal Rng As Range, ByVal StartDate As Long, ByVal EndDate As Long) As String Dim Dic As Object, arrData, i As Long, e Set Dic = CreateObject("Scripting.Dictionary") Dic.CompareMode = vbTextCompare arrData = Rng.Value2 For i = 1 To UBound(arrData, 1) If arrData(i, 1) >= StartDate And arrData(i, 1) <= EndDate Then Dic.Item(arrData(i, 2)) = Dic.Item(arrData(i, 2)) + 1 End If Next i For Each e In Dic.keys LietKe = LietKe & IIf(LietKe = "", "", "; ") & e & "( " & Dic.Item(e) & " )" Next e End Function
Có thể viết thế này:không biết mình làm thế này được không nhỉ...
Mã:For j = 1 To k If Res <> "" then Res = Res & ", " & dArr(j, 1) & "(" & dArr(j, 2) & ")" else Res = dArr(j, 1) & "(" & dArr(j, 2) & ")" End If Next j
For j = 1 To k
Res = Res & IIf(Len(Res), ", ", "") & dArr(j, 1) & "(" & dArr(j, 2) & ")"
Next j
bán hàng tự có...Không có tên mặt hàng thì bán cái gì?
Cảm ơn bạn. Nếu vùng tên hàng trống thì công thức đếm bị thừa 1 số ký tự lạ
số 3 đó là hàng ""Nếu không có tên thì Trống trống chứ. Ví dụ
View attachment 242506
Thay vì hiện số 3. Bạn cho nó trống trống luôn. không cần đếm trống trống
View attachment 242505
bạn lấy $B$4:C$1000 luôn thì nó chơi luôn mấy ô không có dữ liệu mà....
làm toán trừ đi: 1000-14(có dữ liệu)=?????
Học đòi viết code:
PHP:Sub congdon() Dim sArr(), dArr(), DK1 As Date, DK2 As Date, i As Long, j As Long, k As Long, Res As String, Lr As Long Dim Dic As Object Set Dic = CreateObject("Scripting.dictionary") With Sheets("Sheet1") DK1 = .Range("E4").Value2 DK2 = .Range("F4").Value2 Lr = .Range("C" & Rows.Count).End(xlUp).Row sArr = .Range("B4:C" & Lr).Value End With ReDim dArr(1 To UBound(sArr), 1 To 2) If Lr = 3 Then MsgBox "Chua co du lieu": Exit Sub For i = 1 To UBound(sArr) If sArr(i, 1) >= DK1 And sArr(i, 1) <= DK2 Then If Not Dic.exists(sArr(i, 2)) Then k = k + 1 Dic.Add (sArr(i, 2)), k dArr(k, 1) = sArr(i, 2) dArr(k, 2) = 1 Else dArr(Dic.Item(sArr(i, 2)), 2) = dArr(Dic.Item(sArr(i, 2)), 2) + 1 End If End If Next i For j = 1 To k Res = Res & ", " & dArr(j, 1) & "(" & dArr(j, 2) & ")" Next j Sheets("sheet1").Range("G4") = Res End Sub
Nhờ bác @Ba Tê và bác @phuocam chỉ giúp làm sao xóa dấu "," đầu tiên của kết quả (Em replace mà không được )Mã:
Vài lời với bạn:ý mình là không cần đếm ô rổng. Chỉ đếm những tên hàng có Len >0 thôi. Còn rổng không cần hiện ra. Vì hiện ra cũng không có tác dụng. Vi mình chỉ muốn nhìn những tên hàng xuất hiện bao nhiêu lần thôi. Bỏ qua rổng
Sub congdon()
Dim sArr(), dArr(), DK1 As Date, DK2 As Date, i As Long, j As Long, k As Long, Res As String, Lr As Long
Dim Dic As Object
Set Dic = CreateObject("Scripting.dictionary")
With Sheets("Sheet1")
DK1 = .Range("E4").Value2
DK2 = .Range("F4").Value2
Lr = .Range("C" & Rows.Count).End(xlUp).Row
sArr = .Range("B4:C" & Lr).Value
End With
ReDim dArr(1 To UBound(sArr), 1 To 2)
If Lr = 3 Then MsgBox "Chua co du lieu": Exit Sub
For i = 1 To UBound(sArr)
If sArr(i, 1) >= DK1 And sArr(i, 1) <= DK2 And sArr(i, 2) <> "" Then
If Not Dic.exists(sArr(i, 2)) Then
k = k + 1
Dic.Add (sArr(i, 2)), k
dArr(k, 1) = sArr(i, 2)
dArr(k, 2) = 1
Else
dArr(Dic.Item(sArr(i, 2)), 2) = dArr(Dic.Item(sArr(i, 2)), 2) + 1
End If
End If
Next i
For j = 1 To k
Res = Res & ", " & dArr(j, 1) & "(" & dArr(j, 2) & ")"
'Res = Res & IIf(Len(Res), ", ", "") & dArr(j, 1) & "(" & dArr(j, 2) & ")"
Next j
Sheets("sheet1").Range("G4") = Mid(Res, 3)
End Sub
1 cách khác cho bạn tham khảo, dùng Power QueryXin chào mọi người !
Tôi có 1 file excel tôi muốn cộng dồn số lượng tại ô G4 với điều kiện từ ngày đến ngày tại ô E4,F4 trong vùng dữ liệu B4:C50000. Nhưng do tôi chưa biết tên hàng trước nên không thể dùng SUmif được. Tôi nhờ mọi người giúp viết Code VBA để cộng được như ảnh bên dưới. Tôi cảm ơn !
View attachment 242487