Tính tổng theo điều kiện bằng VBA

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

phamdinhnha

Thành viên mới
Tham gia
17/8/12
Bài viết
36
Được thích
4
Em nhờ các bác giúp cho ca này:
Em có 1 File excel là SoLuong, trong đó có 2 Sheet là "TongHop" và "ChiTiet", em muốn khi Click vào Button "Tao chi tiet" trên Sheet"TongHop" thì excel tự động tính tổng các giá trị ở các cột khác theo nhóm tỉnh/thành phố (cột C). Kết quả như demo tại Sheet "ChiTiet". Rất mong các bác giúp đỡ, cảm ơn các bác!
 

File đính kèm

  • SoLuong.xlsm
    154.6 KB · Đọc: 27
Em nhờ các bác giúp cho ca này:
Em có 1 File excel là SoLuong, trong đó có 2 Sheet là "TongHop" và "ChiTiet", em muốn khi Click vào Button "Tao chi tiet" trên Sheet"TongHop" thì excel tự động tính tổng các giá trị ở các cột khác theo nhóm tỉnh/thành phố (cột C). Kết quả như demo tại Sheet "ChiTiet". Rất mong các bác giúp đỡ, cảm ơn các bác!
@phamdinhnha tham khảo code sau:
Mã:
Option Explicit

Sub Tong()
Dim i&, j&, Lr&, t&, k&, d&
Dim Arr(), KQ(), Tong(), S
Dim Dic As Object, Key
Dim Sh As Worksheet, Ws As Worksheet
Set Sh = Sheets("TongHop")
Lr = Sh.Cells(10000, 4).End(xlUp).Row
Arr = Sh.Range("C13:U" & Lr).Value
Set Dic = CreateObject("Scripting.Dictionary")
ReDim KQ(1 To UBound(Arr) + 65, 1 To 21)
For i = 1 To UBound(Arr)
    Key = Arr(i, 1)
        If Not Dic.exists(Key) Then
            t = t + 1: Dic.Add (Key), t
            Dic(Key) = i
        Else
            Dic(Key) = Dic(Key) & "," & i
        End If
Next i
    ReDim Tong(1 To t, 1 To 21)
For Each Key In Dic.Keys
    d = d + 1
    S = Split(Dic(Key), ",")
    For i = LBound(S) To UBound(S)
        k = k + 1
        KQ(k, 1) = k: KQ(k, 2) = Arr(S(i), 2): KQ(k, 21) = d: Tong(d, 2) = "Công " & Key
        For j = 4 To 16
            KQ(k, j - 1) = Arr(S(i), j)
            Tong(d, j - 1) = Tong(d, j - 1) + KQ(k, j - 1)
        Next j
            KQ(k, 16) = Arr(S(i), 19): Tong(1, 16) = Tong(d, 16) + KQ(k, 16)
            KQ(k, 17) = KQ(k, 16) * 1800000: Tong(d, 17) = Tong(d, 17) + KQ(k, 17)
            KQ(k, 18) = Arr(S(i), 17) * 1800000 * 1.05: Tong(d, 18) = Tong(d, 18) + KQ(k, 18)
            KQ(k, 20) = KQ(k, 17) - KQ(k, 18) - KQ(k, 19): Tong(d, 20) = Tong(d, 20) + KQ(k, 20)
            Tong(d, 21) = d
    Next i
Next Key
 If k Then
    Set Ws = Sheets("ChiTiet")
    Ws.Range("A10").Resize(10000, 21).ClearContents
    Ws.Range("A10").Resize(k, 21) = KQ
    Ws.Range("A" & Ws.Cells(10000, 2).End(xlUp).Row).Resize(t, 21) = Tong
    Ws.Sort.SortFields.Clear
    Ws.Sort.SortFields.Add2 Key:=Ws.Range("U10").Resize(k + t), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("ChiTiet").Sort
        .SetRange Ws.Range("A10").Resize(k + t, 21)
        .Apply
    End With
    Ws.Range("U10").Resize(k + t).ClearContents
End If
Set Dic = Nothing
MsgBox "Done"
End Sub
các vấn đề về định dạng bạn tự làm.
 
Upvote 0
@phamdinhnha tham khảo code sau:
Mã:
Option Explicit

Sub Tong()
Dim i&, j&, Lr&, t&, k&, d&
Dim Arr(), KQ(), Tong(), S
Dim Dic As Object, Key
Dim Sh As Worksheet, Ws As Worksheet
Set Sh = Sheets("TongHop")
Lr = Sh.Cells(10000, 4).End(xlUp).Row
Arr = Sh.Range("C13:U" & Lr).Value
Set Dic = CreateObject("Scripting.Dictionary")
ReDim KQ(1 To UBound(Arr) + 65, 1 To 21)
For i = 1 To UBound(Arr)
    Key = Arr(i, 1)
        If Not Dic.exists(Key) Then
            t = t + 1: Dic.Add (Key), t
            Dic(Key) = i
        Else
            Dic(Key) = Dic(Key) & "," & i
        End If
Next i
    ReDim Tong(1 To t, 1 To 21)
For Each Key In Dic.Keys
    d = d + 1
    S = Split(Dic(Key), ",")
    For i = LBound(S) To UBound(S)
        k = k + 1
        KQ(k, 1) = k: KQ(k, 2) = Arr(S(i), 2): KQ(k, 21) = d: Tong(d, 2) = "Công " & Key
        For j = 4 To 16
            KQ(k, j - 1) = Arr(S(i), j)
            Tong(d, j - 1) = Tong(d, j - 1) + KQ(k, j - 1)
        Next j
            KQ(k, 16) = Arr(S(i), 19): Tong(1, 16) = Tong(d, 16) + KQ(k, 16)
            KQ(k, 17) = KQ(k, 16) * 1800000: Tong(d, 17) = Tong(d, 17) + KQ(k, 17)
            KQ(k, 18) = Arr(S(i), 17) * 1800000 * 1.05: Tong(d, 18) = Tong(d, 18) + KQ(k, 18)
            KQ(k, 20) = KQ(k, 17) - KQ(k, 18) - KQ(k, 19): Tong(d, 20) = Tong(d, 20) + KQ(k, 20)
            Tong(d, 21) = d
    Next i
Next Key
 If k Then
    Set Ws = Sheets("ChiTiet")
    Ws.Range("A10").Resize(10000, 21).ClearContents
    Ws.Range("A10").Resize(k, 21) = KQ
    Ws.Range("A" & Ws.Cells(10000, 2).End(xlUp).Row).Resize(t, 21) = Tong
    Ws.Sort.SortFields.Clear
    Ws.Sort.SortFields.Add2 Key:=Ws.Range("U10").Resize(k + t), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("ChiTiet").Sort
        .SetRange Ws.Range("A10").Resize(k + t, 21)
        .Apply
    End With
    Ws.Range("U10").Resize(k + t).ClearContents
End If
Set Dic = Nothing
MsgBox "Done"
End Sub
các vấn đề về định dạng bạn tự làm.
Cái này nó đã xắp xếp rồi cần gì dùng Dictionary nhỉ.Cứ chạy từ trên xuống dưới 1 lần là xong à.
 
Upvote 0
Cái này nó đã xắp xếp rồi cần gì dùng Dictionary nhỉ.Cứ chạy từ trên xuống dưới 1 lần là xong à.
@snow25
Cảm ơn anh đã xem bài và chỉ bảo.
Tôi đề phòng dữ liệu lộn xộn có thể xảy ra tình trạng C10 -C100 là Hà nội rồi lại cách quãng đến C150 -C155 lại là Hà Nội,....
Nếu Dữ liệu lộn xộn như tôi ví dụ trên, anh có cách nào mà không dùng đến dic không? nếu có xin được chia sẻ. Trân trọng cảm ơn anh.
 
Upvote 0
@phamdinhnha tham khảo code sau:
Mã:
Option Explicit

Sub Tong()
Dim i&, j&, Lr&, t&, k&, d&
Dim Arr(), KQ(), Tong(), S
Dim Dic As Object, Key
Dim Sh As Worksheet, Ws As Worksheet
Set Sh = Sheets("TongHop")
Lr = Sh.Cells(10000, 4).End(xlUp).Row
Arr = Sh.Range("C13:U" & Lr).Value
Set Dic = CreateObject("Scripting.Dictionary")
ReDim KQ(1 To UBound(Arr) + 65, 1 To 21)
For i = 1 To UBound(Arr)
    Key = Arr(i, 1)
        If Not Dic.exists(Key) Then
            t = t + 1: Dic.Add (Key), t
            Dic(Key) = i
        Else
            Dic(Key) = Dic(Key) & "," & i
        End If
Next i
    ReDim Tong(1 To t, 1 To 21)
For Each Key In Dic.Keys
    d = d + 1
    S = Split(Dic(Key), ",")
    For i = LBound(S) To UBound(S)
        k = k + 1
        KQ(k, 1) = k: KQ(k, 2) = Arr(S(i), 2): KQ(k, 21) = d: Tong(d, 2) = "Công " & Key
        For j = 4 To 16
            KQ(k, j - 1) = Arr(S(i), j)
            Tong(d, j - 1) = Tong(d, j - 1) + KQ(k, j - 1)
        Next j
            KQ(k, 16) = Arr(S(i), 19): Tong(1, 16) = Tong(d, 16) + KQ(k, 16)
            KQ(k, 17) = KQ(k, 16) * 1800000: Tong(d, 17) = Tong(d, 17) + KQ(k, 17)
            KQ(k, 18) = Arr(S(i), 17) * 1800000 * 1.05: Tong(d, 18) = Tong(d, 18) + KQ(k, 18)
            KQ(k, 20) = KQ(k, 17) - KQ(k, 18) - KQ(k, 19): Tong(d, 20) = Tong(d, 20) + KQ(k, 20)
            Tong(d, 21) = d
    Next i
Next Key
 If k Then
    Set Ws = Sheets("ChiTiet")
    Ws.Range("A10").Resize(10000, 21).ClearContents
    Ws.Range("A10").Resize(k, 21) = KQ
    Ws.Range("A" & Ws.Cells(10000, 2).End(xlUp).Row).Resize(t, 21) = Tong
    Ws.Sort.SortFields.Clear
    Ws.Sort.SortFields.Add2 Key:=Ws.Range("U10").Resize(k + t), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("ChiTiet").Sort
        .SetRange Ws.Range("A10").Resize(k + t, 21)
        .Apply
    End With
    Ws.Range("U10").Resize(k + t).ClearContents
End If
Set Dic = Nothing
MsgBox "Done"
End Sub
các vấn đề về định dạng bạn tự làm.
Cảm ơn bạn nhiều, để mình xử lý theo sự hỗ trợ của bạn, có gì lại nhờ bạn nhé
 
Upvote 0
@phamdinhnha tham khảo code sau:
Mã:
Option Explicit

Sub Tong()
Dim i&, j&, Lr&, t&, k&, d&
Dim Arr(), KQ(), Tong(), S
Dim Dic As Object, Key
Dim Sh As Worksheet, Ws As Worksheet
Set Sh = Sheets("TongHop")
Lr = Sh.Cells(10000, 4).End(xlUp).Row
Arr = Sh.Range("C13:U" & Lr).Value
Set Dic = CreateObject("Scripting.Dictionary")
ReDim KQ(1 To UBound(Arr) + 65, 1 To 21)
For i = 1 To UBound(Arr)
    Key = Arr(i, 1)
        If Not Dic.exists(Key) Then
            t = t + 1: Dic.Add (Key), t
            Dic(Key) = i
        Else
            Dic(Key) = Dic(Key) & "," & i
        End If
Next i
    ReDim Tong(1 To t, 1 To 21)
For Each Key In Dic.Keys
    d = d + 1
    S = Split(Dic(Key), ",")
    For i = LBound(S) To UBound(S)
        k = k + 1
        KQ(k, 1) = k: KQ(k, 2) = Arr(S(i), 2): KQ(k, 21) = d: Tong(d, 2) = "Công " & Key
        For j = 4 To 16
            KQ(k, j - 1) = Arr(S(i), j)
            Tong(d, j - 1) = Tong(d, j - 1) + KQ(k, j - 1)
        Next j
            KQ(k, 16) = Arr(S(i), 19): Tong(1, 16) = Tong(d, 16) + KQ(k, 16)
            KQ(k, 17) = KQ(k, 16) * 1800000: Tong(d, 17) = Tong(d, 17) + KQ(k, 17)
            KQ(k, 18) = Arr(S(i), 17) * 1800000 * 1.05: Tong(d, 18) = Tong(d, 18) + KQ(k, 18)
            KQ(k, 20) = KQ(k, 17) - KQ(k, 18) - KQ(k, 19): Tong(d, 20) = Tong(d, 20) + KQ(k, 20)
            Tong(d, 21) = d
    Next i
Next Key
 If k Then
    Set Ws = Sheets("ChiTiet")
    Ws.Range("A10").Resize(10000, 21).ClearContents
    Ws.Range("A10").Resize(k, 21) = KQ
    Ws.Range("A" & Ws.Cells(10000, 2).End(xlUp).Row).Resize(t, 21) = Tong
    Ws.Sort.SortFields.Clear
    Ws.Sort.SortFields.Add2 Key:=Ws.Range("U10").Resize(k + t), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("ChiTiet").Sort
        .SetRange Ws.Range("A10").Resize(k + t, 21)
        .Apply
    End With
    Ws.Range("U10").Resize(k + t).ClearContents
End If
Set Dic = Nothing
MsgBox "Done"
End Sub
các vấn đề về định dạng bạn tự làm.
Mình đã test nhưng nó vẫn chưa đặt giá trị tổng như mình muốn trong Sheet demo "ChiTiet", bạn à
 
Upvote 0
Mình đã test nhưng nó vẫn chưa đặt giá trị tổng như mình muốn trong Sheet demo "ChiTiet", bạn à
Có phải là sau khi liệt kê các data của tỉnh nào đó thì cộng lại rồi tiếp tục đến liệt kê tỉnh khác.
Hay là cứ nhất nhất là phải thứ tự Bắc giang, Bắc ninh, Cao bằng, ... (các tỉnh sắp xếp theo ABC)
hay là phải có chữ "Cộng Bắc giang" ở cột B và các cột khác là hàm SUM(...), vvv
Bạn chỉ đưa file có demo chứ có nói trong Tỉnh ấy thì dòng nào lấy dòng nào không lấy đâu?
 
Lần chỉnh sửa cuối:
Upvote 0
Có phải là sau khi liệt kê các data của tỉnh nào đó thì cộng lại rồi tiếp tục đến liệt kê tỉnh khác.
Hay là cứ nhất nhất là phải thứ tự Bắc giang, Bắc ninh, Cao bằng, ... (các tỉnh sắp xếp theo ABC)
hay là phải có chữ "Cộng Bắc giang" ở cột B và các cột khác là hàm SUM(...), vvv
Bạn chỉ đưa file có demo chứ có nói trong Tỉnh ấy thì dòng nào lấy dòng nào không lấy đâu?
Ý mình muốn là: Tên nhân viên xếp theo từng tỉnh, dưới nhóm tỉnh đó đặt từ Cộng ... (vd: cộng Hà Nam) ở cột B, đặt giá trị tổng ở các cột từ C đến T trên cùng dòng chữ Cộng Hà Nam, rồi lại xếp các nhân viên thuộc tỉnh khác vào nhóm tiếp theo và cũng đặt từ Cộng ... (vd: Cộng Ninh Bình) ở cột B, các giá trị tổng ở các cột từ C đến T trên cùng dòng chữ Cộng Ninh Bình, cứ tiếp tục như vậy cho các tỉnh khác. Nếu sắp xếp các nhóm tỉnh theo thứ tự ABC thì càng tốt bạn à
 

File đính kèm

  • Vidu1.png
    Vidu1.png
    19.8 KB · Đọc: 18
  • Vidu2.png
    Vidu2.png
    7 KB · Đọc: 18
Upvote 0
....
Nếu Dữ liệu lộn xộn như tôi ví dụ trên, anh có cách nào mà không dùng đến dic không? nếu có xin được chia sẻ. Trân trọng cảm ơn anh.
Xài Diction_ là nhanh thôi; Cũng có cách rùa bò nhưng cũng ra kết quả (1 khi chưa có kiến thức về Dicton_)
B1: Mở bộ thu macro & tiến hành lập danh sách duy nhất của cột tỉnh;
B2: Tạo vòng lặp duyệt theo danh sách tỉnh;
B3: Tạo vòng lặp duyệt mảng dữ liệu (DL)
Khi duyệt đi duyệt lại nhiều lần như thế thì ta nhận được mảng DL thỏa
Kể cả trường hợp cần tính tổng theo từng tỉnh (bằng cách báo thêm 1 tham biến Tong (dạng Double)

Chúc các thành viên nữ ngày mai có 1 ngày 8 tháng 3 tươi đẹp & nhiều thành công trong cuộc sống!
 
Upvote 0
Ý mình muốn là: Tên nhân viên xếp theo từng tỉnh, dưới nhóm tỉnh đó đặt từ Cộng ... (vd: cộng Hà Nam) ở cột B, đặt giá trị tổng ở các cột từ C đến T trên cùng dòng chữ Cộng Hà Nam, rồi lại xếp các nhân viên thuộc tỉnh khác vào nhóm tiếp theo và cũng đặt từ Cộng ... (vd: Cộng Ninh Bình) ở cột B, các giá trị tổng ở các cột từ C đến T trên cùng dòng chữ Cộng Ninh Bình, cứ tiếp tục như vậy cho các tỉnh khác. Nếu sắp xếp các nhóm tỉnh theo thứ tự ABC thì càng tốt bạn à
Bạn đã chạy thử code chưa? Kết quả đúng như bạn nói rồi còn gì?
 

File đính kèm

  • Screenshot (127).png
    Screenshot (127).png
    207.4 KB · Đọc: 7
Upvote 0
Bài này cách làm đúng nhất là sort theo tỉnh rồi cứ subtotals là xong.
Tuy nhiên, nó không thể nào nhanh bằng code VBA. Mọi người không thể phủ nhận là cứ lên GPE tải code về, bấm một phát là phương pháp hiệu quả nhất.

@Tác giả bài 10:
Bảo nhanh thì đít sần chỉ tương đối.
Tuy nhiên, đít sần thì dễ làm - trên này nhiều người làm lắm cho nên số kinh nghiệm là tuyệt đỉnh.
 
Upvote 0
@snow25
Cảm ơn anh đã xem bài và chỉ bảo.
Tôi đề phòng dữ liệu lộn xộn có thể xảy ra tình trạng C10 -C100 là Hà nội rồi lại cách quãng đến C150 -C155 lại là Hà Nội,....
Nếu Dữ liệu lộn xộn như tôi ví dụ trên, anh có cách nào mà không dùng đến dic không? nếu có xin được chia sẻ. Trân trọng cảm ơn anh.
1/ Sort dữ liệu theo tỉnh thành và họ tên
_Bạn tạo mảng tạm lưu dữ liệu tổng hợp
_ Sort theo tỉnh thành và họ tên
_ Gán dữ liệu đã sort vào mảng arr
_ Gán mảng tạm vào sheet để trả về giá trị gốc
Hoặc dùng các lệnh sort bằng mảng của VBA

2/ xử lý mảng arr không cần dùng dic
 
Upvote 0
...

2/ xử lý mảng arr không cần dùng dic
Sort rồi duyệt từ trên xuống là đúng phương cách thông thường.

Câu cuối bài #12 tôi có thừa nhận là Dic có lợi thế hơn ở GPE này. Lý do cũng rõ rệt.
Tôi bảo đảm có nhiều người duyệt mảng nạp vào Dic rần rần chứ bảo cách duyệt mảng đã sắp xếp thì khựng.
Thêm nữa, nhiều bài hỏi ở đây cũng nêu thẳng ra là dùng Dic mặc dầu trước mắt thì ngữ pháp VBA còn chưa rõ ngô khoai.
Nói cách khác, Dic đã được nhồi sọ cho mọi người từ lớp học code vỡ lòng.
 
Upvote 0
Bạn đã chạy thử code chưa? Kết quả đúng như bạn nói rồi còn gì?
Mình đã chạy code (do phần Short bị lỗi gì đó nên mình tạm bỏ qua chỗ đó) thì KQ ra như File dưới, KQ nó chưa được như ý mình muốn, mình không rành về lập trình, mong bạn giúp thêm. Cảm ơn bạn!
 

File đính kèm

  • SoLuong-goc.xlsm
    195 KB · Đọc: 4
  • Screenshot_1.png
    Screenshot_1.png
    143.5 KB · Đọc: 7
Upvote 0
Mình đã chạy code (do phần Short bị lỗi gì đó nên mình tạm bỏ qua chỗ đó) thì KQ ra như File dưới, KQ nó chưa được như ý mình muốn, mình không rành về lập trình, mong bạn giúp thêm. Cảm ơn bạn!
Tôi tải về máy tôi chạy bình thường.
Tôi đã sửa lại code (thêm phần định dạng kết quả) các định dạng khác nữa bạn tự làm nhé.
Bạn nên chạy debug từng dòng lệnh và xem trên sheet thay đổi thế nào .Hãy click chuột vào lề trái của dòng lệnh để code chạy đến đó sẽ dừng, nhấn F8 để chạy từng dòng lệnh tiếp theo hoặc F5 để code chạy tiếp đến điểm dùng tiếp theo)
Xem file
 

File đính kèm

  • SoLuong-goc (1).xlsm
    793.5 KB · Đọc: 9
Upvote 0
Em nhờ các bác giúp cho ca này:
Em có 1 File excel là SoLuong, trong đó có 2 Sheet là "TongHop" và "ChiTiet", em muốn khi Click vào Button "Tao chi tiet" trên Sheet"TongHop" thì excel tự động tính tổng các giá trị ở các cột khác theo nhóm tỉnh/thành phố (cột C). Kết quả như demo tại Sheet "ChiTiet". Rất mong các bác giúp đỡ, cảm ơn các bác!
Dùng SortedList để sort dữ liệu tỉnh thành
Mã:
Sub XYZ()
  Dim arr(), res(), S, oSList As Object, key$
  Dim sRow&, N&, i&, j&, r&, c&, k&, rT&
 
  Set oSList = CreateObject("System.Collections.SortedList")
  With Sheets("TongHop")
    arr = .Range("C13:U" & .Range("C" & Rows.Count).End(xlUp).Row).Value
  End With
  sRow = UBound(arr)
  For i = 1 To sRow
    oSList(arr(i, 1)) = oSList(arr(i, 1)) & "," & i
  Next i
  N = oSList.Count - 1
  ReDim res(1 To sRow + N + 1, 1 To 20)
 
  For i = 0 To N
    key = oSList.GetKey(i)
    S = Split(oSList.GetByIndex(i), ",")
    rT = k + UBound(S) + 1
    For j = 1 To UBound(S)
      r = CLng(S(j))
      k = k + 1
      res(k, 1) = k
      res(k, 2) = arr(r, 2)
      res(rT, 2) = "Công " & key
      For c = 4 To 17
        res(k, c - 1) = arr(r, c)
      Next c
      res(k, 17) = res(k, 16) * 1800000
      res(k, 18) = (res(k, 3) + res(k, 5) + res(k, 6)) * 1800000 * 0.105
      res(k, 20) = res(k, 17) - res(k, 18) - res(k, 19)
      res(rT, 17) = res(rT, 17) + res(k, 17)
      res(rT, 18) = res(rT, 18) + res(k, 18)
      res(rT, 20) = res(rT, 20) + res(k, 20)
    Next j
    k = k + 1
  Next i
  With Sheets("ChiTiet")
    i = .Range("B" & Rows.Count).End(xlUp).Row
    If i > 9 Then .Range("A10:T" & i).ClearContents
    .Range("A10").Resize(UBound(res), 20) = res
  End With
  Set oSList = Nothing
End Sub
 
Upvote 0
Tôi tải về máy tôi chạy bình thường.
Tôi đã sửa lại code (thêm phần định dạng kết quả) các định dạng khác nữa bạn tự làm nhé.
Bạn nên chạy debug từng dòng lệnh và xem trên sheet thay đổi thế nào .Hãy click chuột vào lề trái của dòng lệnh để code chạy đến đó sẽ dừng, nhấn F8 để chạy từng dòng lệnh tiếp theo hoặc F5 để code chạy tiếp đến điểm dùng tiếp theo)
Xem file
Cảm ơn bạn, mình chưa hiểu tại sao, tải file bạn sửa về thì thấy KQ như ý mình muốn nhưng bấm chạy code lại thì tất cả phần cộng giá trị lại xuống cuối bảng (như hình), bạn gặp thế này chưa, bạn bảo mình với.
 

File đính kèm

  • Loi 2.png
    Loi 2.png
    227.2 KB · Đọc: 10
Upvote 0
Upvote 0
Khả năng là chưa làm theo hướng dẫn ý trên đây rồi.
Bài này (tiếng của thớt là 'ca' này) khó bỏ bố. Giải thuật chả có gì khó nhưng vì qua lại gữa hai sheets không đồng bộ cho nên trở thành khó.
Tôi phải mở 2 cửa sổ song song nhau dòm mới ra chỗ lệch cột. Thêm cái tiêu đề tổ bố, merge cells tùm lum, tốn mất một số dòng, cỉ còn lại vài dingf để nhìn dữ liệu.
Việc viết code cho chính xác vị trí các cells trở nên rất khó khăn.

Đúng ra thì người ta làm hai bảng in hệt nhau, chỉ hide những cột không cần nhìn thôi.
 
Upvote 0
Web KT
Back
Top Bottom