VBA tìm giá trị theo điều kiện (3 người xem)

Người dùng đang xem chủ đề này

  • Tôi tuân thủ nội quy khi đăng bài

    eagle12

    Thành viên mới
    Tham gia
    18/12/13
    Bài viết
    27
    Được thích
    5
    Chào các bác, xin nhờ anh chị về code VBA lấy giá trị theo điều kiện thay cho hàm sumifs cho bảng như sau ah

    VD em có bảng dữ liệu sắp xếp "B3:Exxx",
    Bảng báo cáo xoay sang chiều ngang với 2 dải điều kiên là cột H4:Hxxx và hàng I3:Uxxx

    Em đang sử dụng hàm sumifs để lấy được số tiền của từng mã theo ngày

    Xin nhờ anh chị code VBA lấy giá trị đổ vào từ ô I4:U thay cho hàm sumifs

    1762411255538.png
     

    File đính kèm

    Trong khi chờ VBA Code, tham khảo kết quả M Code:
    Mã:
    let
        Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"Date Text", type date}, {"Mã", type text}, {"So tien", Currency.Type}}),
        #"Grouped Rows" = Table.Group(#"Changed Type", {"Date Text", "Mã"}, {{"Count", each List.Sum([So tien]), Currency.Type }}),
        #"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(#"Grouped Rows", {{"Date Text", type text}}, "vi-VN"), List.Distinct(Table.TransformColumnTypes(#"Grouped Rows", {{"Date Text", type text}}, "vi-VN")[#"Date Text"]), "Date Text", "Count", List.Sum)
    in
        #"Pivoted Column"
     

    File đính kèm

    • Untitled.png
      Untitled.png
      378.7 KB · Đọc: 5
    Upvote 0
    Một trong những phương thức rùa bò:
    PHP:
    Sub TongHopMa_Ngay()
     Dim Dg As Long, Cot As Integer, Rws As Long
     Dim WF As Object, CSDL As Range, Cls As Range
     Dim Tmr As Double
     
     Tmr = Time()
     Rws = [C3].CurrentRegion.Rows.Count
     Set WF = Application.WorksheetFunction
     Set CSDL = [C3].Resize(Rws, 3)
     [I20].Value = [C3].Value:          [J20].Value = [D3].Value
     For Each Cls In Range([I3], [I3].End(xlToRight))
        [I21].Value = Cls.Value
        For Dg = 4 To 17
            [j21].Value = Cells(Dg, "H").Value
            Cells(Dg, Cls.Column).Value = WF.DSum(CSDL, [E3], [I20:J21])
        Next Dg
     Next Cls
     MsgBox Timer() - Tmr
    End Sub
     
    Upvote 0
    Một trong những phương thức rùa bò:
    Em thử chay code, KQ ra hiện ra không đúng anh ah, ví dụ I4
    I4 <> E4,
    I5 = E8 : OK

    P/S: tại sheet1, có 2 code thay cho sumif nhiều đk, nhưng em không biết chỉnh lại cho phù hợp với dữ liệu của mình cần lấy khi vùng điều kiện là cột H4:H17 + hàng I3:U3

    Cám ơn anh
    1762420561581.png
     

    File đính kèm

    Upvote 0

    File đính kèm

    Upvote 0
    (1) Em thử chay code, KQ ra hiện ra không đúng anh ah, ví dụ I4
    I4 <> E4,
    I5 = E8 : OK

    (2) P/S: tại sheet1, có 2 code thay cho sumif nhiều đk, nhưng em không biết chỉnh lại cho phù hợp với dữ liệu của mình cần lấy khi vùng điều kiện là cột H4:H17 + hàng I3:U3

    Cám ơn anh
    (1) Đó là do hệ mã của bạn không có cùng độ dài;
    Ví du tính cho mã A1 sẽ lớn khác với tính cho A01 vì excel tài lanh tính cho cả A11, A10,. . .

    (2) Chắc bạn chưa điêu luyện trong việc xài DSUM() mà thường xài SUMIF()
    DSUM() cần được cung cấp 3 thông số
    1./ Vùng dữ liệu (Trong macro là tham biến CSDL);
    2./ Tiêu đề cột cần tính tổng;
    3./ Vùng điều kiện (Ở đây tính tổng theo 2 điều kiện nên vùng điều kiện là 4 ô
    [I20:J21]
     
    Upvote 0

    Bài viết mới nhất

    Back
    Top Bottom