Đăng ký học Excel và VBA cùng GPE tháng 10 - TPHCM

Đăng ký học Excel và VBA cùng GPE tháng 11 - TPHCM

Hàm tách số từ trong chuỗi

Thảo luận trong 'Lập Trình với Excel' bắt đầu bởi PhanTuHuong, 16 Tháng hai 2009.

  1. PhanTuHuong

    PhanTuHuong Excel & AutoCad & VBA

    Trong một chuỗi gồm cả số và chữ, hàm RemoveNonNumeric dưới đây sẽ tách các số đó. Các số rời rạc được sắp xếp với nhau thành một con số để có thể tính toán được. Hàm này ngắn gọn hơn hàm trong sách Lập trình VBA

    PHP:
    'Nguồn từ tác giả Andrew Baker trang www.vbusers.com'
    Function RemoveNonNumeric(sNumberToClean As String) As String
      
    Const NUMERIC_CHARS "0123456789.,"
      
    Dim lThisChar As Long 
      Dim sResult 
    As String
      
    For lThisChar 1 To Len(sNumberToClean)
        If 
    InStr(1NUMERIC_CHARSMid$(sNumberToCleanlThisChar1)) > 0 Then
           
    'Found a numeric character'
           
    sResult sResult Mid$(sNumberToCleanlThisChar1)
        
    End If
      
    Next
      
    'Return the result
      RemoveNonNumeric = sResult
    End Function

    Kết quả như ở hình 18-16 dưới đây:

    [​IMG]
     
    Chỉnh sửa lần cuối bởi điều hành viên: 16 Tháng hai 2009
  2. ndu96081631

    ndu96081631 Ăn cùng GPE, Ở cùng GPE, Sống cùng GPE Staff Member Super Moderator

  3. hoangdanh282vn

    hoangdanh282vn Nguyễn Cảnh Hoàng Danh Staff Member

    Hàm tách số từ chuỗi

    PHP:
    Function StrNonNum(Str As String) As String
    Dim i 
    as long
    For 1 To Len(Str)
    If 
    IsNumeric(Mid(Stri1)) Then StrNonNum StrNonNum Mid(Stri1)
    Next
    End 
    Function
    Và đây là hàm ngược lại với hàm trên :

    PHP:
    Function StrNonText(Str As String) As String
    StrNonText 
    Replace(Replace(Replace(Replace(Replace(Replace _
    (Replace(Replace(Replace(Replace(Str"0"""), "1"""), "2"""_
    "3"""), "4"""), "5"""), "6"""), "7"""), "8"""), "9""")
    End Function
     
  4. tudong

    tudong Thành viên mới

    Bạn có thể giúp mình cách cài hàm tách số từ trong chữ hay không
     
  5. Nguyễn Duy Tuân

    Nguyễn Duy Tuân Nghị Hách

    Mã:
    Function TachSo(Cell As Range) As Double
      Set Temp = CreateObject("VBScript.RegExp")
      Temp.Global = True
      Temp.Pattern = "[^0-9]"
      TachSo = Temp.Replace(Cell, "")
    End Function  
    
    Trên là code sử dụng thư viện của VBScript với ứng dụng Class của nó là RegExp. Đứng về góc độ lập trình thì để làm được việc ngắn gọn trên, các nhà lập trình cũng phải viết những mã lệnh xử lý và có lẽ vẫn là dùng vòng lặp. Quá trình làm việc đó được gói trong một Class với hàm Replace. Việc ngắn gọn đó là do ta nhìn về hình thức thôi. Việc tốc độ chạy nhanh hay không em chưa có dịp so sánh nhưng VBScript được lập trình bằng C++ bởi các chuyên gia MS thì chắc tốc độ là rất nhanh.

    Nếu hàm trên anh Hướng viết trong DLL rồi nó cài vào máy, người ta chỉ cần viết thế này
    Mã:
    Function TachSo(Cell As Range) As Double
      Set Temp = CreateObject("VB6DLL.TACHGIATRI")
      Temp.RemoveNonNumeric(Cell)
      Set Temp = Nothing
    End Function  
    
    Một người nào đó nhìn vào code trên lại thấy "ngắn gọn quá, không dùng vòng lặp".

    Nói vậy chứ em quan điểm vẫn thích áp dụng tối đa những thư viện đã có trong hệ thống, hoặc các thư viện được cung cấp free mà nó đã được thừa nhận là tốt. Mình tận dụng nó để làm ra những cái có một giá trị mới. Cần viết riêng trong trường hợp tin rằng cái của mình là tối ưu hơn hoặc để học tập.
     
  6. tipil

    tipil Thành viên mới

    Nếu em muốn tách số trong dãy ký tự này thì sao ạ?
    12/03/2010
     
  7. hoangminhtien

    hoangminhtien Thành viên tích cực

    Trong tr[FONT=&quot]ường hợp của bạn, bạn chọn toàn bộ vùng cần chuyển, vào Format Cells...(Ctr+1)[/FONT][FONT=&quot] chọn tab number, chọn Custom rồi định dạng ddmmyyyy trong hộp Type. Sau đó nhấn OK[/FONT]
     
  8. tuandovn

    tuandovn Thành viên mới

    Em có một dãy ký tự gồm cả số và chữ vd: mã thẻ bảo hiểm 52300725716TC52117. Giờ em muốn tách lấy thành 1 cột có 2 ký tự chữ trong chuỗi trên. Xin được giúp đỡ.
     
  9. hoanggiaovien

    hoanggiaovien Thành viên mới

    Nhờ Bác hướng dẫn cụ thể cho em với. em muốn tách: 23/03/2011 thành cột ngày 23 tháng 03 và năm 2011 riêng để tính nhưng không được. Cứ lớn hơn 12 là báo lỗi
     
  10. adua29

    adua29 Thành viên hoạt động

    Bạn dùng các hàm day(), month(), year cho từng cột, ví dụ: A1= 23/3/2001 (định dạng ngày)
    B1=day($A1); C1=month($A1); D1=year($A1)
     
  11. mymy88

    mymy88 Thành viên mới

    Các anh chị giúp e với, e muốn tách số và chữ trong chuôi DT:5624m2 thì làm như thế nào ? e xem may cách ở trên nhưng không hiểu gì hết huhu. Chỉ giúp e lại nhe.Tks cả nhà
     
  12. ndu96081631

    ndu96081631 Ăn cùng GPE, Ở cùng GPE, Sống cùng GPE Staff Member Super Moderator

    Cụ thể bạn muốn tách số gìchữ gì ra? Kết quả bạn cần là gì?
     
  13. PhanTuHuong

    PhanTuHuong Excel & AutoCad & VBA


    Chắc là bạn đó muốn hỏi tách số ra khỏi m2, đơn giản nhất dùng hàm left kết hợp với (len -2) của chuỗi là được.
     
  14. tranvinhsd

    tranvinhsd Thành viên mới

    Thanks

    Quá tuyệt !Không thể hay hơn được !--=0
     
  15. KHÁNH BÙI

    KHÁNH BÙI Thành viên mới

    trong 1 cột có cả số âm lẫn số dương, em có thể làm thế nào để tách 2 loại sang 2 cột khác nhau?
     
  16. hoamattroicoi

    hoamattroicoi 一人で Staff Member

    Thì căn cứ vào đặc điểm là số âm luôn nhỏ hơn 0 và số dương luôn lớn hơn 0 để lọc dữ liệu bạn ạ. Bạn có thể đưa file đính kèm lên để mọi người hướng dẫn vào file thực tế của bạn luôn. Hoặc bạn có thể xem file ví dụ này nhé.
     

    Các file đính kèm:

    Lần chỉnh sửa cuối: 7 Tháng tám 2013
  17. KHÁNH BÙI

    KHÁNH BÙI Thành viên mới

    cảm ơn bạn đã hướng dẫn mình nhé
     
  18. KHÁNH BÙI

    KHÁNH BÙI Thành viên mới

    mình muốn làm tròn đến số chia hết cho 7 trong excel thì phải làm thể nào hả bạn?
    Ví Dụ : 0,1,2,3-->0
    4,5,6-->7
    14,15,16,17-->14
    18,19,20--> 21. . . .
     
  19. phuocam

    phuocam Thành viên mới

    Thử công thức này:
    =ROUND(Số cần làm tròn/7,0)*7
     
  20. thuannguyen0606

    thuannguyen0606 Thành viên mới

    Cho hỏi cái tôi có 1 cột có hàng 1 : Ông Nguyễn Đức an bà Vũ thị hà cột 2 : Ông lê văn tam bà nguyễn thị thuý Làm thế nào để tách ông 1 cột bà 1 cột . Mình cần công thức cho nhiều hàng ko phải làm từng ô . Tk
     

Chia sẻ trang này