Phương Phương mito
Thành viên thường trực
- Tham gia
- 1/5/19
- Bài viết
- 275
- Được thích
- 65
Bạn giải thích tại sao có dòng thì có " (90)" hoặc "(92)" có dòng thì không? Số tô đậm trong ngoặc ấy được lấy thế nào?Mến trào anh chị và các bạn,
Nhờ anh chị sửa code giúp em với ạ. Kết quả mong muốn như tại G2 ạ. Code em làm chưa cho được Tổng cộng vào ô mà để tạm tại cột E. Em chưa biết tính khoảng cách giữa 2 lần thành toán ạ. Em cảm ơn ạ.
Cứ lấy ngày thanh toán trừ đi ngày thanh toán gần nhất trước đó ạBạn giải thích tại sao có dòng thì có " (90)" hoặc "(92)" có dòng thì không? Số tô đậm trong ngoặc ấy được lấy thế nào?
25/12/2021-25.000.000
25/03/2022 (90) -29.000.000
dạ, ngại quá vì em hay chát chít với các bạn kiểu xinh nhật, sin trào, xương sương....nên nhiều khi viết thành thói quen xấu ạ. Em sẽ chú ý hơn ạ.Vụ này dàn dụa quá.
Data sort sẵn như thế thì dùng dic chi cho mất công hè?Mến trào anh chị và các bạn,
Nhờ anh chị sửa code giúp em với ạ. Kết quả mong muốn như tại G2 ạ. Code em làm chưa cho được Tổng cộng vào ô mà để tạm tại cột E. Em chưa biết tính khoảng cách giữa 2 lần thành toán ạ. Em cảm ơn ạ.
Mong a chỉ code ạ !Data sort sẵn như thế thì dùng dic chi cho mất công hè?
Code:Mong a chỉ code ạ !
Sub Maika()
Dim i&, t&, Lr&, Arr(), KQ()
Dim dDate As Date, dTotal#, Key$
With Sheets("Data")
Lr = .Cells(1000000, 1).End(3).Row
Arr = .Range("A2:E" & Lr + 1).Value
ReDim KQ(1 To UBound(Arr), 1 To 4)
t = 1: dDate = .Cells(2, 3)
For i = 1 To UBound(Arr) - 1
Key = Arr(i, 1) & "|" & Arr(i, 4)
If Arr(i + 1, 1) & "|" & Arr(i + 1, 4) = Key Then
If Arr(i, 3) <> dDate Then
KQ(t, 4) = KQ(t, 4) & Arr(i, 3) & "(" & Arr(i, 3) - dDate & ")" & "-" & Format(Arr(i, 5), "#,##0") & Chr(10)
Else
KQ(t, 4) = KQ(t, 4) & Arr(i, 3) & "-" & Format(Arr(i, 5), "#,##0") & Chr(10)
End If
dTotal = dTotal + Arr(i, 5): dDate = Arr(i, 3)
Else
KQ(t, 1) = Arr(i, 1)
KQ(t, 2) = Arr(i, 2)
KQ(t, 3) = Arr(i, 4)
dTotal = dTotal + Arr(i, 5)
KQ(t, 4) = KQ(t, 4) & Arr(i, 3) & "(" & Arr(i, 3) - dDate & ")" & "-" & Format(Arr(i, 5), "#,##0") & Chr(10) & "Tong cong: " & Format(dTotal, "#,##0")
t = t + 1: dTotal = 0: dDate = Arr(i + 1, 3)
End If
Next
Sheets("KQ").Range("A2:D90000").ClearContents
Sheets("KQ").Range("A2").Resize(t, 4) = KQ
End With
End Sub
Anh cho em hỏi thêm ạ. Cho dữ liệu vào arr. rồi sau đó lọc theo tứ tự tăng dần của ngày tháng, rồi lọc theo thứ tự tên KH để chuẩn hoá dữ liệu phòng dữ liệu chưa chuẩn ngay thì thêm code như nào được ạ !Code:
Rich (BB code):Sub Maika() Dim i&, t&, Lr&, Arr(), KQ() Dim dDate As Date, dTotal#, Key$ With Sheets("Data") Lr = .Cells(1000000, 1).End(3).Row Arr = .Range("A2:E" & Lr + 1).Value ReDim KQ(1 To UBound(Arr), 1 To 4) t = 1: dDate = .Cells(2, 3) For i = 1 To UBound(Arr) - 1 Key = Arr(i, 1) & "|" & Arr(i, 4) If Arr(i + 1, 1) & "|" & Arr(i + 1, 4) = Key Then If Arr(i, 3) <> dDate Then KQ(t, 4) = KQ(t, 4) & Arr(i, 3) & "(" & Arr(i, 3) - dDate & ")" & "-" & Format(Arr(i, 5), "#,##0") & Chr(10) Else KQ(t, 4) = KQ(t, 4) & Arr(i, 3) & "-" & Format(Arr(i, 5), "#,##0") & Chr(10) End If dTotal = dTotal + Arr(i, 5): dDate = Arr(i, 3) Else KQ(t, 1) = Arr(i, 1) KQ(t, 2) = Arr(i, 2) KQ(t, 3) = Arr(i, 4) dTotal = dTotal + Arr(i, 5) KQ(t, 4) = KQ(t, 4) & Arr(i, 3) & "(" & Arr(i, 3) - dDate & ")" & "-" & Format(Arr(i, 5), "#,##0") & Chr(10) & "Tong cong: " & Format(dTotal, "#,##0") t = t + 1: dTotal = 0: dDate = Arr(i + 1, 3) End If Next Sheets("KQ").Range("A2:D90000").ClearContents Sheets("KQ").Range("A2").Resize(t, 4) = KQ End With End Sub
Tôi không rành chuyện sắp xếp trong mảng nên muốn như thế thì tôi dùng VBA sort trên sheet xong mới cho vào mảng.Anh cho em hỏi thêm ạ. Cho dữ liệu vào arr. rồi sau đó lọc theo tứ tự tăng dần của ngày tháng, rồi lọc theo thứ tự tên KH để chuẩn hoá dữ liệu phòng dữ liệu chưa chuẩn ngay thì thêm code như nào được ạ !
Option Explicit
Sub gopHd()
Dim lr&, i&, k&, rng, res(), sp, sum&, st As String
Dim dic As Object, key
Set dic = CreateObject("Scripting.Dictionary")
With Sheets("Data")
lr = .Cells(Rows.Count, "A").End(xlUp).Row
rng = .Range("A2:E" & lr).Value
End With
For i = 1 To UBound(rng)
If Not dic.exists(rng(i, 4)) Then
dic.Add rng(i, 4), i
Else
dic(rng(i, 4)) = dic(rng(i, 4)) & "|" & i
End If
Next
ReDim res(1 To dic.Count, 1 To 5)
For Each key In dic.keys
sp = Split(dic(key), "|")
k = k + 1: res(k, 1) = rng(sp(0), 1): res(k, 2) = rng(sp(0), 2): res(k, 3) = key
For i = 0 To UBound(sp)
If i = 0 Then
st = rng(sp(0), 3) & " - " & Format(rng(sp(0), 5), "#,###") & vbLf
sum = rng(sp(0), 5)
Else
sum = sum + rng(sp(i), 5)
st = st & rng(sp(0), 3) & " (" & (rng(sp(i), 3) - rng(sp(i - 1), 3)) & ") -" & Format(rng(sp(i), 5), "#,###") & vbLf
End If
If i = UBound(sp) Then st = st & "Tong cong: " & Format(sum, "#,###")
Next
res(k, 4) = st: res(k, 5) = sum
Next
With Sheets("KQ")
.Range("A2:E10000").ClearContents
.Range("A2").Resize(dic.Count, 5).Value = res
End With
Set dic = Nothing
End Sub
Cảm ơn anh đã trợ giúp ạ. Em chạy thử kết quả đúng rồi ạ !Thử xài cái này xem nhé:
Mã:Option Explicit Sub gopHd() Dim lr&, i&, k&, rng, res(), sp, sum&, st As String Dim dic As Object, key Set dic = CreateObject("Scripting.Dictionary") With Sheets("Data") lr = .Cells(Rows.Count, "A").End(xlUp).Row rng = .Range("A2:E" & lr).Value End With For i = 1 To UBound(rng) If Not dic.exists(rng(i, 4)) Then dic.Add rng(i, 4), i Else dic(rng(i, 4)) = dic(rng(i, 4)) & "|" & i End If Next ReDim res(1 To dic.Count, 1 To 5) For Each key In dic.keys sp = Split(dic(key), "|") k = k + 1: res(k, 1) = rng(sp(0), 1): res(k, 2) = rng(sp(0), 2): res(k, 3) = key For i = 0 To UBound(sp) If i = 0 Then st = rng(sp(0), 3) & " - " & Format(rng(sp(0), 5), "#,###") & vbLf sum = rng(sp(0), 5) Else sum = sum + rng(sp(i), 5) st = st & rng(sp(0), 3) & " (" & (rng(sp(i), 3) - rng(sp(i - 1), 3)) & ") -" & Format(rng(sp(i), 5), "#,###") & vbLf End If If i = UBound(sp) Then st = st & "Tong cong: " & Format(sum, "#,###") Next res(k, 4) = st: res(k, 5) = sum Next With Sheets("KQ") .Range("A2:E10000").ClearContents .Range("A2").Resize(dic.Count, 5).Value = res End With Set dic = Nothing End Sub
Dạ vâng ạ !Tôi không rành chuyện sắp xếp trong mảng nên muốn như thế thì tôi dùng VBA sort trên sheet xong mới cho vào mảng.
Phần này trên diễn đàn có rồi, chịu khó tìm thôi. Trong đó có một file của mình. Lâu rồi không dùng đến nên cũng không muốn mò lại.Cho dữ liệu vào arr. rồi sau đó lọc theo tứ tự tăng dần của ngày tháng, rồi lọc theo thứ tự tên KH
Dữ liệu chuẩn như thế thì dùng Pivot Table chứ ai lại tạo bảng KQ chi cho cứng nhắc.Data sort sẵn như thế thì dùng dic chi cho mất công hè?
Hèn gì quý vị không thích nó.Nhiều người ưa báo cáo như thế thì phải làm chứ bác. Mà nói thực, xưa đến nay em chẳng thích cách trình bày của pivot table chút nào, mặc dù nó tuyệt vời về truy vấn.