Các câu hỏi về lọc ra danh sách duy nhất (loại bỏ dữ liệu trùng)

Liên hệ QC
Hiểu rôi...
Ái chà... bài toán này khó nhai à nha... chưa nghĩ ra dc cách nào dùng công thức cả... Còn VBA thì sao nhỉ?

Tôi đề nghị thế này:
Dử liệu thật của bạn như thế nào thì đưa lên luôn đi, vì đã có 1 số trường hợp khi mọi người làm xong mới phát hiện thì ra dử liệu thật ko giống với những gì mà các bạn nói ngay lúc đầu... Khi ấy lại mất công người trợ giúp làm lại mọi thứ...
Nên nhớ rằng thuật toán phải dựa vào dử liệu thực tế, dử liệu khác 1 chút cũng làm cho kết quả khác đi...
Mến
ANH TUẤN
 
Bằng VBA đây, bạn tạm xài nha!

PHP:
Option Explicit
Sub CountIf()
 Const ChuCai As String = "ABCDEFGHIJKLMNOPQRTSUVWXYZ"
 Dim lRow As Long, jj As Long
 Dim bZ As Byte, bW As Byte, bDem As Byte, iDd As Byte
 Dim StrC As String, SDaDem As String, sChu As String
 
 lRow = Sheets("S0").[h65432].End(xlUp).Row
 For jj = 2 To lRow
    With Cells(jj, 8)
        StrC = .Value:                  iDd = Len(Trim(StrC))
        For bW = 1 To iDd
            sChu = Mid(StrC, bW, 1)
            If InStr(1, SDaDem, sChu) = 0 Then
                If InStr(1, ChuCai, sChu) > 0 Then
                    SDaDem = SDaDem & sChu
                    bDem = 1 + bDem
            End If:                     End If
        Next bW
        .Offset(, 1) = bDem:            bDem = 0
    End With
 Next jj
     
End Sub

Mã:
   So Cont       Dem
    A,B,C         3
      D           1
      F           1
     E,G          2
     A,G          0
    B,C,H         1
 
Em gởi cho anh nhé, Support em cái
 

File đính kèm

  • Test.xls
    15 KB · Đọc: 108
He... he... Thấy chưa! Cũng may tôi lường trước dc vụ này nên nói bạn đưa file lên... Giờ nhìn vào dử liệu thực tế thì cái Sub của anh Sa cũng die luôn!
Để xem... Bài toán này quả là "thắt cổ" đây!
 
Thử hàm này xem. Chú ý đối số rText là vùng các ô cầm đếm.

Mã:
Function DemABC(rText As Range) As Integer
Dim myCell As Range
Dim abc As String, kytu As String, chuoi As String, vt As Integer, i As Integer
For Each myCell In rText
  chuoi = myCell.Value & ","
  vt = 1
  Do
    vt = InStr(vt, chuoi, ",")
    If vt > 0 Then
      kytu = Trim(Mid(chuoi, 1, vt - 1))
      If InStr(1, abc, kytu) = 0 Then
        abc = abc & Trim(Mid(chuoi, 1, vt - 1))
        i = i + 1
      End If
      chuoi = Mid(chuoi, vt + 1)
      If chuoi = "" Then Exit Do
    Else
      vt = 1
    End If
  Loop
Next
DemABC = i
End Function
 

File đính kèm

  • Test.xls
    23 KB · Đọc: 148
Các bác VBA đã có đáp số rùi, còn các bác công thức thì sao, hãy cùng cố lên!$@!!
 
Thêm một tham khảo, nha!

Các bác VBA hãy cùng cố lên!$@!!
PHP:
Option Explicit

Sub Dem0Trung()
 Dim lRow As Long, Jj As Long
 Dim StrC As String, sLuu As String, SChu As String
 Dim DoDai As Byte, bDauPhay As Byte, bDem As Byte
 
 lRow = Sheets("Sheet1").[j65432].End(xlUp).Row
 For Jj = 10 To lRow
    With Cells(Jj, 10)
        StrC = .Value & ",GPE.COM"
        DoDai = Len(StrC):
        Do
            bDauPhay = InStr(StrC, ",")
            If bDauPhay = 0 Then
                Exit Do
            Else
                SChu = Mid(StrC, 1, bDauPhay - 1)
                StrC = Mid(StrC, bDauPhay + 1)
                If InStr(sLuu, SChu) = 0 Then
                    sLuu = sLuu & SChu
                    bDem = bDem + 1
                End If
            End If
        Loop
        .Offset(, 1) = bDem:        bDem = 0
    End With
 Next Jj
End Sub
 
Các bác VBA đã có đáp số rùi, còn các bác công thức thì sao, hãy cùng cố lên!$@!!
Cái này ngay từ đâu tôi có nghĩ qua, nhưng e rằng ko khả thi... Vì nếu làm dc thì 1 là sẽ tốn rất nhiều cột phụ, còn 2 nếu dùng mãng thì e rằng cai mãng ấy thật.. khủng khiếp!
ANH TUẤN
 
--=0Có thể giúp mình tạo một hàm riêng cho excell được ko?
 
Mừng quá, đã lâu lắm mới có người cho ôn lại hàm mảng tự tạo

--=0Có thể giúp mình tạo một hàm riêng cho excell được ko?
Đọc kỷ hướng dẫn trước khi dùng
(Do mình hết cota đưa files lên; đang đi xin thêm, nên thuyết minh kỹ chút vậy)
1* Bạn chép nội dung hàm vô CS VBE
(Nếu bạn thả nó đúng vị trí, thì khi vô menu Insert -> Function. . .Thì trong CS Insert Function ở ngăn 'Or select a category' dòng cuối sẽ có tên hàm tự tạo này.)
2. Dữ liệu của bạn về Container đang tại vùng 'J10:J17'
Bạn tô chọn vùng 'K10:K17' hay vùng 'L10:L17'
Và vô menu Insert => Function. . . Chọn dòng hàm tự tạo DemContaner
Khi CS của excel iêu cầu bạn nhập vùng cần tính, bạn nhập (hay dùng chuột) bôi chọn vùng 'J10:J17"
3. Vì là hàm mảng, nên bạn phải kết thúc bằng tổ hợp 3 phím thân thương

PHP:
Option Explicit: Option Base 1
Dim MDL()
Function DemContainer(Rng As Range) As Variant
 Dim Clls As Range
 ReDim MDL(Rng.Rows.Count, 1)
 Dim StrC As String, SLuu As String, SNhom As String
 Dim bDPhay As Byte, bDem As Byte
 
 For Each Clls In Rng
    StrC = Clls.Value & ",GPE.COM":   bDem = bDem + 1
    Do
        bDPhay = InStr(StrC, ",")
        If bDPhay = 0 Then
            Exit Do
        Else
            SNhom = Mid(StrC, 1, bDPhay - 1)
            StrC = Mid(StrC, bDPhay + 1)
            If InStr(SLuu, SNhom) = 0 Then
                SLuu = SLuu & SNhom
                MDL(bDem, 1) = MDL(bDem, 1) + 1
            End If
        End If
    Loop
 Next Clls
 DemContainer = MDL
End Function
 
Lần chỉnh sửa cuối:
Không biết em có làm đúng hay chưa nhưng em copy cai code vào và chạy thì kết quả không như mong đợi. Mà tổ hợp 3 phím thân thương là gì vậy đại ca. Xem gium em cái.
 

File đính kèm

  • Test.xls
    26 KB · Đọc: 44
To tiencruise
Không biết em có làm đúng hay chưa nhưng em copy cai code vào và chạy thì kết quả không như mong đợi. Mà tổ hợp 3 phím thân thương là gì vậy đại ca. Xem gium em cái.
LÀ: Ctrl + Shift + Enter


To SA_DQ
Không biết em có làm đúng hay chưa nhưng em copy cai code vào và chạy thì kết quả không như mong đợi. Mà tổ hợp 3 phím thân thương là gì vậy đại ca. Xem giùm em cái.
 
Không biết em có làm đúng hay chưa nhưng em copy cai code vào và chạy thì kết quả không như mong đợi. Mà tổ hợp 3 phím thân thương là gì vậy đại ca. Xem gium em cái.
Mình mới có thêm Cota, nhưng bạn sắp xong rồi; Chỉ dẫn thêm bạn đây:
Hàm sẽ trả về sẽ là mảng giá trị; bạn chọn 1 ô nó chỉ cho ra kết quả 1 ô;
(Chắc bạn chưa xài hàm mảng nhiều!)
Từ ô bạn đã chọn đó, (trước hết bạn bỏ nội dung hàm trong đó đi); Tiếp sau bạn chọn không là 1 ô mà nhiều ô (tương đương số ô có bên dữ liệu về Container;
Nhập hàm như bạn đã làm & kết thúc bằng các phím mà bạn mới được BoỵXin gợi í!
(Còn gang tất nữa đến thiên đàng thôi! - Thiên đàn của excel!)
 
Mình đã làm xong bài toán dùng Name nhưng hơi chuối, hy vọng được chỉ giáo thêm
 

File đính kèm

  • Loc va dem.xls
    16 KB · Đọc: 147
Mình đã làm xong bài toán dùng Name nhưng hơi chuối, hy vọng được chỉ giáo thêm
Chuối thì không chuối vì đây là thành quả của một nỗ lực lớn ! Nhưng mà vẫn chưa đếm đúng , bạn thử chèn thêm đến mã thứ tư trong một ô thì ngừng đếm !
 
Chuối thì không chuối vì đây là thành quả của một nỗ lực lớn ! Nhưng mà vẫn chưa đếm đúng , bạn thử chèn thêm đến mã thứ tư trong một ô thì ngừng đếm !

Đúng vậy, vùng dữ liệu thì sửa lại dễ dàng, còn số lượng contener trong 1 iterm thì phải sửa lại công thức, khi đó muốn 4,5 hay 6... cũng được tuốt, Nếu tác giả cần bao nhiêu thì mình sửa lại bấy nhiêu chứ làm dư sợ bị hói đầu mất--=0
 
Mình góp thêm một chút cho vui.
Hàm đếm số trong từng ô:
Mã:
Option Explicit
Function Dem(vung As Range, dong As Range) As Integer
Dim cot As Integer, j As Integer, dongtren As Integer, tong As Integer
Dim StrC As Variant
Dim rngFind
cot = vung.Column
dongtren = vung.Row - 1
If InStr(dong.Value, ",") > 0 Then
    StrC = Split(dong.Value, ",")
    For j = 0 To UBound(StrC)
       Set rngFind = Range(Cells(dong.Row - 1, cot), Cells(dongtren, cot)).Find(StrC(j))
       If rngFind Is Nothing Then tong = tong + 1
    Next
           Dem = tong
Else
   Set rngFind = Range(Cells(dong.Row - 1, cot), Cells(dongtren, cot)).Find(dong)
   If rngFind Is Nothing Then tong = tong + 1
           Dem = tong
   End If
End Function
Hàm đếm tổng:
Mã:
Option Explicit
Function Demtong(vung As Range) As Integer
Dim cot As Integer, j As Integer, dongtren As Integer, tong As Integer, i As Integer, dong As Integer
Dim StrC As Variant
Dim rngFind
cot = vung.Column
dongtren = vung.Row - 1
dong = vung.Rows.Count + dongtren
For i = dong To dongtren Step -1
   If InStr(Cells(i, cot), ",") > 0 Then
        StrC = Split(Cells(i, cot), ",")
        For j = 0 To UBound(StrC)
          Set rngFind = Range(Cells(dongtren, cot), Cells(i - 1, cot)).Find(StrC(j))
          If rngFind Is Nothing Then tong = tong + 1
        Next
   Else
      Set rngFind = Range(Cells(dongtren, cot), Cells(i - 1, cot)).Find(Cells(i, cot))
      If rngFind Is Nothing Then tong = tong + 1
   End If
Next
Demtong = tong
End Function
 

File đính kèm

  • DemContener.rar
    9.6 KB · Đọc: 114
Mình xin gửi file mới được tối ưu hơn, tối đa 5 cont, các Name được tách riêng và sắp xếp theo một logic để dễ kiểm tra và thêm mới. Nếu muốn tăng số cont thì chỉ cần tăng Name theo logic là ok.
 

File đính kèm

  • Loc va dem moi.xls
    17 KB · Đọc: 110
5 cont thì còn đở... Lở mà nó có đến 20 cont thì... công thức đói luôn!
Hic...
 
Trong nổ lực 2 trong 1

Mình góp thêm một chút cho vui.
Hàm đếm số trong từng ô:
. . . .
Hàm đếm tổng:
. . . . .
Chi tiết xin xem trong file đính kèm!
PHP:
Option Explicit
Function CountContainer(Rng As Range, Hang As Byte)
 Dim lDem As Long, SoHg As Long
 Dim SoCont As Byte, bVTr As Byte, TCong As Integer
 Dim Clls As Range
 Dim StrC As String, sNhom As String, sLuu As String
 
 If Rng.Columns.Count > 1 Then
    CountContainer = "Only 1 column":           Exit Function
 Else
    SoHg = Rng.Rows.Count
    For Each Clls In Rng
        lDem = 1 + lDem:                        StrC = Clls.Value & ",GPE.COM"
        Do
            bVTr = InStr(StrC, ",")
            If bVTr = 0 Then
                Exit Do
            Else
                sNhom = Mid(StrC, 1, bVTr - 1)
                StrC = Mid(StrC, bVTr + 1)
                If InStr(sLuu, sNhom) = 0 Then
                    sLuu = sLuu & sNhom:        SoCont = 1 + SoCont
            End If:             End If
        Loop
        If Hang = lDem Then
            CountContainer = SoCont:            Exit Function
        Else
            TCong = TCong + SoCont:             SoCont = 0
        End If
    Next Clls
 End If
 CountContainer = "Tong: " & TCong
End Function
 

File đính kèm

  • GPE.COM.rar
    10.9 KB · Đọc: 105
Web KT
Back
Top Bottom