Trang 1/3 1 2 3 cuốicuối
Hiển thị kết quả tìm kiếm từ 1 đến 10 trên tổng số: 22
  1. #1
    Tham gia ngày
    06 2006
    Nơi Cư Ngụ
    Hà Nội
    Bài gởi
    5,725
    Cảm ơn
    8,084
    Được cảm ơn 21,379 lần trong 4,872 bài viết

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

    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 Code:
    '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:

    thay đổi nội dung bởi: BNTT, 16-02-09 lúc 12:06 PM Lý do: Sửa lại màu trong PHP tí cho nó Pro hơn...

  2. Có 10 thành viên cảm ơn PhanTuHuong về bài viết này:


  3. #2
    Tham gia ngày
    06 2008
    Bài gởi
    24,370
    Cảm ơn
    13,960
    Được cảm ơn 43,415 lần trong 19,635 bài viết
    Thầy ơi! Tôi nghĩ cái này mới là vô địch đây:
    Tách số không dùng vòng lặp

  4. Có 3 thành viên cảm ơn ndu96081631 về bài viết này:


  5. #3
    Tham gia ngày
    12 2007
    Nơi Cư Ngụ
    Q. Bình Thạnh - TPHCM
    Bài gởi
    1,869
    Cảm ơn
    2,882
    Được cảm ơn 4,975 lần trong 1,496 bài viết

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

    PHP Code:
    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 Code:
    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 

  6. Có 6 thành viên cảm ơn hoangdanh282vn về bài viết này:


  7. #4
    Tham gia ngày
    05 2008
    Bài gởi
    1
    Cảm ơn
    1
    Được cảm ơn 0 lần trong 0 bài viết
    Bạn có thể giúp mình cách cài hàm tách số từ trong chữ hay không

  8. #5

    Thumbs up

    Trích Nguyên văn bởi ndu96081631 View Post
    Thầy ơi! Tôi nghĩ cái này mới là vô địch đây:
    Tách số không dùng vòng lặp
    Code:
    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
    Code:
    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.

  9. Có 7 thành viên cảm ơn Nguyễn Duy Tuân về bài viết này:


  10. #6
    Tham gia ngày
    06 2009
    Bài gởi
    24
    Cảm ơn
    15
    Được cảm ơn 2 lần trong 2 bài viết
    Nếu em muốn tách số trong dãy ký tự này thì sao ạ?
    12/03/2010

  11. #7
    Tham gia ngày
    02 2008
    Nơi Cư Ngụ
    Hà Nội
    Bài gởi
    1,471
    Cảm ơn
    788
    Được cảm ơn 1,999 lần trong 1,022 bài viết
    Trích Nguyên văn bởi tipil View Post
    Nếu em muốn tách số trong dãy ký tự này thì sao ạ?
    12/03/2010
    Trong trườ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) chọn tab number, chọn Custom rồi định dạng ddmmyyyy trong hộp Type. Sau đó nhấn OK

  12. #8
    Tham gia ngày
    08 2008
    Bài gởi
    7
    Cảm ơn
    0
    Được cảm ơn 0 lần trong 0 bài viết
    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 đỡ.

  13. #9
    Trích Nguyên văn bởi hoangminhtien View Post
    Trong trườ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) chọn tab number, chọn Custom rồi định dạng ddmmyyyy trong hộp Type. Sau đó nhấn OK
    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

  14. #10
    Tham gia ngày
    04 2008
    Nơi Cư Ngụ
    Lai Châu
    Bài gởi
    123
    Cảm ơn
    39
    Được cảm ơn 77 lần trong 34 bài viết
    Trích Nguyên văn bởi hoanggiaovien View Post
    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
    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)

Trang 1/3 1 2 3 cuốicuối

Thông tin về chủ đề này

Users Browsing this Thread

Hiện có 1 người đang xem đề tài này. (0 thành viên và 1 khách)

Đề tài tương tự

  1. Xin hỏi cách lấy chuỗi ký tự trước một ký tự trong chuỗi
    Viết bởi kecodon trong chuyên mục Hỏi đáp những vấn đề khác
    Trả lời: 5
    Bài mới gởi: 17-03-12, 10:45 PM
  2. Trích ra một chuỗi con giống nhau ở vị trí bất kỳ trong các chuỗi mẹ khác nhau
    Viết bởi Hang.Redtar trong chuyên mục Hàm và công thức Excel
    Trả lời: 3
    Bài mới gởi: 04-12-10, 08:37 AM
  3. Trả về vị trí đạt giá trị max hoặc min trong chuỗi!
    Viết bởi nguyentieu trong chuyên mục Giải thích, gỡ rối, xử lý lỗi công thức
    Trả lời: 8
    Bài mới gởi: 05-05-10, 08:36 AM
  4. Dò tìm chuỗi trong chuỗi
    Viết bởi voda trong chuyên mục Tìm kiếm, dò tìm và tham chiếu
    Trả lời: 13
    Bài mới gởi: 08-10-09, 09:27 AM

Bookmarks

Bookmarks

Quyền Sử Dụng Ở Diễn Ðàn

  • Bạn không thể đăng đề tài mới
  • Bạn không thể đăng trả lời
  • Bạn không thể đăng file đính kèm.
  • Bạn không thể sửa bài viết.
  •  

Mudim v0.8 Tắt VNI Telex Viqr Tổng hợp
Chính tả Bỏ dấu kiểu mới  [Bật/Tắt (F9)]