Đếm các chữ số ???

Liên hệ QC

snakend77

Thành viên mới
Tham gia
1/11/06
Bài viết
5
Được thích
0
Chào ACE!

Vui lòng chỉ giáo:
Tôi có một dòng có các ô có nội dung (Trên từng ô) lần lượt là 1A - 2A - 3B - 4C .... Làm sao để đếm được dòng đó có bao nhiêu A, B, C ??? +-+-+-+
 
Tôi có một dòng có các ô có nội dung (Trên từng ô) lần lượt là 1A - 2A - 3B - 4C .... Làm sao để đếm được dòng đó có bao nhiêu A, B, C ??? +-+-+-+
1A - 2A - 3B - 4C là giá trị tương ứng của từng ô trên 1 dòng hay là ô 1 có giá trị là A, ô 2 có giá trị là A, ô 3 có giá trị là B, ô 4 có giá trị là C ??
 
Ví dụ: A1=1A, B1=2A, C1=3B, D1=4C

Đếm chữ A: =COUNTIF(A1:D1,"*A")=2
 
Đúng như ý của Sealand đấy, tuy nhiên kết quả lại không phải như ý muốn hỏi.

Làm sao đếm (hoặc cộng ...) ra được kết quả là 3A; 3B; 4C .... cơ.
Mong tiếp tục chỉ giáo.
 
Đúng như ý của Sealand đấy, tuy nhiên kết quả lại không phải như ý muốn hỏi.

Làm sao đếm (hoặc cộng ...) ra được kết quả là 3A; 3B; 4C .... cơ.
Bạn thử code này xem sao:
Với A1:A6 là vùng chứa dữ liệu: (Sau khi gõ công thức nhớ ấn tổ hợp phím Ctrl+Shift+Enter nha:
PHP:
{=SUM(--IF(RIGHT(A1:A6)="A",SUBSTITUTE(A1:A6,"A",""),0))&"A"}

Hoặc không cần Ctrl+Shift+Enter cũng được, dùng công thức sau đây nhé bạn!
PHP:
=SUMPRODUCT(--(ISNUMBER(--SUBSTITUTE(A1:A6,"A",""))),--LEFT(A1:A6,LEN(A1:A6)-1))&"A"
Thay chữ A trong dấu nháy đôi bằng chữ bạn muốn tìm
Xem file đính kèm nha!
 

File đính kèm

Lần chỉnh sửa cuối:
Mình tham gia dùng hàm UDF xem sao

PHP:
Function demStr(Rg As Range) As String
Dim tam()
Dim i, j, so As Long
Dim ch, kq As String
If Rg Is Nothing Then Exit Function
ReDim tam(Rg.Cells.Count)
For i = 0 To Rg.Cells.Count - 1
tam(i) = Rg.Cells(i + 1)
Next
If Len(Join(tam, ";")) = UBound(tam) Then Exit Function
For i = 1 To UBound(tam)
If tam(i - 1) <> "" Then
so = Val(tam(i - 1))
ch = Replace(tam(i - 1), so, "")
For j = i To UBound(tam) - 1
If tam(j) Like "*" & ch Then
so = so + Val(tam(j))
tam(j) = ""
End If
Next
kq = kq & so & ch & ";"
End If
Next
demStr = Left(kq, Len(kq) - 1)
End Function

Kiểm tra kết quả ở cột K
 

File đính kèm

Thanks!

Mình thấy cách của Cadafi hay và ngắn gọn, hơn nữa cần phải tách các chữ số sang các cell khác nhau nên cách của bạn chưa áp dụng được ( VD mình quản lý một số công nhân, hôm nay họ làm 3 sản phẩm size S, 4M, 5XL - mai họ làm được 6XL, 3S ... mình cần biết bao nhiêu S, bao nhiêu M ... để nhân với đơn giá tương ứng của từng size). Tuy nhiên dùng hàm UDF của bạn cũng có cái hay.
 
Bạn thử code này xem sao:
Với A1:A6 là vùng chứa dữ liệu: (Sau khi gõ công thức nhớ ấn tổ hợp phím Ctrl+Shift+Enter nha:
PHP:
{=SUM(--IF(RIGHT(A1:A6)="A",SUBSTITUTE(A1:A6,"A",""),0))&"A"}
Hoặc không cần Ctrl+Shift+Enter cũng được, dùng công thức sau đây nhé bạn!
PHP:
=SUMPRODUCT(--(ISNUMBER(--SUBSTITUTE(A1:A6,"A",""))),--LEFT(A1:A6,LEN(A1:A6)-1))&"A"
Thay chữ A trong dấu nháy đôi bằng chữ bạn muốn tìm
Xem file đính kèm nha!
Cám ơn bạn Cadafi đã đưa ra phương án giải quyết rất hay!
 
Lần chỉnh sửa cuối:
Mình tham gia dùng hàm UDF xem sao

PHP:
Function demStr(Rg As Range) As String
Dim tam()
Dim i, j, so As Long
Dim ch, kq As String
If Rg Is Nothing Then Exit Function
ReDim tam(Rg.Cells.Count)
For i = 0 To Rg.Cells.Count - 1
tam(i) = Rg.Cells(i + 1)
Next
If Len(Join(tam, ";")) = UBound(tam) Then Exit Function
For i = 1 To UBound(tam)
If tam(i - 1) <> "" Then
so = Val(tam(i - 1))
ch = Replace(tam(i - 1), so, "")
For j = i To UBound(tam) - 1
If tam(j) Like "*" & ch Then
so = so + Val(tam(j))
tam(j) = ""
End If
Next
kq = kq & so & ch & ";"
End If
Next
demStr = Left(kq, Len(kq) - 1)
End Function
Kiểm tra kết quả ở cột K
Bài này anh mất đến 3 vòng lập mới ra kết quả. Nếu anh dùng Dictionary Object thì chỉ mất 1 vòng lập
Em làm như sau:
PHP:
Function ConsolStr(SrcArray, Optional Sep As String = ", ") As String
  Dim elm, Chw As String, Num As Double
  With CreateObject("Scripting.Dictionary")
    For Each elm In SrcArray
      If elm <> "" And elm <> 0 And elm <> "0" Then
        With CreateObject("VBScript.RegExp")
          .Global = True: .Pattern = "[\d,.,]"
          Chw = Mid(elm, InStr(elm, Left(.Replace(elm, ""), 1)), Len(elm))
          Num = 1 * Replace(elm, Chw, "")
        End With
        If Not .Exists(Chw) Then
          .Add Chw, Num & Chw
        Else
          .Item(Chw) = (1 * Replace(.Item(Chw), Chw, "") + Num) & Chw
        End If
      End If
    Next elm
    ConsolStr = Join(.Items, Sep)
  End With
End Function
Thêm nữa: Em không khai báo biến dạng Range mà là Variant nên hàm có thể làm việc với mãng
 

File đính kèm

Web KT

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

Back
Top Bottom