Thứ Năm, 5 tháng 6, 2014

VBA với ký tự số trong Excel

0 nhận xét

(Thủ thuật VBA trong Excel)

-Trong Excel khi nhập những giá trị số và ấn Enter, Excel sẽ tự động căn chỉnh các giá trị này sang bên phải của ô. Đối với những giá trị số khi nhập xong, Excel sẽ tự động loại bỏ số 0 đằng trước các dãy số, ví dụ như số điện thoại chẳng hạn. Để Excel không loại bỏ số 0 đằng trước, người sử dụng thường thêm dấu ‘ trước khi đánh dãy số. Đối với những dãy số như vậy người ta thường gọi là ký tự số. Hoặc khi ta nhập các số xen lẫn giữa các ký tự thì đây cũng được coi là các ký tự số, hoặc các số được ngăn cách bởi các ký tự đặc biệt.

Trong công việc thường ngày ta sẽ phải gặp một số tình huống phải thao tác hoặc xử lý với các ký tự số, nếu như sử dụng các hàm có sẵn trong Excel có thể sẽ không thể giải quyết triệt để được mong muốn của chúng ta. Hôm nay Kênh phần mềm việt xin giới thiệu với mọi người một vài trường hợp sử dụng VBA để thao tác với ký tự số trong Excel.

1. Đếm số chữ số trong chuỗi ký tự số
Giả sử bạn có 1 chuỗi các số như sau: 17ABC6D8H432

Bây giờ bạn muốn đếm xem trong chuỗi  này có bao nhiêu số, để làm được việc này bạn sử dụng hàm VBA dưới đây.

Function CountNumber(str As String)
    Dim mlen As Long
    Dim i As Long
    Dim iCount As Long
    'Neu chuoi =0 thi khong xu ly
    If Len(str) = 0 Then Exit Function
    'Xoa bo cac ky tu trang o dau va cuoi
    str = Trim(str)
    'Dem so ky tu chuoi
    mlen = Len(str)
    iCount = 0
    For i = 1 To mlen
        If IsNumeric(Mid(str, i, 1)) Then
            iCount = iCount + 1
        End If
    Next
    CountNumber = iCount
End Function

2. Tìm giá trị lớn nhất trong chuỗi ký tự số
Giả sử bạn có 1 chuỗi các số như sau: 12,45,66,7888,34,56,39,17,98,25

Bây giờ bạn muốn tìm số lớn nhất trong chuỗi các số này, để làm được việc này bạn sử dụng hàm VBA dưới đây.

Function HighestNumber(R As Range)
    Dim x As Variant, M As Double, i As Long, ct As Long
    Set R = R.CellS(1, 1)
    x = Split(R.Value, ",")
    For i = LBound(x) To UBound(x)
        If IsNumeric(x(i)) Then
            ct = ct + 1
            If x(i) > M Then M = x(i)
        End If
    Next i
    If ct = 0 Then
        HighestNumber = CVErr(xlErrNA)
    Else
        HighestNumber = M
    End If
End Function

Nếu các ký tự số trong chuỗi được ngăn cách bởi dấu cách 12 45 66 7888 34 56 39 7 98 25
Thì đoạn Code  x = Split(R.Value, ",") được thay thế bằng  x = Split(R.Value, " ")

Tin học văn phòng

0 nhận xét:

Đăng nhận xét