Hàm ExtractNumber tách số ra khỏi chuỗi

Hôm nay bỗng nhận được một tập tin excel của khách hàng, trong đó có một cột mã chấm công có số, có chữ lộn xộn nhau không theo một qui luật nào hết (ví dụ: M123E, 155D, F33). Nhưng mình thì cần mã chấm công chỉ toàn số thôi (ví dụ: 123, 155, 33). Làm sao tách được số ra khỏi chuỗi, trong khi excel không có hàm đó. Làm cách nào đây? Chẳng lẽ làm bằng tay, làm biết đến bao giờ cho xong, mấy ngàn dòng dữ liệu lận đó!

Không sao, trong excel không có hàm tách chuỗi cũng không sao. Chúng ta có thể tự viết hàm ExtractNumber để dùng. Excel có công cụ hỗ trợ chúng ta viết hàm theo ý mình. Đây là cách giải quyết cho bài toán trên.

Nào chúng ta bắt đầu cùng nhau giải quyết:

  • Bước 1: mở Microsoft Excel lên
  • Bước 2: nhấn Alt + F11 -> mở ra cửa sổ Microsoft Visual Basic -> Insert -> Module

 

  • Bước 3: Bạn nhập đoạn code bên dưới vào cửa sổ Book1-Module1 (Code), hình minh hoại bên dưới:
Function ExtractNumber(rCell As Range)
Dim lCount As Long
Dim sText As String
Dim lNum As String
sText = rCell
For lCount = Len(sText) To 1 Step -1
If IsNumeric(Mid(sText, lCount, 1)) Then
lNum = Mid(sText, lCount, 1) & lNum
End If
Next lCount
ExtractNumber = CLng(lNum)
End Function


Vậy là bạn đã có thể dùng hàm ExtractNumber để tách số ra khỏi chuỗi rồi đó.

  • Bước 4: Quay lại Microsoft Excel, bạn dùng hàm ExtractNumber như hình bên dưới:


=> Chúc bạn thành công :)


23 comments

  1. Hì hì hì …! bạn đọc bài viết và nó có ích cho bạn là mình cũng vui.

    1. cho mình hỏi tại sao mình viết code như thế mà chương trình không chạy được.Mình không dùng được hàm ExtractNumber.Sau khi viết xong code thì ấn vào đâu để chạy chương trình.Giúp mình với.

  2. Hey! GocKinhNghiem.Com
    Đầu tiên mình xin cảm ơn về đoạn code trên. Nhưng khi test qua thì mình có 1 vài vấn đề như sau:
    – Khi lượng number trong String vượt quá 2.xxx.xxx.xxx thì sẽ bị #VALUE!
    – Code này chỉ sử dụng cho 1 workbook.
    ___
    Vậy GocKinhNghiem.Com có thể giúp mình fix những lỗi trên được không!?
    Ps: Mình là mem mới nha!

    1. Cám ơn Gockinhnghiem và tác giả đoạn code trên. Nó rât hữu ích cho mình.

      Bạn Sea Trường. Mình gặp lỗi như bạn và khắc phục bằng cách dùng ExtractNumber = lNum thay cho ExtractNumber = Clng(lNum)

  3. cám ơn bạn nhìu nha, bữa nay mới biết Excel liên quan tới Visual á. like it
    chúc may mắn

  4. Cảm ơn Thanh Thuy rất nhiều! mình đang rất cần dùng đến hàm này. Nhưng cho mình hỏi là khi tới Save mà báo lỗi thì xử lý như thế nào ??
    “” The following futures cannot be saved in marcro – free wordbook: VB project
    To save file with these futures, clik No…..”

  5. Thanks.
    Nhưng vẫn chưa giải quyết được vấn đề nếu như trong chuỗi có số thập phân.
    Kính mong bạn giải quyết!

  6. Cảm ơn bạn nhá!!! Bạn có thể để lại đ/c mail cho mình xin đc ko có mình có nhiều điều cần hỏi lắm

    1. Cho mình hỏi tại sao mình viết xong phần code như thế mà không chạy được.máy cứ báo lỗi à

  7. Cám ơn bạn rất nhiều!!!!
    Bạn cho mình hỏi thêm là ví dụ như chuỗi của mình rất phức tạp ví dụ:
    Altman Plants – Vista (10 – 13 cm) ~ 404092— – Large
    hoặc đôi khi là
    Beijing Gao jun ~ 407040-17 – Normal

    có cách nào để tách được những con số ra riêng không bạn? cụ thể là các số 404092.

    Mình không biết về cách cài module nhiều..thành ra…Cám ơn bạn nhiều lắm lắm

  8. cảm ơn bạn rất nhiều. Mình tìm mãi hàm này mà không có. Vậy là mình lập trình rồi nhúng vào. good…good!

  9. Cám ơn bạn!!!!
    Ban có thể giúp mình việc này không VD trong một ô mình có dữ liệu A1: Tính betong cột: 4cot*0.22*3.6 ban có thể tách giúp mình tách chữ để trong ô A2: 4*0.22*3.6 .
    Mong được sự giúp đỡ của bạn!

  10. Bạn ơi cái lỗi ambiguous name detected là do gì vậy nhỉ? Máy mình toàn bị như thế!

Leave a Reply

Your email address will not be published. Required fields are marked *