Thắc mắc về hàm UDF UniqueList (1 người xem)

Liên hệ QC

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

Hoàng Trọng Nghĩa

Chuyên gia GPE
Thành viên BQT
Moderator
Tham gia
17/8/08
Bài viết
8,662
Được thích
16,720
Giới tính
Nam
PHP:
Function UniqueList(ParamArray sArray())
  Dim Item, TmpArr, SubArr
  On Error Resume Next
  With CreateObject("Scripting.Dictionary")
    For Each SubArr In sArray
      TmpArr = SubArr
      If TypeName(TmpArr) <> "Variant()" Then
        If TmpArr <> "" Then .Add TmpArr, ""
      Else
        For Each Item In TmpArr
          If Item <> "" Then
            If Not .Exists(Item) Then .Add Item, ""
          End If
        Next
      End If
    Next
    UniqueList = .Keys
  End With
End Function


Nếu làm từ AdvancedFilter thì không nói gì:

PHP:
Sub TEST2()
  With Range([A2], [A65536].End(xlUp))
    .AdvancedFilter Action:=xlFilterInPlace, Unique:=True
    .Resize(, 7).Copy [J17]
  End With
  ActiveSheet.ShowAllData
End Sub

nhưng làm theo hàm UniqueList của Thầy ndu96081631 thì không thể thực hiện được.

Tôi làm thủ tục như sau:

PHP:
Sub TEST()
  Dim Arr1
  With Range([A3], [A65536].End(xlUp)).Resize(, 7)
    Arr1 = UniqueList(.Cells)
    [J17].Resize(UBound(Arr1, 1), 7).Value = WorksheetFunction.Transpose(Arr1)
  End With
End Sub

Kết quả ra hoàn toàn không như ý.

Xin hướng dẫn thủ tục sử dụng hàm này cho đúng.

Cám ơn rất nhiều!
 

File đính kèm

Lần chỉnh sửa cuối:
Trời ơi, nhờ 2 Sư phụ mà em học nhiều điều từ mãng quá, đúng là nhờ thực tế mà em đã học được thật nhiều, chứ đọc không vẫn không hiểu nổi, phải làm thử, làm thử rồi mới hơi hiểu hiểu được và nhờ các Thầy mới thông suốt được.

Hai Sư phụ mà gần đây thì mời hai Sư phụ vào Two Dream cho cái vụ mãng này rồi, thêm Hải mã Nhân sâm nữa, ui da....
 
Upvote 0
Không được đâu...
Bạn thí nghiệm thế này sẽ thấy:
- Giữ nguyên code của bạn
- Gõ gì đó vào J1:J10
- Chạy code
===> Sẽ thấy cột J bị xóa sạch
Trong file dữ liệu thật của tác giả cũng thấy xoá hết trước khi gán kết quả xuống. Vậy thì bỏ trống 1 cột trong Array không sao cả.

Ngoài ra, nếu cần giữ lại 1 cột ở giữa, thì cũng vẫn có cách: Thay vì 1 Array KQ, dùng 2 Array:
1 Array 2 cột, lấy giá trị cột 1 và 6, gán xuống đây,
1 Array 1 cột, lấy giá trị cột 3, gán xuống kia
Cả 2 Array này cũng chỉ dùng 1 vòng For ... next gán vào.
 
Upvote 0
Trời ơi, nhờ 2 Sư phụ mà em học nhiều điều từ mãng quá, đúng là nhờ thực tế mà em đã học được thật nhiều, chứ đọc không vẫn không hiểu nổi, phải làm thử, làm thử rồi mới hơi hiểu hiểu được và nhờ các Thầy mới thông suốt được.

Hai Sư phụ mà gần đây thì mời hai Sư phụ vào Two Dream cho cái vụ mãng này rồi, thêm Hải mã Nhân sâm nữa, ui da....
Thằng "Dít To" và Mảng hơi bị mơ hồ, tìm hiểu thì phải tìm từ cái dễ & đơn giản nhất, lao vào cái hàm ....của Thầy ndu thì.....u đầu là phải rồi, còn la làng chi nữa
Trong file của em gởi lên, nếu vì lý do nào đó không sử dụng Pivot thì chơi nó bằng Sub lọc bình thường thôi chứ sao lại lấy cái hàm "hóc búa" vào sử dụng (cái hàm đó để tìm hiểu, học tập thì Ok ), dùng sự kiện Active của Worksheet hoặc cái chi chi cũng được
Mã:
Private Sub Worksheet_Activate()
Dim d, Vung, Mg(), Ws, I, K, Socot, CotLay
    Set d = CreateObject("scripting.dictionary")
    Set Ws = Sheets("CSDL")
    Vung = Ws.Range(Ws.[a2], Ws.[a50000].End(xlUp)).Resize(, 9).Value
    ReDim Mg(1 To UBound(Vung), 1 To 4)
        For I = 1 To UBound(Vung)
            If Not d.exists(Vung(I, 1)) Then
                K = K + 1
                d.Add Vung(I, 1), Nothing
                Mg(K, 1) = Vung(I, 1): Mg(K, 2) = Vung(I, 9): Mg(K, 4) = Vung(I, 7)
            End If
        Next I
    [a2:d10000].ClearContents
    [a2].Resize(d.Count, 4) = Mg
End Sub
Mà cột tổng trọng lượng mắc mớ gì làm sau, em "Đít to" & mảng phối hợp với nhau cộng dồn cùng lúc với các cột kia luôn
Còn muốn tổng quát hơn tí, muốn lấy các cột không liền kề mà nhảy cóc tùm lum ta có thể làm như thế này:
Mã:
Public Sub DiTTo()
    Dim d, Vung, Mg(), Ws, I, J, K, Socot, CotLay, Tam, SoMang, Cot
    Set d = CreateObject("scripting.dictionary")
    Set Ws = Sheets("CSDL")
    Vung = Ws.Range(Ws.[a2], Ws.[a50000].End(xlUp)).Resize(, 9).Value
    Socot = Application.InputBox("Nhap so cot cua mang", , , , , , , 1)
    CotLay = Application.InputBox("Nhap stt Mang & sô cot muon lay")
    ReDim Mg(1 To UBound(Vung), 1 To Socot)
        For I = 1 To UBound(Vung)
            If Not d.exists(Vung(I, 1)) Then
                K = K + 1
                d.Add Vung(I, 1), Nothing
                Tam = Split(CotLay, ",")
                    For J = 1 To Socot
                        SoMang = Val(Left(Tam(J - 1), InStr(Tam(J - 1), "-") - 1))
                        Cot = Val(Right(Tam(J - 1), Len(Tam(J - 1)) - InStr(Tam(J - 1), "-")))
                        Mg(K, SoMang) = Vung(I, Cot)
                    Next J
            End If
        Next I
    [a2:d10000].ClearContents
    [a2].Resize(d.Count, SoCot) = Mg
End Sub
Khi chạy code, xuất hiện bảng nhập số cột của mảng kết quả, thí dụ là 4
Ok, xuất hiện tiếp bảng muốn lấy kết quả ở cột nào, cú pháp (thí dụ) nhập:
1-1,2-6,3-9,4-5
Có nghĩa là: cột 1 của mảng kết quả sẽ lấy dữ liệu cột 1 của vùng dữ liệu lọc mà mình đã khai báo
Tương tự: cột 2 của mảng lấy cột 6 của vùng lọc; cột 3 của mảng lấy cột 9 của vùng lọc....
(Dĩ nhiên ta cũng có thể khai báo cột muốn lọc trong vùng lọc nếu thấy cần)
Thân
Còn nếu chưa hiểu em "Đít to" thì mời tớ 5 ve tớ "Chỏ chi"
Làm đại (do chợt nghĩ ra) nên chưa test hết các vấn đề có thể nảy sinh, Minhthien thử nhé
 
Lần chỉnh sửa cuối:
Upvote 0
Sau khi tập tành làm việc với Hàm mảng, lại làm phiền tiếp các Sư phụ rồi!

Nếu như tính tổng ở mảng ở cột thứ 3, xử lý luôn trên mảng thì phải làm thế nào?

Mã:
Private Sub LocVaSumIf()
  Sheet2.Range("A2:D8").ClearContents
  If CSDL.[A2] = "" Then Exit Sub
  Dim i As Long, sArray, Arr1, Arr2
  sArray = Range(CSDL.[A2], CSDL.[A65536].End(xlUp)).Resize(, 12)
  Arr1 = Unique2DArray(sArray, 11, False)
  
  ReDim Arr2(1 To UBound(Arr1, 1), 1 To 4)

  For i = 1 To UBound(Arr1, 1)
    Arr2(i, 1) = Arr1(i, 11)
    Arr2(i, 2) = Arr1(i, 1)
    [COLOR=#ff0000][B]'Arr2(i, 3) = Arr1(i, 6) [/B][/COLOR][COLOR=#006400][B]'<< Tính SUMIF theo Mã tại cột 1, trọng lượng tại cột 6 cho từng phần tử thì tính như thế nào? [/B][/COLOR]
    Arr2(i, 4) = Arr1(i, 2)
  Next

  If IsArray(Arr2) Then Sheet2.Range("A2").Resize(UBound(Arr2, 1), 4).Value = Arr2
End Sub

Xin cảm ơn rất nhiều!
 

File đính kèm

Upvote 0
Sau khi tập tành làm việc với Hàm mảng, lại làm phiền tiếp các Sư phụ rồi!

Nếu như tính tổng ở mảng ở cột thứ 3, xử lý luôn trên mảng thì phải làm thế nào?

Mã:
Private Sub LocVaSumIf()
  Sheet2.Range("A2:D8").ClearContents
  If CSDL.[A2] = "" Then Exit Sub
  Dim i As Long, sArray, Arr1, Arr2
  sArray = Range(CSDL.[A2], CSDL.[A65536].End(xlUp)).Resize(, 12)
  Arr1 = Unique2DArray(sArray, 11, False)
  
  ReDim Arr2(1 To UBound(Arr1, 1), 1 To 4)

  For i = 1 To UBound(Arr1, 1)
    Arr2(i, 1) = Arr1(i, 11)
    Arr2(i, 2) = Arr1(i, 1)
    [COLOR=#ff0000][B]'Arr2(i, 3) = Arr1(i, 6) [/B][/COLOR][COLOR=#006400][B]'<< Tính SUMIF theo Mã tại cột 1, trọng lượng tại cột 6 cho từng phần tử thì tính như thế nào? [/B][/COLOR]
    Arr2(i, 4) = Arr1(i, 2)
  Next

  If IsArray(Arr2) Then Sheet2.Range("A2").Resize(UBound(Arr2, 1), 4).Value = Arr2
End Sub

Xin cảm ơn rất nhiều!
Muốn SUMIF thì phải SUM ngay từ đầu ---> Lọc Unique xong thì SUM nỗi gì chứ
Đây là 1 yêu cầu riêng nên e rằng phải viết riêng 1 sub chỉ xài riêng cho công việc này thôi, tức bỏ hàm Unique và viết lại từ đầu
 
Upvote 0
Muốn SUMIF thì phải SUM ngay từ đầu ---> Lọc Unique xong thì SUM nỗi gì chứ
Đây là 1 yêu cầu riêng nên e rằng phải viết riêng 1 sub chỉ xài riêng cho công việc này thôi, tức bỏ hàm Unique và viết lại từ đầu

Vậy làm ơn viết sub đó cho em đi ạ. Em không thể biết cách làm. Nhìn Hàm Thầy viết em còn không hiểu được, huống hồ chi là làm riêng 1 sub mới.

Cám ơn Thầy!
 
Upvote 0
Vậy làm ơn viết sub đó cho em đi ạ. Em không thể biết cách làm. Nhìn Hàm Thầy viết em còn không hiểu được, huống hồ chi là làm riêng 1 sub mới.

Cám ơn Thầy!

Sao không dùng code của cò già, có gợi ý tính tổng rồi đó?
Hay là sợ vụ "chỏ chi" với "chỉ cho"? Cỡ Cò già cũng đã làm sư phụ vô khối người rồi đó chứ bộ!
 
Lần chỉnh sửa cuối:
Upvote 0
Sao không dùng code của cò già, có tính tổng rồi đó?
Hay là sợ vụ "chỏ chi" với "chỉ cho"? Cỡ Cò già cũng đã làm sư phụ vô khối người rồi đó chứ bộ!

Thật ra em không rành thuật toán này lắm, ngay từ đầu em đã nói vậy. Kế nữa Code của Concogia em test thấy có nhiều lỗi phát sinh, hàng cột của em thì lộn xộn cho nên em không thể làm theo cái InputBox đó được, chép về rồi test rồi để đó chứ chưa giải quyết được. Nói chung là cụ thể một chút thì em nghiên cứu, nghiền ngẫm sẽ hiểu dần dần, mới nhớ cách làm được.

Sau khi em lọc duy nhất xong thì làm thêm thủ tục này, tuy nhiên đối với em thì sao cũng được, nhưng người hiểu biết sẽ cười, đã xử lý trên mảng mà còn thế này:

PHP:
Sub SumIFW()
  Dim Rng As Range
  Set Rng = Range(CSDL.[K2], CSDL.[K65536].End(xlUp))
  For i = 2 To Sheet2.[A65536].End(xlUp).Row
    Sheet2.Range("C" & i) = WorksheetFunction.SumIf(Rng, Sheet2.Range("A" & i), Rng.Offset(, -5))
  Next
End Sub

Hì hì, cái vụ "Chỏ chi" thì dễ ẹc chứ có gì đâu Sư phụ! Em và Concogia gặp nhau hà rầm, mới nhậu cách vài ngày đó thôi!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Thật ra em không rành thuật toán này lắm, ngay từ đầu em đã nói vậy. Kế nữa Code của Concogia em test thấy có nhiều lỗi phát sinh, hàng cột của em thì lộn xộn cho nên em không thể làm theo cái InputBox đó được, chép về rồi test rồi để đó chứ chưa giải quyết được. Nói chung là cụ thể một chút thì em nghiên cứu, nghiền ngẫm sẽ hiểu dần dần, mới nhớ cách làm được.

Sau khi em lọc duy nhất xong thì làm thêm thủ tục này, tuy nhiên đối với em thì sao cũng được, nhưng người hiểu biết sẽ cười, đã xử lý trên mảng mà còn thế này:

PHP:
Sub SumIFW()
  Dim Rng As Range
  Set Rng = Range(CSDL.[K2], CSDL.[K65536].End(xlUp))
  For i = 2 To Sheet2.[A65536].End(xlUp).Row
    Sheet2.Range("C" & i) = WorksheetFunction.SumIf(Rng, Sheet2.Range("A" & i), Rng.Offset(, -5))
  Next
End Sub

Hì hì, cái vụ "Chỏ chi" thì dễ ẹc chứ có gì đâu Sư phụ! Em và Concogia gặp nhau hà rầm, mới nhậu cách vài ngày đó thôi!
Lọc duy nhất & cộng dồn dùng "Đit to" & mảng cũng không đến nỗi khó lắm, bài của Minhthien chỉ cần thế này thôi
Mã:
Public Sub KhoHieuQua()
Dim d, Vung, Mg(), Ws, I, K, kK
    Set d = CreateObject("scripting.dictionary")
    Set Ws = Sheets("CSDL")
    Vung = Ws.Range(Ws.[a2], Ws.[a50000].End(xlUp)).Resize(, 12).Value
    ReDim Mg(1 To UBound(Vung), 1 To 4)
        For I = 1 To UBound(Vung)
            If Not d.exists(Vung(I, 1)) Then
                K = K + 1
                [I][B]d.Add Vung(I, 1), K
[/B][/I]              Mg(K, 1) = Vung(I, 1): Mg(K, 2) = Vung(I, 9): Mg(K, 3) = Vung(I, 12): Mg(K, 4) = Vung(I, 7)
            Else
                kK = d.Item(Vung(I, 1))
                Mg(kK, 3) = Mg(kK, 3) + Vung(I, 12)
            End If
        Next I
    [a2:d10000].ClearContents
    [a2].Resize(d.Count, 4) = Mg
End Sub
Cách làm (gọi "thuật toán" nghe nó sao sao í ):
Dùng Dictionary kiểm tra xem dũ liệu tuần tự ở cột A sheet "CSDL" có trong Dic chưa :
- Trường hợp chưa có thì gán dữ liệu đó vào Dic, gán Item của Dic là K (chỗ in đậm & nghiêng) đồng thời gán dữ liệu vào mảng. Cột thứ 3 của mảng sẽ gán cột "Trọng lượng" ( cột 12)
- Trường hợp có rồi thì dùng câu lệnh kK = d.Item(Vung(I, 1)) kiếm xem cái thằng đang dò mà có rồi nó nằm ở hàng thứ mấy trong mảng, lôi cổ thằng đó ra lấy cột thứ 3 ( cột trọng lượng) cộng với thằng mình đang dò "Vung(I,12)"
Híc, hổng biết rõ chưa nữa ???
 
Lần chỉnh sửa cuối:
Upvote 0
Thật ra em không rành thuật toán này lắm, ngay từ đầu em đã nói vậy. Kế nữa Code của Concogia em test thấy có nhiều lỗi phát sinh, hàng cột của em thì lộn xộn cho nên em không thể làm theo cái InputBox đó được, chép về rồi test rồi để đó chứ chưa giải quyết được. Nói chung là cụ thể một chút thì em nghiên cứu, nghiền ngẫm sẽ hiểu dần dần, mới nhớ cách làm được.

Sau khi em lọc duy nhất xong thì làm thêm thủ tục này, tuy nhiên đối với em thì sao cũng được, nhưng người hiểu biết sẽ cười, đã xử lý trên mảng mà còn thế này:

PHP:
Sub SumIFW()
  Dim Rng As Range
  Set Rng = Range(CSDL.[K2], CSDL.[K65536].End(xlUp))
  For i = 2 To Sheet2.[A65536].End(xlUp).Row
    Sheet2.Range("C" & i) = WorksheetFunction.SumIf(Rng, Sheet2.Range("A" & i), Rng.Offset(, -5))
  Next
End Sub

Hì hì, cái vụ "Chỏ chi" thì dễ ẹc chứ có gì đâu Sư phụ! Em và Concogia gặp nhau hà rầm, mới nhậu cách vài ngày đó thôi!
Thật ra viết 1 hàm (hoặc 1 sub) để trích lọc duy nhất và tính tổng thật sự không có vấn đề
Ví dụ trích lọc dữ liệu có 5 cột, trong đó 4 cột đầu trích lọc duy nhất, cột thứ 5 cộng dồn
Điều băn khoăn của tôi ở đây là khi trích lọc ra, bạn lại đảo lộn trật tự các cột so với dữ liệu gốc... đã vậy còn lấy kết quả cách cột (không liên tục) nên không biết làm sao để viết hàm cho tổng quát
Còn nếu chỉ phục vụ cho đúng file này thì viết vầy:
PHP:
Sub Test()
  Dim sArray, i As Long, iR As Long, Tmp, Arr()
  On Error Resume Next
  Sheet2.Range("A2:D10000").ClearContents
  sArray = CSDL.Range(CSDL.[A2], CSDL.[A65536].End(xlUp)).Resize(, 12).Value
  ReDim Arr(1 To UBound(sArray, 1), 1 To 4)
  With CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(sArray, 1)
      If sArray(i, 11) <> "" Then
        Tmp = sArray(i, 11) '<--- Day la cai can loc duy nhat
        If Not .Exists(Tmp) Then
          iR = iR + 1
          .Add Tmp, iR
          Arr(iR, 1) = Tmp
          Arr(iR, 2) = sArray(i, 1)
          Arr(iR, 3) = sArray(i, 6) '<--- Cot nay can cong don
          Arr(iR, 4) = sArray(i, 2)
        Else
          Arr(.Item(Tmp), 3) = Arr(.Item(Tmp), 3) + sArray(i, 6)
        End If
      End If
    Next
  End With
  If iR Then Sheet2.Range("A2").Resize(iR, 4).Value = Arr
End Sub
 
Upvote 0
Ẹc, nếu không chọc tức thì Cò đâu có ra tay. Bài trước của Cò chỉ nhá cho người ta thèm thôi

Cò viết lại lấy tham số truyền chẳng hạn như các tham số: cột cần lọc, cột cần lấy, cột cần tính tổng. Dẫu chỉ là sub nhưng cũng có thể tổng quát.
 
Lần chỉnh sửa cuối:
Upvote 0
Cò viết lại lấy tham số truyền chẳng hạn như các tham số: cột cần lọc, cột cần lấy, cột cần tính tổng. Dẫu chỉ là sub nhưng cũng có thể tổng quát.
Nếu phải viết ở mức tổng quát thì chổ này em chẳng biết viết sao nữa... Ví dụ:
- Lấy 6 cột theo trật tự: 5, 7, 2, 1, 8, 12
- Cột cần lọc duy nhất là cột 5
- Cột cần SUMIF là cột 2 và 12 (đương nhiên SUMIF theo cột 5)
Vậy viết 1 Function hoặc sub với tham số truyền sẽ viết.. sao đây?
------------------
Bài toán này nếu là PivotTale nó làm cái rẹt ra ngay (chỉ là chổ cần SUM buộc phải nằm về bên phải)
 
Upvote 0
Hay thật, nhìn thuật toán của Bác Cò và của Thầy NDU gần như là giống nhau hoàn toàn, chỉ khác tên biến.

Bảo đảm chừng vài năm nữa em sẽ làm tốt đối với mảng. Từ trước đến nay chỉ mê những thủ thuật (màu mè đó) mà không chú ý tới xử lý mảng, dữ liệu nên chưa quan tâm đến. Giờ sẽ chuyên cần nghiên cứu vấn đề này.

Cám ơn các Thầy đã quan tâm nhé!
 
Upvote 0
Mình nghĩ yêu cầu của Minhthien chắc cũng làm được, truyền tham số vào các cột lấy dữ liệu chỉ cần 1 số, còn cột mảng kết quả mặc định bắt đầu chạy từ 1. Cột dùng để lọc cũng dễ rồi, chỉ có cột cộng dồn, chắc phải có dấu hiệu riêng khi truyền tham số lấy các cột kết quả để lôi mấy em đó ra mà cộng.
Thí du : 3,4,+5,12,6,+7 ==> cột 1 của mảng kết quả lấy cột 3, ...,cột 3 của mảng kết quả lấy cột 5 ( cộng dồn).....Mới nghĩ trong đầu thế thôi
Mà cái yêu cầu này cũng ngộ
Híc
 
Upvote 0
tham số truyền thí dụ vầy:

PHP:
Sub UniqueAndSum(sArray, ArrCols , UniqueCol, SumCol)
...
End Sub

PHP:
Sub Test()
UniqueAndSum Range("A1:K2000"), Array(1, 3, 7, 4), 3, 7
Ẹc ẹc
End Sub
Tức là lọc duy nhất theo cột 3 của range A1:K2000, lấy 4 cột 1, 3, 7 ,4 theo thứ tự, trong đó cột 7 tính SumIf theo cột 3
Nếu Sum nhiều cột thì ArrSumCol (nhưng chua, không làm được với 1 Dic)
 
Lần chỉnh sửa cuối:
Upvote 0
tham số truyền thí dụ vầy:

PHP:
Sub UniqueAndSum(sArray, ArrCols , UniqueCol, SumCol)
...
End Sub

PHP:
Sub Test()
UniqueAndSum Range("A1:K2000"), Array(1, 3, 7, 4), 3, 7
Ẹc ẹc
End Sub
Tức là lọc duy nhất theo cột 3 của range A1:K2000, lấy 4 cột 1, 3, 7 ,4 theo thứ tự, trong đó cột 7 tính SumIf theo cột 3
Nếu Sum nhiều cột thì ArrSumCol (nhưng chua, không làm được với 1 Dic)
Cũng chỉ cần 1 Dic thôi sư phụ à! Code của em ở trên đánh dấu vị trí iR, từ đó truy xuất thôi
 
Upvote 0
Cũng chỉ cần 1 Dic thôi sư phụ à! Code của em ở trên đánh dấu vị trí iR, từ đó truy xuất thôi
Ẹc, 1 Dic chỉ có 1 key và 1 Item. Key thì đã dùng cho duy nhất, Item thì dùng để cộng dồn. Cộng dồn 1 field thôi chứ? Làm sao cộng dồn cho 2 field riêng rẽ?
Nghĩa là 2 cột cần 2 sumif chứ không phải sumif 2 cột vào 1.
Với lại, nếu dùng ArrSumCol, chưa biết trong đó có bao nhiêu phần tử à nha.
 
Upvote 0
Ẹc, 1 Dic chỉ có 1 key và 1 Item. Key thì đã dùng cho duy nhất, Item thì dùng để cộng dồn. Cộng dồn 1 field thôi chứ? Làm sao cộng dồn cho 2 field riêng rẽ?
Nghĩa là 2 cột cần 2 sumif chứ không phải sumif 2 cột vào 1.
Hổng phải vậy! Item của em không dùng để cộng dồn mà để ĐÁNH DẤU VỊ TRÍ sư phụ à (vị trí là iR)
Từ đây ArrKQ sẽ cộng dồn theo vị trí iR tìm đươc
 
Upvote 0
Web KT

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

Back
Top Bottom