Hiển thị kết quả tìm kiếm từ 1 đến 4 trên tổng số: 4
  1. #1
    Tham gia ngày
    08 2008
    Nơi Cư Ngụ
    TPHCM
    Bài gởi
    6,376
    Cảm ơn
    24,573
    Được cảm ơn 12,940 lần trong 5,570 bài viết

    Vấn đề tính hàng tổng cộng sau khi lọc và sum trong xử lý mảng

    Tôi có một bảng dữ liệu, sau khi lọc duy nhất rồi cộng dồn theo cột, nhưng lại vướng là muốn thêm 1 hàng dưới cùng để làm hàng tổng cộng của các cột.

    Xin vui lòng hướng dẫn.

    PHP Code:
    Private Sub SumDaTa()
        
    'On Error Resume Next
        Dim i As Long, iR As Long, iC As Long
        Dim sArray, Tmp, Arr()
        sArray = Range(Sheet2.[A1], Sheet2.[A65536].End(xlUp)).Resize(, 15)
        ReDim Arr(1 To UBound(sArray, 1), 1 To 15)
        iR = 0
        With CreateObject("Scripting.Dictionary")
            For i = 1 To UBound(sArray, 1)
                If sArray(i, 1) <> vbNullString Then
                    Tmp = sArray(i, 1)
                    If Not .Exists(Tmp) Then
                        iR = iR + 1
                        .Add Tmp, iR
                        Arr(iR, 1) = Tmp: Arr(iR, 2) = sArray(i, 2)
                        For iC = 3 To 15
                            Arr(iR, iC) = sArray(i, iC)
                        Next
                    Else
                        For iC = 3 To 15
                            Arr(.Item(Tmp), iC) = Arr(.Item(Tmp), iC) + sArray(i, iC)
                        Next
                    End If
                End If
            Next
        End With
        Sheet2.[R1].Resize(iR, 15).Value = Arr
    End Sub 
    Tập tin đính kèm Tập tin đính kèm
      "Tam nhân đồng hành tất hữu ngã sư yên: trạch kỳ thiện giả nhi tòng chi, kỹ bất thiện giả nhi cải chi" <Khổng Tử>
    Ba người cùng đi ắt có người là Thầy ta: lựa cái hay của người này mà học, xét cái quấy của người kia mà tự sửa mình.

    Chia sẻ cùng các bạn là thành viên mới khi gửi bài.

  2. #2
    Tham gia ngày
    09 2009
    Bài gởi
    2,584
    Cảm ơn
    3,301
    Được cảm ơn 5,300 lần trong 2,320 bài viết
    Trích Nguyên văn bởi Hoàng Trọng Nghĩa View Post
    Tôi có một bảng dữ liệu, sau khi lọc duy nhất rồi cộng dồn theo cột, nhưng lại vướng là muốn thêm 1 hàng dưới cùng để làm hàng tổng cộng của các cột.

    Xin vui lòng hướng dẫn.

    PHP Code:
    Private Sub SumDaTa()
        
    'On Error Resume Next
        Dim i As Long, iR As Long, iC As Long
        Dim sArray, Tmp, Arr()
        sArray = Range(Sheet2.[A1], Sheet2.[A65536].End(xlUp)).Resize(, 15)
        ReDim Arr(1 To UBound(sArray, 1), 1 To 15)
        iR = 0
        With CreateObject("Scripting.Dictionary")
            For i = 1 To UBound(sArray, 1)
                If sArray(i, 1) <> vbNullString Then
                    Tmp = sArray(i, 1)
                    If Not .Exists(Tmp) Then
                        iR = iR + 1
                        .Add Tmp, iR
                        Arr(iR, 1) = Tmp: Arr(iR, 2) = sArray(i, 2)
                        For iC = 3 To 15
                            Arr(iR, iC) = sArray(i, iC)
                        Next
                    Else
                        For iC = 3 To 15
                            Arr(.Item(Tmp), iC) = Arr(.Item(Tmp), iC) + sArray(i, iC)
                        Next
                    End If
                End If
            Next
        End With
        Sheet2.[R1].Resize(iR, 15).Value = Arr
    End Sub 
    Nếu không cần thể hiện côngt thức thì thêm tý mắm muối vào code
    Code:
    Private Sub SumDaTa()
        'On Error Resume Next
        Dim i As Long, iR As Long, iC As Long, Tong
        Dim sArray, Tmp, Arr()
        sArray = Range(Sheet2.[A1], Sheet2.[A65536].End(xlUp)).Resize(, 15)
        ReDim Arr(1 To UBound(sArray, 1), 1 To 15)
        ReDim Tong(1 To 1, 2 To 15)
        Tong(1, 2) = "TONG CONG:"
        iR = 0
        With CreateObject("Scripting.Dictionary")
            For i = 1 To UBound(sArray, 1)
                If sArray(i, 1) <> vbNullString Then
                    Tmp = sArray(i, 1)
                    If Not .Exists(Tmp) Then
                        iR = iR + 1
                        .Add Tmp, iR
                        Arr(iR, 1) = Tmp: Arr(iR, 2) = sArray(i, 2)
                        For iC = 3 To 15
                            Arr(iR, iC) = sArray(i, iC)
                         If i > 1 Then Tong(1, iC) = Tong(1, iC) + sArray(i, iC)
                        Next
                    Else
                        For iC = 3 To 15
                            Arr(.Item(Tmp), iC) = Arr(.Item(Tmp), iC) + sArray(i, iC)
                            Tong(1, iC) = Tong(1, iC) + sArray(i, iC)
                        Next
                    End If
                End If
            Next
        End With
        Sheet2.[R1].Resize(iR, 15).Value = Arr
        [S1000].End(xlUp)(2).Resize(, 14) = Tong
    End Sub
    Híc

  3. Có 2 thành viên cảm ơn concogia về bài viết này:


  4. #3
    Tham gia ngày
    08 2008
    Nơi Cư Ngụ
    TPHCM
    Bài gởi
    6,376
    Cảm ơn
    24,573
    Được cảm ơn 12,940 lần trong 5,570 bài viết
    Trích Nguyên văn bởi concogia View Post
    Nếu không cần thể hiện côngt thức thì thêm tý mắm muối vào code
    Code:
        Sheet2.[R1].Resize(iR, 15).Value = Arr
        [S1000].End(xlUp)(2).Resize(, 14) = Tong
    Híc
    Hè hè, Bác Cò "chơi mánh" nhập 2 lần, OK, rất linh hoạt., "Khéo ăn thì no khéo co thì ấm".

    Cám ơn Bác Cò nhé!
      "Tam nhân đồng hành tất hữu ngã sư yên: trạch kỳ thiện giả nhi tòng chi, kỹ bất thiện giả nhi cải chi" <Khổng Tử>
    Ba người cùng đi ắt có người là Thầy ta: lựa cái hay của người này mà học, xét cái quấy của người kia mà tự sửa mình.

    Chia sẻ cùng các bạn là thành viên mới khi gửi bài.

  5. #4
    Tham gia ngày
    08 2008
    Nơi Cư Ngụ
    TPHCM
    Bài gởi
    6,376
    Cảm ơn
    24,573
    Được cảm ơn 12,940 lần trong 5,570 bài viết
    Nếu không muốn gán 2 lần xuống sheet, thì thêm 1 Rờ-Dim nữa đúng không Bác Cò? hè hè.
    Với code này, 64525 dòng và 54 cột đều có dữ liệu, chỉ mất gần 10 giây để thực hiện:

    PHP Code:
    Private Sub SumDaTa3()
        
    Dim i As LongAs LongAs LongiR As LongiC As Long
        Dim sArray
    TmpArrTongGrossTotal
        sArray 
    Range(Sheet2.[A1], Sheet2.[A65536].End(xlUp)).Resize(, 54)
        
    ReDim Arr(1 To UBound(sArray1), 1 To 54)
        
    ReDim Tong(1 To 11 To 54)
        
    Tong(12) = "TONG CONG:"
        
    iR 0
        With CreateObject
    ("Scripting.Dictionary")
            For 
    1 To UBound(sArray1)
                If 
    sArray(i1) <> vbNullString Then
                    Tmp 
    sArray(i1)
                    If 
    Not .Exists(TmpThen
                        iR 
    iR 1
                        
    .Add TmpiR
                        Arr
    (iR1) = TmpArr(iR2) = sArray(i2)
                        For 
    iC 3 To 54
                            Arr
    (iRiC) = sArray(iiC)
                            If 
    1 Then Tong(1iC) = Tong(1iC) + sArray(iiC)
                        
    Next
                    
    Else
                        For 
    iC 3 To 54
                            Arr
    (.Item(Tmp), iC) = Arr(.Item(Tmp), iC) + sArray(iiC)
                            
    Tong(1iC) = Tong(1iC) + sArray(iiC)
                        
    Next
                    End 
    If
                
    End If
            
    Next
        End With
        j 
    iR 1
        ReDim GrossTotal
    (1 To j1 To 54)
        For 
    1 To j
            
    For 1 To 54
                
    If j Then
                    GrossTotal
    (ik) = Tong(1k)
                Else
                    
    GrossTotal(ik) = Arr(ik)
                
    End If
            
    Next
        Next
        Sheet2
    .[BD1].Resize(j54).Value GrossTotal
    End Sub 
    thay đổi nội dung bởi: Hoàng Trọng Nghĩa, 28-03-12 lúc 07:39 PM
      "Tam nhân đồng hành tất hữu ngã sư yên: trạch kỳ thiện giả nhi tòng chi, kỹ bất thiện giả nhi cải chi" <Khổng Tử>
    Ba người cùng đi ắt có người là Thầy ta: lựa cái hay của người này mà học, xét cái quấy của người kia mà tự sửa mình.

    Chia sẻ cùng các bạn là thành viên mới khi gửi bài.

  6. Thành viên sau cảm ơn Hoàng Trọng Nghĩa về bài viết này:


Thông tin về chủ đề này

Users Browsing this Thread

Hiện có 1 người đang xem đề tài này. (0 thành viên và 1 khách)

Bookmarks

Bookmarks

Quyền Sử Dụng Ở Diễn Ðàn

  • Bạn không thể đăng đề tài mới
  • Bạn không thể đăng trả lời
  • Bạn không thể đăng file đính kèm.
  • Bạn không thể sửa bài viết.
  •  

Mudim v0.8 Tắt VNI Telex Viqr Tổng hợp
Chính tả Bỏ dấu kiểu mới  [Bật/Tắt (F9)]