Hàm chuỗi trong VBA

Liên hệ QC

suncenputy

Thành viên mới
Tham gia
7/12/10
Bài viết
3
Được thích
0
Em mới học VBA nên còn tay mơ quá -\\/., mọi người giúp em bài này:

Viết hàm đếm trong chuỗi kí tự nhập vào có bao nhiêu số, bao nhiêu khoảng trắng, bao nhiêu chữ, bao nhiêu ký tự đặc biệt (không phải số, chữ, khoảng trắng)
 
(1) Fải đo đếm trước tiên là độ dài của chuổi; Để vậy trước hết cần kiểm nó là 1 số không đã (dùng hàm Isnumeric(); Hàm kiếm độ dài chuỗi là hàm Len() giống như trong trên trang tính êxcel;

(2) Sau đó ta lập 1 vòng lặp duyệt toàn suốt chiều dài của chuỗi; Trong khi duyệt nếu ký tự thì ta thêm vô biến đếm ký tự & nếu là ký số ta thêm vô biến đếm kí số; & nếu là khoảng trắng thì thêm tương ứng vô biến đếm khoảng trắng;

Sau rốt, nếu cộng 3 biến này = chiều dài chuỗi thì không có ký tự lạ nào khác; bằng không thì ngược lại!

Chúc thành công với gợi í này! --=0 --=0 --=0
 
Upvote 0
(1) Fải đo đếm trước tiên là độ dài của chuổi; Để vậy trước hết cần kiểm nó là 1 số không đã (dùng hàm Isnumeric(); Hàm kiếm độ dài chuỗi là hàm Len() giống như trong trên trang tính êxcel;

(2) Sau đó ta lập 1 vòng lặp duyệt toàn suốt chiều dài của chuỗi; Trong khi duyệt nếu ký tự thì ta thêm vô biến đếm ký tự & nếu là ký số ta thêm vô biến đếm kí số; & nếu là khoảng trắng thì thêm tương ứng vô biến đếm khoảng trắng;

Sau rốt, nếu cộng 3 biến này = chiều dài chuỗi thì không có ký tự lạ nào khác; bằng không thì ngược lại!

Chúc thành công với gợi í này! --=0 --=0 --=0

Anh xem em làm thế này có lỗi gì mà chạy không được.
Public Function dem(chuoi As String)
Dim n, ktr, so, kitu, chu, i, dv As Integer

n = Len(chuoi)
so , kitu, ktr, chu = 0
For i = 1 To n
Select Case (Left(chuoi, i))
Case "a" To "z", "A" To "Z"
chu = chu + 1
Case "0" To "9"
so = so + 1
Case " "
ktr = ktr + 1
Case Else
kitu = kitu + 1
End Select
Next i
dem = "so chu: " & chu & " ; " & "so chu so: " & so & " ; " & "so khtrang: " & ktr & " ; " & "so ky tu dac biet: " & kitu
End Function
 
Upvote 0
Anh xem em làm thế này có lỗi gì mà chạy không được.
Thử sửa một tý xem sao:
Public Function dem(chuoi As String)
.............
n = Len(chuoi)
so , kitu, ktr, chu = 0 ==> xóa bỏ dòng này đi
For i = 1 To n
Select Case (Left(chuoi, i))== đổi thành==>Select Case (Mid(chuoi, i,1))
Case "a" To "z", "A" To "Z"
...............
Next i
dem = "so chu: " & chu & " ; " & "so chu so: " & so & " ; " & "so khtrang: " & ktr & " ; " & "so ky tu dac biet: " & kitu
End Function
 
Upvote 0
Bạn tham khảo cái ni

PHP:
Option Explicit
Function GPEDem(Chuoi As Variant, Optional Loai As String = "N")
 'N:= Dem Ky So; "S":= Dem Ky Tu; "D":= Dac Biet; " ":= Trang'
  If IsNumeric(Chuoi) Then
    GPEDem = "Is Numeric":          Exit Function
  Else
    Dim Trang As Byte, jJ As Byte, KyTu As Byte, KySo As Byte
    Loai = UCase$(Left(Loai, 1))
    For jJ = 1 To Len(Chuoi)
        If Asc(Mid(Chuoi, jJ, 1)) > 47 And Asc(Mid(Chuoi, jJ, 1)) < 58 Then
            KySo = KySo + 1
        ElseIf (Asc(Mid(Chuoi, jJ, 1)) > 64 And Asc(Mid(Chuoi, jJ, 1)) < 91) Or _
            (Asc(Mid(Chuoi, jJ, 1)) > 96 And Asc(Mid(Chuoi, jJ, 1)) < 123) Then
            KyTu = 1 + KyTu
        ElseIf Asc(Mid(Chuoi, jJ, 1)) = 32 Then
            Trang = Trang + 1
        End If
    Next jJ
    GPEDem = Switch(Loai = "N", KySo, Loai = "S", KyTu, Loai = " ", Trang, _
        Loai = "D", Len(Chuoi) - KyTu - KySo - Trang, Loai = "T", Trang)
  End If
End Function

Ở đây hàm SWITCH() có thể thay bằng IF. . . ElseIf. . . . Else .. . Then
hay Select CaSe. . . .
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
(1) Fải đo đếm trước tiên là độ dài của chuổi; Để vậy trước hết cần kiểm nó là 1 số không đã (dùng hàm Isnumeric(); Hàm kiếm độ dài chuỗi là hàm Len() giống như trong trên trang tính êxcel;

(2) Sau đó ta lập 1 vòng lặp duyệt toàn suốt chiều dài của chuỗi; Trong khi duyệt nếu ký tự thì ta thêm vô biến đếm ký tự & nếu là ký số ta thêm vô biến đếm kí số; & nếu là khoảng trắng thì thêm tương ứng vô biến đếm khoảng trắng;

Sau rốt, nếu cộng 3 biến này = chiều dài chuỗi thì không có ký tự lạ nào khác; bằng không thì ngược lại!

Chúc thành công với gợi í này! --=0 --=0 --=0
Làm bài này không vòng lập nha
PHP:
Function CountChar(Text As String, iType As String) As Long
  Dim Tmp As String
  Tmp = Switch(iType = "L", "[^a-zA-Z]", iType = "N", "[^0-9]", iType = "S", "[0-9a-zA-Z]")
  With CreateObject("VBScript.RegExp")
    .Global = True: .Pattern = Tmp
    CountChar = Len(.Replace(Text, ""))
  End With
End Function
Giả sử A2 là cell chứa chuổi, vậy cú pháp hàm:
=CountChar(A2,"L") ---> Đếm các chữ cái (từ a đến z và từ A đến Z)
=CountChar(A2,"N") ---> Đếm số (từ 0 đến 9)
=CountChar(A2,"S") ---> Đếm các ký tự khác trừ số và chữ cái
Nhân tiên tặng bạn luôn hàm TÁCH tè lè các thứ
 

File đính kèm

  • CountChar.xls
    38 KB · Đọc: 208
Upvote 0
Web KT
Back
Top Bottom