Code Tính các mã hàng trùng nhau theo điều kiện

Liên hệ QC

tanthanh94

Thành viên mới
Tham gia
24/8/14
Bài viết
46
Được thích
3
Mình mượn code trên diễn đàn về chỉnh sữa lại
Mình muốn code trả về kết quả trực tiếp tại A3 mà không cần bổ sung thêm phần code màu đỏ
Mã:
Private Sub Worksheet_Activate()
Dim I As Long, K As Long, Darr()
Dim Sarr(), Temp(), Col As Long, J As Long, M As Long
Col = 8
Sarr = Sheet1.Range("B3", Sheet1.[B65536].End(3)).Resize(, Col).Value
ReDim Darr(1 To UBound(Sarr), 1 To Col)
With CreateObject("Scripting.Dictionary")
    For I = 1 To UBound(Sarr)
        If Not .exists(Sarr(I, 1)) Then
            K = K + 1
            .Add Sarr(I, 1), K
            For J = 1 To Col - 1
               Darr(K, J) = Sarr(I, J)
            Next
            Darr(K, Col) = Sarr(I, Col)
        Else
            Darr(.Item(Sarr(I, 1)), Col) = _
            Darr(.Item(Sarr(I, 1)), Col) + Sarr(I, Col)
        End If
    Next
End With
Sheet2.Range("A3:I65000").ClearContents
Sheet2.[B3].Resize(K, Col) = Darr
[COLOR=#ff0000]Sarr = Sheet2.Range("B3", Sheet2.[B65536].End(3)).Resize(, Col).Value[/COLOR]
[COLOR=#ff0000] For I = 1 To UBound(Sarr)[/COLOR]
[COLOR=#ff0000]    M = M + 1[/COLOR]
[COLOR=#ff0000]     For J = 1 To Col[/COLOR]
[COLOR=#ff0000]        Darr(M, 1) = M[/COLOR]
[COLOR=#ff0000]        Darr(M, 2) = Sarr(I, 1)[/COLOR]
[COLOR=#ff0000]        Darr(M, 3) = Sarr(I, 2)[/COLOR]
[COLOR=#ff0000]        Darr(M, 4) = Sarr(I, 7)[/COLOR]
[COLOR=#ff0000]        Darr(M, 5) = Sarr(I, 8) / Sarr(I, 4) / Sarr(I, 5)[/COLOR]
[COLOR=#ff0000]        Next[/COLOR]
[COLOR=#ff0000]        Next[/COLOR]
[COLOR=#ff0000]        Sheet2.[K3].Resize(M, 5) = Darr[/COLOR]
End Sub
 

File đính kèm

Không ai giúp đành phải đọc bài khác chờ đợi thôi.
 
Mình mượn code trên diễn đàn về chỉnh sữa lại
Mình muốn code trả về kết quả trực tiếp tại A3 mà không cần bổ sung thêm phần code màu đỏ
Mã:
Private Sub Worksheet_Activate()
Dim I As Long, K As Long, Darr()
Dim Sarr(), Temp(), Col As Long, J As Long, M As Long
Col = 8
Sarr = Sheet1.Range("B3", Sheet1.[B65536].End(3)).Resize(, Col).Value
ReDim Darr(1 To UBound(Sarr), 1 To Col)
With CreateObject("Scripting.Dictionary")
    For I = 1 To UBound(Sarr)
        If Not .exists(Sarr(I, 1)) Then
            K = K + 1
            .Add Sarr(I, 1), K
            For J = 1 To Col - 1
               Darr(K, J) = Sarr(I, J)
            Next
            Darr(K, Col) = Sarr(I, Col)
        Else
            Darr(.Item(Sarr(I, 1)), Col) = _
            Darr(.Item(Sarr(I, 1)), Col) + Sarr(I, Col)
        End If
    Next
End With
Sheet2.Range("A3:I65000").ClearContents
Sheet2.[B3].Resize(K, Col) = Darr
[COLOR=#ff0000]Sarr = Sheet2.Range("B3", Sheet2.[B65536].End(3)).Resize(, Col).Value[/COLOR]
[COLOR=#ff0000] For I = 1 To UBound(Sarr)[/COLOR]
[COLOR=#ff0000]    M = M + 1[/COLOR]
[COLOR=#ff0000]     For J = 1 To Col[/COLOR]
[COLOR=#ff0000]        Darr(M, 1) = M[/COLOR]
[COLOR=#ff0000]        Darr(M, 2) = Sarr(I, 1)[/COLOR]
[COLOR=#ff0000]        Darr(M, 3) = Sarr(I, 2)[/COLOR]
[COLOR=#ff0000]        Darr(M, 4) = Sarr(I, 7)[/COLOR]
[COLOR=#ff0000]        Darr(M, 5) = Sarr(I, 8) / Sarr(I, 4) / Sarr(I, 5)[/COLOR]
[COLOR=#ff0000]        Next[/COLOR]
[COLOR=#ff0000]        Next[/COLOR]
[COLOR=#ff0000]        Sheet2.[K3].Resize(M, 5) = Darr[/COLOR]
End Sub
Đề tài không đầu không cuối. Bạn nên nói rõ là Code bạn sưu tầm được trên diễn đàn là để làm việc gì? (Ít ra là nêu ra đề bài rồi áp dụng Code trên để giải quyết).
 
Mình mượn code trên diễn đàn về chỉnh sữa lại
Mình muốn code trả về kết quả trực tiếp tại A3 mà không cần bổ sung thêm phần code màu đỏ
Mã:
Private Sub Worksheet_Activate()
Dim I As Long, K As Long, Darr()
Dim Sarr(), Temp(), Col As Long, J As Long, M As Long
Col = 8
Sarr = Sheet1.Range("B3", Sheet1.[B65536].End(3)).Resize(, Col).Value
ReDim Darr(1 To UBound(Sarr), 1 To Col)
With CreateObject("Scripting.Dictionary")
    For I = 1 To UBound(Sarr)
        If Not .exists(Sarr(I, 1)) Then
            K = K + 1
            .Add Sarr(I, 1), K
            For J = 1 To Col - 1
               Darr(K, J) = Sarr(I, J)
            Next
            Darr(K, Col) = Sarr(I, Col)
        Else
            Darr(.Item(Sarr(I, 1)), Col) = _
            Darr(.Item(Sarr(I, 1)), Col) + Sarr(I, Col)
        End If
    Next
End With
Sheet2.Range("A3:I65000").ClearContents
Sheet2.[B3].Resize(K, Col) = Darr
[COLOR=#ff0000]Sarr = Sheet2.Range("B3", Sheet2.[B65536].End(3)).Resize(, Col).Value[/COLOR]
[COLOR=#ff0000] For I = 1 To UBound(Sarr)[/COLOR]
[COLOR=#ff0000]    M = M + 1[/COLOR]
[COLOR=#ff0000]     For J = 1 To Col[/COLOR]
[COLOR=#ff0000]        Darr(M, 1) = M[/COLOR]
[COLOR=#ff0000]        Darr(M, 2) = Sarr(I, 1)[/COLOR]
[COLOR=#ff0000]        Darr(M, 3) = Sarr(I, 2)[/COLOR]
[COLOR=#ff0000]        Darr(M, 4) = Sarr(I, 7)[/COLOR]
[COLOR=#ff0000]        Darr(M, 5) = Sarr(I, 8) / Sarr(I, 4) / Sarr(I, 5)[/COLOR]
[COLOR=#ff0000]        Next[/COLOR]
[COLOR=#ff0000]        Next[/COLOR]
[COLOR=#ff0000]        Sheet2.[K3].Resize(M, 5) = Darr[/COLOR]
End Sub

Dồn thằng dưới (Màu đỏ) lên trên luôn phải không?
PHP:
Private Sub Worksheet_Activate()
Dim sArr(), dArr(), I As Long, K As Long, J As Long, Tem As String, Num As Double
sArr = Sheet1.Range("A3", Sheet1.[B65536].End(3)).Resize(, 9).Value
ReDim dArr(1 To UBound(sArr, 1), 1 To 15)
With CreateObject("Scripting.Dictionary")
    For I = 1 To UBound(sArr, 1)
        Tem = sArr(I, 2)
        Num = sArr(I, 9) / sArr(I, 5) / sArr(I, 6)
        If Not .Exists(Tem) Then
            K = K + 1
            .Add Tem, K
            For J = 1 To 9
               dArr(K, J) = sArr(I, J)
            Next
            dArr(K, 11) = K
            dArr(K, 12) = sArr(I, 2)
            dArr(K, 13) = sArr(I, 3)
            dArr(K, 14) = sArr(I, 8)
            dArr(K, 15) = Num
        Else
            dArr(.Item(Tem), 9) = dArr(.Item(Tem), 9) + sArr(I, 9)
            dArr(.Item(Tem), 15) = dArr(.Item(Tem), 15) + Num
        End If
    Next
End With
With Sheet2
    .Range("A3:O1000").ClearContents
    If K Then .[A3].Resize(K, 15) = dArr
End With
End Sub
 
Dồn thằng dưới (Màu đỏ) lên trên luôn phải không?
PHP:
Private Sub Worksheet_Activate()
Dim sArr(), dArr(), I As Long, K As Long, J As Long, Tem As String, Num As Double
sArr = Sheet1.Range("A3", Sheet1.[B65536].End(3)).Resize(, 9).Value
ReDim dArr(1 To UBound(sArr, 1), 1 To 15)
With CreateObject("Scripting.Dictionary")
    For I = 1 To UBound(sArr, 1)
        Tem = sArr(I, 2)
        Num = sArr(I, 9) / sArr(I, 5) / sArr(I, 6)
        If Not .Exists(Tem) Then
            K = K + 1
            .Add Tem, K
            For J = 1 To 9
               dArr(K, J) = sArr(I, J)
            Next
            dArr(K, 11) = K
            dArr(K, 12) = sArr(I, 2)
            dArr(K, 13) = sArr(I, 3)
            dArr(K, 14) = sArr(I, 8)
            dArr(K, 15) = Num
        Else
            dArr(.Item(Tem), 9) = dArr(.Item(Tem), 9) + sArr(I, 9)
            dArr(.Item(Tem), 15) = dArr(.Item(Tem), 15) + Num
        End If
    Next
End With
With Sheet2
    .Range("A3:O1000").ClearContents
    If K Then .[A3].Resize(K, 15) = dArr
End With
End Sub
Em muốn kết quả tính từ sheet 1 qua sheet 2 ra giống cột K:O luôn không cần dữ liệu cột A:I
Nhưng kết quả cột K:O nằm tại vị trí cột A
File của em có nội dụng như sau
Tính tổng các mà hàng trùng nhau sau đó chia cho cột F và chia tiếp cột E .
Cám ơn anh đã bỏ thời gian chỉ giúp.
 
Lần chỉnh sửa cuối:
Em muốn kết quả tính từ sheet 1 qua sheet 2 ra giống cột K:O luôn không cần dữ liệu cột A:I
Nhưng kết quả cột K:O nằm tại vị trí cột A
File của em có nội dụng như sau
Tính tổng các mà hàng trùng nhau sau đó chia cho cột F và chia tiếp cột E .
Cám ơn anh đã bỏ thời gian chỉ giúp.

Đọc câu này mà hiểu được ý bạn muốn chắc là "thiên tài"
Mình muốn code trả về kết quả trực tiếp tại A3 mà không cần bổ sung thêm phần code màu đỏ
PHP:
Private Sub Worksheet_Activate()
Dim sArr(), dArr(), I As Long, K As Long, J As Long, Tem As String, Num As Double
sArr = Sheet1.Range("A3", Sheet1.[B65536].End(3)).Resize(, 9).Value
ReDim dArr(1 To UBound(sArr, 1), 1 To 5)
With CreateObject("Scripting.Dictionary")
    For I = 1 To UBound(sArr, 1)
        Tem = sArr(I, 2)
        Num = sArr(I, 9) / sArr(I, 5) / sArr(I, 6)
        If Not .Exists(Tem) Then
            K = K + 1
            .Add Tem, K
            dArr(K, 1) = K
            dArr(K, 2) = sArr(I, 2)
            dArr(K, 3) = sArr(I, 3)
            dArr(K, 4) = sArr(I, 8)
            dArr(K, 5) = Num
        Else
            dArr(.Item(Tem), 5) = dArr(.Item(Tem), 5) + Num
        End If
    Next
End With
With Sheet2
    .Range("A3:E1000").ClearContents
    If K Then .[A3].Resize(K, 5) = dArr
End With
End Sub
 
Đọc câu này mà hiểu được ý bạn muốn chắc là "thiên tài"

PHP:
Private Sub Worksheet_Activate()
Dim sArr(), dArr(), I As Long, K As Long, J As Long, Tem As String, Num As Double
sArr = Sheet1.Range("A3", Sheet1.[B65536].End(3)).Resize(, 9).Value
ReDim dArr(1 To UBound(sArr, 1), 1 To 5)
With CreateObject("Scripting.Dictionary")
    For I = 1 To UBound(sArr, 1)
        Tem = sArr(I, 2)
        Num = sArr(I, 9) / sArr(I, 5) / sArr(I, 6)
        If Not .Exists(Tem) Then
            K = K + 1
            .Add Tem, K
            dArr(K, 1) = K
            dArr(K, 2) = sArr(I, 2)
            dArr(K, 3) = sArr(I, 3)
            dArr(K, 4) = sArr(I, 8)
            dArr(K, 5) = Num
        Else
            dArr(.Item(Tem), 5) = dArr(.Item(Tem), 5) + Num
        End If
    Next
End With
With Sheet2
    .Range("A3:E1000").ClearContents
    If K Then .[A3].Resize(K, 5) = dArr
End With
End Sub
Cám ơn anh rất nhiều.
 
Web KT

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

Back
Top Bottom