Giúp mình! Đếm trong chuỗi ký tự xem có bao nhiêu ký tự thỏa điều kiện (1 người xem)

Liên hệ QC

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

bhquachtuong

Thành viên mới
Tham gia
14/12/10
Bài viết
35
Được thích
1
Giới tính
Nam
Ví dụ tại ô A1 có chuỗi ký tự như thế này A1: bhquachtuong
Tìm trong chuỗi ở A1 có bao nhiêu ký tự là "h" (kết quả là có 2)

Bạn nào giúp mình với
 
có thể đếm thêm nhiều ký tự khác a b hoặc c chẳng hạn. giống như ký tự h là điều kiện. có cái nào đưa ra công thức chung không bạn
 
có thể đếm thêm nhiều ký tự khác a b hoặc c chẳng hạn. giống như ký tự h là điều kiện. có cái nào đưa ra công thức chung không bạn
cách thì có đó nhưng bạn phải suy nghĩ tất cả các trường hợp bạn muốn đếm có đk đi, rồi tôi sẽ giúp
 
Chỉ đơn giản là đếm ký tự đó có bao nhiêu trong 1 chuổi hà. Bất ký chuỗi nào và bất kỳ ký tự nào mà minh muốn đếm. Ví dụ có 1 chuổi ký tự số dạng text ntn: 12345 54321 12345. Mình muốn đếm trong đó có bao nhiêu ký tự là 1, hoặc có thể là có bao nhiêu ký tự là 5. cái ký tự mà mình muốn đếm nó là điều kiện. và điều kiện này nó có thể linh hoạt để minh đổi tức là mình có thể chọn ký tự khác làm điều kiện
 
Ví dụ tại ô A1 có chuỗi ký tự như thế này A1: bhquachtuong
Tìm trong chuỗi ở A1 có bao nhiêu ký tự là "h" (kết quả là có 2)

Bạn nào giúp mình với

Đếm ký tự "h" có trong chuỗi tại cell A1 nhé
Mã:
=LEN(A1)-LEN(SUBSTITUTE(A1,"h",""))
Nếu dữ liệu của bạn khác hơn, ta sẽ tính khác
 
Đếm ký tự "h" có trong chuỗi tại cell A1 nhé
Mã:
=LEN(A1)-LEN(SUBSTITUTE(A1,"h",""))
Nếu dữ liệu của bạn khác hơn, ta sẽ tính khác
Em lại nghĩ công thức khác, nhưng nhìn công thức của Thầy thì cách em nghĩ lại quá ẹc ... ẹc ...! Đơn giản vậy mà cứ suy nghĩ phức tạp vụ ra! +-+-+-+
 
Ví dụ tại ô A1 có chuỗi ký tự như thế này A1: bhquachtuong
Tìm trong chuỗi ở A1 có bao nhiêu ký tự là "h" (kết quả là có 2)

Bạn nào giúp mình với
Bạn dùng hàm "dem" tự tạo này xem sao:
Mã:
Public Function dem(rng As Range, tu As String) As Long
Dim s As Long
For i = 1 To Len(rng)
    If Mid(rng, i, 1) = tu Then s = s + 1
Next i
    dem = s
End Function
Ví dụ, cần đếm kí tự "h" tại ô A1, kết quả đếm để ở ô A2 thì tại ô A2 nhập hàm như sau:
Mã:
=dem(A1,"h")
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn dùng hàm "dem" tự tạo này xem sao:
Mã:
Public Function dem(rng As Range, tu As String) As Long
Dim s As Long
For i = 1 To Len(rng)
    If Mid(rng, i, 1) = tu Then s = s + 1
Next i
    dem = s
End Function
Ví dụ, cần đếm kí tự "h" tại ô A1, kết quả đếm để ở ô A2 thì tại ô A2 nhập hàm như sau:
Mã:
=dem(A1,"h")

Trùi ui, muốn làm hàm tự tạo thì dùng cách này, dùng vòng lặp chi cho phức tạp vụ vậy:

Mã:
Function DemChuoi(ByVal ChuoiGoc As String, ByVal KyTu As String) As Long
    DemChuoi = Len(ChuoiGoc) - Len(Replace(ChuoiGoc, KyTu, ""))
End Function
 
Muốn đếm các kí tự trong 1 vùng thì dùng File này. ví dụ đếm kí tự "h" trong vùng "A1:A2" thì dùng hàm "dem" như sau:
Mã:
[B]=dem(A1:A2;"h")[/B]
 

File đính kèm

Trùi ui, muốn làm hàm tự tạo thì dùng cách này, dùng vòng lặp chi cho phức tạp vụ vậy:

Mã:
Function DemChuoi(ByVal ChuoiGoc As String, ByVal KyTu As String) As Long
    DemChuoi = Len(ChuoiGoc) - Len(Replace(ChuoiGoc, KyTu, ""))
End Function
Chơi RegExp mới Pro chứ, nếu không thì dùng hàm cho nhẹ cái đầu
PHP:
Function Dem(ByVal cell As String, ByVal Kt As String) As Long
Dim tmp
With CreateObject("vbscript.regexp")
   .Global = True
   .Pattern = Kt
   Set tmp = .Execute(cell)
   Dem = tmp.Count
End With
End Function
 
Để nâng cấp cái vụ đếm ký tự, ta phải tính đến chuyện:
- Có khi người ta cần đếm 1 chuỗi con có trong chuỗi lớn (không chỉ là 1 ký tự)
- Có khi người ta cần đếm cả trong 1 mảng (đếm mỗi phần tử trong mảng rồi cộng lại)
Vụ này công thức làm dư sức chứ chưa cần đến VBA
 
Chơi RegExp mới Pro chứ, nếu không thì dùng hàm cho nhẹ cái đầu
PHP:
Function Dem(ByVal cell As String, ByVal Kt As String) As Long
Dim tmp
With CreateObject("vbscript.regexp")
   .Global = True
   .Pattern = Kt
   Set tmp = .Execute(cell)
   Dem = tmp.Count
End With
End Function

Dài dòng văn tự và hao binh tổn tướng quá! Người ta có 1 dòng là giải quyết "cha" nó vấn đề rồi! Tại đồng chí kia thích code chứ làm công thức của Thầy NDU là tuyệt vời rồi! Hơi đâu mà "Lấy dao mỗ trâu cắt cổ gà" như thế chứ!
 
Đếm ký tự "h" có trong chuỗi tại cell A1 nhé
Mã:
=LEN(A1)-LEN(SUBSTITUTE(A1,"h",""))
Nếu dữ liệu của bạn khác hơn, ta sẽ tính khác
Thầy ơi hình như công thức này bị phân biệt bởi chữ hoa và chữ thường phải không ạ, giả sử em có 1 chuỗi là: Hoàng Hải Vinh, thì khi dùng công thức này cho ra kết quả là 1 (1 chữ h). Có cách nào để công thức không phân biệt chữ hoa và chữ thường không ạ
 
@ Regex Object:

1. Hàm tự tạo mà dùng object, mỗi lần gọi thì VBA lại phải dùng CreateObject để tạo một object mới, và huỷ đi khi hàm chạy xong?

Nếu object dùng như kiểu này thì tìm cách giữ nó lại, bằng cách dùng biến toàn cục hoặc biến tĩnh (static).

2. Có một số ký tự mang ý nghĩa đặc biệt (vd . $ ^ *), phải escape (\) nó trước khi sử dụng trong mẫu.
 
Thầy ơi hình như công thức này bị phân biệt bởi chữ hoa và chữ thường phải không ạ, giả sử em có 1 chuỗi là: Hoàng Hải Vinh, thì khi dùng công thức này cho ra kết quả là 1 (1 chữ h). Có cách nào để công thức không phân biệt chữ hoa và chữ thường không ạ

Trời! Thì bạn lồng thêm 1 thằng SUBSTITUE nữa, biến chữ "H" thành rổng thôi chứ gì đâu:
Mã:
=LEN(A1)-LEN(SUBSTITUTE(SUBSTITUTE(A1,"h",""),"H",""))
 
... Có cách nào để công thức không phân biệt chữ hoa và chữ thường không ạ

Quy luật chung khi làm việc không phân biệt hoa và thường: dùng hàm UPPER (hoặc LOWER) để đổi chuỗi thành một kiểu trước khi tính toán.
 
Quy luật chung khi làm việc không phân biệt hoa và thường: dùng hàm UPPER (hoặc LOWER) để đổi chuỗi thành một kiểu trước khi tính toán.

Execl 2007 trở về trước: UPPER, LOWER không ra kết quả chính xác cho ký tự tiếng Việt Unicode đâu bạn à!
 
Web KT

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

Back
Top Bottom