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

Liên hệ QC

PhanTuHuong

VBA & VB.NET for Excel & AutoCad
Thành viên danh dự
Tham gia
13/6/06
Bài viết
7,121
Được thích
24,279
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(1, NUMERIC_CHARS, Mid$(sNumberToClean, lThisChar, 1)) > 0 Then
       'Found a numeric character'
       sResult = sResult + Mid$(sNumberToClean, lThisChar, 1)
    End If
  Next
  'Return the result
  RemoveNonNumeric = sResult
End Function


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

Tachsotuchuoi.jpg
 
Chỉnh sửa lần cuối bởi điều hành viên:
Hàm tách số từ chuỗi

PHP:
Function StrNonNum(Str As String) As String
Dim i as long
For i = 1 To Len(Str)
If IsNumeric(Mid(Str, i, 1)) Then StrNonNum = StrNonNum + Mid(Str, i, 1)
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
 
Upvote 0
Bạn có thể giúp mình cách cài hàm tách số từ trong chữ hay không
 
Upvote 0
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

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.
 
Upvote 0
Nếu em muốn tách số trong dãy ký tự này thì sao ạ?
12/03/2010
 
Upvote 0
Nếu em muốn tách số trong dãy ký tự này thì sao ạ?
12/03/2010
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]
 
Upvote 0
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 đỡ.
 
Upvote 0
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]
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
 
Upvote 0
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)
 
Upvote 0
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à
 
Upvote 0
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à

Cụ thể bạn muốn tách số gìchữ gì ra? Kết quả bạn cần là gì?
 
Upvote 0
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à

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.
 
Upvote 0
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?
 
Upvote 0
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?
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é.
 

File đính kèm

  • am-duong.xls
    13.5 KB · Đọc: 13
Lần chỉnh sửa cuối:
Upvote 0
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. . . .
 
Upvote 0
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
 
Upvote 0
Web KT
Back
Top Bottom