Chỉ chọn số trong excel

Không có hàm sẵn có nào trong Excel để trích xuất các số từ một chuỗi trong một ô (hoặc ngược lại –  xóa phần số và trích xuất phần văn bản từ một chuỗi chữ và số)

Tuy nhiên, điều này có thể được thực hiện bằng cách sử dụng một loạt các hàm Excel hoặc một số mã VBA đơn giản

Trước tiên hãy để tôi chỉ cho bạn những gì tôi đang nói về

Giả sử bạn có một tập dữ liệu như hình bên dưới và bạn muốn trích xuất các số từ chuỗi (như hình bên dưới)

Extract Number from String in Excel - Data

Phương pháp bạn chọn cũng sẽ phụ thuộc vào phiên bản Excel bạn đang sử dụng

  • Đối với các phiên bản trước Excel 2016, bạn cần sử dụng các công thức dài hơn một chút
  • Đối với Excel 2016, bạn có thể sử dụng hàm TEXTJOIN mới được giới thiệu
  • Phương pháp VBA có thể được sử dụng trong tất cả các phiên bản Excel

Hướng dẫn này bao gồm

Nhấn vào đây để tải về tập tin ví dụ

Trích xuất số từ chuỗi trong Excel (Công thức cho Excel 2016)

Công thức này sẽ chỉ hoạt động trong Excel 2016 vì nó sử dụng hàm TEXTJOIN mới được giới thiệu

Ngoài ra, công thức này có thể trích xuất các số ở đầu, cuối hoặc giữa của chuỗi văn bản

Lưu ý rằng công thức TEXTJOIN được đề cập trong phần này sẽ cung cấp cho bạn tất cả các ký tự số cùng nhau. Ví dụ: nếu văn bản là “Giá của 10 vé là 200 USD”, kết quả sẽ cho bạn 10200

Giả sử bạn có tập dữ liệu như hình bên dưới và bạn muốn trích xuất các số từ các chuỗi trong mỗi ô

Dưới đây là công thức sẽ cung cấp cho bạn phần số từ một chuỗi trong Excel

=TEXTJOIN("",TRUE,IFERROR((MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1)*1),""))

Formula to get all number from a string

Đây là một công thức mảng, vì vậy bạn cần sử dụng ‘ Control + Shift + Enter ‘ thay vì sử dụng Enter

Trong trường hợp không có số nào trong chuỗi văn bản, công thức này sẽ trả về một chuỗi trống (trống)

Công thức này hoạt động như thế nào?

Hãy để tôi phá vỡ công thức này và thử giải thích nó hoạt động như thế nào

  • HÀNG( GIÁN TIẾP(“1. ”&LEN(A2))) – phần này của công thức sẽ cho một dãy số bắt đầu từ một. Hàm LEN trong công thức trả về tổng số ký tự trong chuỗi. Trong trường hợp “Chi phí là 100 USD”, nó sẽ trả về 19. Do đó, các công thức sẽ trở thành ROW(INDIRECT(“1. 19”). Sau đó, hàm ROW sẽ trả về một dãy số – {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19}
  • (GIỮA(A2, HÀNG( GIÁN TIẾP(“1. ”&LEN(A2))),1)*1) – Phần này của công thức sẽ trả về một mảng #VALUE. lỗi hoặc số dựa trên chuỗi. Tất cả các ký tự văn bản trong chuỗi trở thành #VALUE. lỗi và tất cả các giá trị số vẫn giữ nguyên. Điều này xảy ra khi chúng ta đã nhân hàm MID với 1
  • SỐ PHIẾU((MID(A2,ROW(gián tiếp(“1. ”&LEN(A2))),1)*1),””) – Khi hàm IFERROR được sử dụng, nó sẽ xóa tất cả #VALUE. lỗi và chỉ những con số sẽ còn lại. Đầu ra của phần này sẽ như thế này – {“”;””;””;””;””;””;””;””;””;””;””;””;””;
  • =TEXTJOIN(“”,TRUE,IFERROR((MID(A2,ROW(INDIRECT(“1. ”&LEN(A2))),1)*1),””)) – Hàm TEXTJOIN giờ đây chỉ cần kết hợp các ký tự chuỗi còn lại (chỉ là các số) và bỏ qua chuỗi trống

Mẹo chuyên nghiệp. Nếu bạn muốn kiểm tra đầu ra của một phần công thức, hãy chọn ô, nhấn F2 để vào chế độ chỉnh sửa, chọn phần công thức mà bạn muốn đầu ra và nhấn F9. Bạn sẽ thấy ngay kết quả. Và sau đó nhớ nhấn Control + Z hoặc nhấn phím Escape. KHÔNG nhấn phím enter

Tải xuống tệp ví dụ

Bạn cũng có thể sử dụng logic tương tự để trích xuất phần văn bản từ một chuỗi chữ và số. Dưới đây là công thức sẽ lấy phần văn bản từ chuỗi

=TEXTJOIN("",TRUE,IF(ISERROR(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1)*1),MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1),""))

Một thay đổi nhỏ trong công thức này là hàm IF được dùng để kiểm tra xem mảng ta lấy được từ hàm MID có bị lỗi hay không. Nếu đó là một lỗi, nó sẽ giữ nguyên giá trị, nếu không nó sẽ thay thế nó bằng một khoảng trống

Sau đó, TEXTJOIN được sử dụng để kết hợp tất cả các ký tự văn bản

thận trọng. Mặc dù công thức này hoạt động tốt, nhưng nó sử dụng một hàm dễ bay hơi (hàm INDIRECT). Điều này có nghĩa là trong trường hợp bạn sử dụng điều này với một tập dữ liệu khổng lồ, có thể mất một thời gian để cung cấp cho bạn kết quả. Tốt nhất là tạo một bản sao lưu trước khi bạn sử dụng công thức này trong Excel

Trích xuất số từ chuỗi trong Excel (dành cho Excel 2013/2010/2007)

Nếu bạn có Excel 2013. 2010. hoặc 2007, bạn không thể sử dụng công thức TEXTJOIN, vì vậy bạn sẽ phải sử dụng một công thức phức tạp để thực hiện việc này

Giả sử bạn có một tập dữ liệu như hình bên dưới và bạn muốn trích xuất tất cả các số trong chuỗi trong mỗi ô

Extract Number from String in Excel - Data

Công thức dưới đây sẽ hoàn thành việc này

=IF(SUM(LEN(A2)-LEN(SUBSTITUTE(A2, {"0","1","2","3","4","5","6","7","8","9"}, "")))>0, SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2,ROW(INDIRECT("$1:$"&LEN(A2))),1))* ROW(INDIRECT("$1:$"&LEN(A2))),0), ROW(INDIRECT("$1:$"&LEN(A2))))+1,1) * 10^ROW(INDIRECT("$1:$"&LEN(A2)))/10),"")

Trong trường hợp không có số trong chuỗi văn bản, công thức này sẽ trả về giá trị trống (chuỗi rỗng)

Mặc dù đây là công thức mảng nhưng bạn không cần sử dụng 'Control-Shift-Enter' để sử dụng công thức này. Một đầu vào đơn giản hoạt động cho công thức này

Tín dụng cho công thức này thuộc về Mr tuyệt vời. diễn đàn excel

Một lần nữa, công thức này sẽ trích xuất tất cả các số trong chuỗi bất kể vị trí. Ví dụ: nếu văn bản là “Giá của 10 vé là 200 USD”, kết quả sẽ cho bạn 10200

thận trọng. Mặc dù công thức này hoạt động tốt, nhưng nó sử dụng một hàm dễ bay hơi (hàm INDIRECT). Điều này có nghĩa là trong trường hợp bạn sử dụng điều này với một tập dữ liệu khổng lồ, có thể mất một thời gian để cung cấp cho bạn kết quả. Tốt nhất là tạo một bản sao lưu trước khi bạn sử dụng công thức này trong Excel

Tách văn bản và số trong Excel bằng VBA

Nếu việc tách văn bản và số (hoặc trích xuất số từ văn bản) là việc bạn phải làm thường xuyên, bạn cũng có thể sử dụng phương pháp VBA

Tất cả những gì bạn cần làm là sử dụng mã VBA đơn giản để tạo Hàm do người dùng xác định (UDF) tùy chỉnh trong Excel, sau đó thay vì sử dụng các công thức dài và phức tạp, hãy sử dụng công thức VBA đó

Để tôi chỉ cho bạn cách tạo hai công thức trong VBA – một để trích xuất số và một để trích xuất văn bản từ một chuỗi

Trích xuất số từ chuỗi trong Excel (sử dụng VBA)

Trong phần này, tôi sẽ chỉ cho bạn cách tạo hàm tùy chỉnh để chỉ lấy phần số từ một chuỗi

Dưới đây là mã VBA chúng tôi sẽ sử dụng để tạo chức năng tùy chỉnh này

Function GetNumeric(CellRef As String)
Dim StringLength As Integer
StringLength = Len(CellRef)
For i = 1 To StringLength
If IsNumeric(Mid(CellRef, i, 1)) Then Result = Result & Mid(CellRef, i, 1)
Next i
GetNumeric = Result
End Function

Dưới đây là các bước để tạo chức năng này và sau đó sử dụng nó trong trang tính

  • Chuyển đến tab Nhà phát triểnDeveloper Tab in Excel Ribbon
  • Nhấp vào Visual Basic (Bạn cũng có thể sử dụng phím tắt ALT + F11)Visual Basic in the Ribbon in Excel - To create custom function
  • Trong chương trình phụ trợ VB Editor mở ra, nhấp chuột phải vào bất kỳ đối tượng sổ làm việc nàoRight click on VBA Backend
  • Đi tới Chèn và nhấp vào Mô-đun. Thao tác này sẽ chèn đối tượng mô-đun cho sổ làm việcInsert a module in VBA Back end
  • Trong cửa sổ Mã mô-đun, sao chép và dán mã VBA được đề cập ở trênCustom function to get the numeric part from the text
  • Đóng Trình soạn thảo VB

Bây giờ, bạn sẽ có thể sử dụng hàm GetText trong trang tính. Vì chúng tôi đã thực hiện tất cả các công việc nặng nhọc trong mã, tất cả những gì bạn cần làm là sử dụng công thức =GetNumeric(A2).

Điều này sẽ ngay lập tức chỉ cung cấp cho bạn phần số của chuỗi

Using Custom VBA Function to get only the numeric part from a string in Excel

Lưu ý rằng vì sổ làm việc hiện có mã VBA trong đó, bạn cần lưu nó với. xls hoặc. phần mở rộng xlsm

Tải xuống tệp ví dụ

Trong trường hợp bạn phải sử dụng công thức này thường xuyên, bạn cũng có thể lưu công thức này vào Sổ làm việc Macro cá nhân của mình. Điều này sẽ cho phép bạn sử dụng công thức tùy chỉnh này trong bất kỳ sổ làm việc Excel nào mà bạn làm việc cùng

Trích xuất văn bản từ một chuỗi trong Excel (sử dụng VBA)

Trong phần này, tôi sẽ chỉ cho bạn cách tạo hàm tùy chỉnh để chỉ lấy phần văn bản từ một chuỗi

Dưới đây là mã VBA chúng tôi sẽ sử dụng để tạo chức năng tùy chỉnh này

Function GetText(CellRef As String)
Dim StringLength As Integer
StringLength = Len(CellRef)
For i = 1 To StringLength
If Not (IsNumeric(Mid(CellRef, i, 1))) Then Result = Result & Mid(CellRef, i, 1)
Next i
GetText = Result
End Function

Dưới đây là các bước để tạo chức năng này và sau đó sử dụng nó trong trang tính

  • Chuyển đến tab Nhà phát triểnDeveloper Tab in Excel Ribbon
  • Nhấp vào Visual Basic (Bạn cũng có thể sử dụng phím tắt ALT + F11)Visual Basic in the Ribbon in Excel - To create custom function
  • Trong chương trình phụ trợ VB Editor mở ra, nhấp chuột phải vào bất kỳ đối tượng sổ làm việc nàoRight click on VBA Backend
  • Đi tới Chèn và nhấp vào Mô-đun. Thao tác này sẽ chèn đối tượng mô-đun cho sổ làm việc
    • Nếu bạn đã có một mô-đun, hãy nhấp đúp vào mô-đun đó (không cần chèn mô-đun mới nếu bạn đã có nó)Insert a module in VBA Back end
  • Trong cửa sổ Mã mô-đun, sao chép và dán mã VBA được đề cập ở trênCustom function to get the Text part from the string
  • Đóng Trình soạn thảo VB

Bây giờ, bạn sẽ có thể sử dụng hàm GetNumeric trong trang tính. Vì chúng tôi đã thực hiện tất cả các công việc nặng nhọc trong mã nên tất cả những gì bạn cần làm là sử dụng công thức =GetText(A2) .

Điều này sẽ ngay lập tức chỉ cung cấp cho bạn phần số của chuỗi

Using Custom VBA Function to get only the Text part from a string in Excel

Lưu ý rằng vì sổ làm việc hiện có mã VBA trong đó, bạn cần lưu nó với. xls hoặc. phần mở rộng xlsm

Trong trường hợp bạn phải sử dụng công thức này thường xuyên, bạn cũng có thể lưu công thức này vào Sổ làm việc Macro cá nhân của mình. Điều này sẽ cho phép bạn sử dụng công thức tùy chỉnh này trong bất kỳ sổ làm việc Excel nào mà bạn làm việc cùng

Trong trường hợp bạn đang sử dụng Excel 2013 hoặc các phiên bản trước và không có

Bạn cũng có thể thích các Hướng dẫn Excel sau

  • CONCATENATE Phạm vi Excel (có và không có dấu phân cách)
  • Hướng dẫn cho người mới bắt đầu sử dụng vòng lặp tiếp theo trong Excel VBA
  • Sử dụng văn bản thành cột trong Excel
  • Cách trích xuất một chuỗi con trong Excel (Sử dụng công thức TEXT)
  • Ví dụ Macro Excel cho người mới bắt đầu VBA
  • Tách văn bản và số trong Excel

Excel Ebook Subscribe

SÁCH EXCEL MIỄN PHÍ

Nhận Ebook 51 mẹo Excel để tăng năng suất và hoàn thành công việc nhanh hơn

Tên

E-mail

CÓ - GỬI SÁCH ĐIỆN TỬ CHO TÔI

14 suy nghĩ về "Trích xuất số từ chuỗi trong Excel (Sử dụng công thức hoặc VBA)"

  1. bọ chét

    Phương pháp tiếp cận hoàn hảo được trình bày rõ ràng

  2. Daniel Abou-Chakra

    nó không tồn tại trong năm 2016. tôi nghĩ nó là n 360. tôi có 2016 và nó không có ở đó. phải sử dụng phương pháp VBA của bạn đã hoạt động. xin cảm ơn

  3. sayeed

    Rất hữu ích. Thực sự đã giúp. Thanks

  4. Rahul Sharma

    Xin chào, tôi muốn trích xuất chữ và số từ chuỗi cho toàn bộ sổ làm việc có các mục hàng nghìn. Và tất cả các mục là loại khác nhau, xin vui lòng giúp đỡ. Bài dự thi như hình bên dưới
    1). “2019-06-12 18. 05. 18– Một thẻ RAX bị lỗi; . ROJ 119 2329/1 R18 Sr. Không. (S)AE56819158. Lý do. ĐÈN LED ĐỎ Tiếp tục trên thẻ, Sau khi thay đổi Khe cắm, Không thay đổi trạng thái. ”
    từ mục này tôi muốn A) “mã phần tôi. e “ROJ1192329/1” & B)Số sê-ri i. e “AE56819158”
    2). 2019-07-16 17. 40. 34– Hai Số của Thẻ RU21 bị lỗi tại Fatehpur Kalan Node-B 3G BTS Cả hai Thẻ đều được kiểm tra thay thế bằng khu vực hoạt động nhưng thẻ vẫn bị hỏng với CHÂN ĐỎ vĩnh viễn trên thẻ giống nhau đã được tuân thủ bởi JTO NAGAR Số sê-ri. -1)AE56669151 , 2)CB47479036 Mã bộ phận. 1)KRC118 16/3 R2A ,2) KRC 121 154/1 R3A
    từ mục này tôi muốn A) mã bộ phận KRC121154/1 & B) Số sê-ri AE56669151 & CB47479036
    Mọi thứ trong cột khác nhau. Làm ơn giúp tôi

  5. Nikolina Kremmyda

    làm cách nào để trích xuất các giá trị thập phân?

  6. William 19

    Chào Hội nghị thượng đỉnh,

    Bạn cũng có thể muốn xem xét ký hiệu thập phân (dấu chấm/chấm “. ” cho Bắc Mỹ, hoặc dấu phẩy “,” tùy thuộc vào địa phương/quốc gia)

    Trong hầu hết các trường hợp lấy số, bạn sẽ muốn số thập phân
    Tôi đang xử lý US$1,425K và tôi sẽ nhận được 1425 (dấu phẩy không liên quan)
    Nhưng khi tôi có US$250. 5K, tôi sẽ nhận được 12505. Trong trường hợp này, con số mong muốn là 250. 5 (số thập phân có liên quan)

    Vì vậy, tôi đã thêm Or Mid(CellRef, i, 1)=”. ” cho mục đích của tôi

    Lưu ý rằng các quốc gia khác sẽ có US$1. 425,5K

  7. CÂY GẬY DIO

    ĐỪNG LÀM VIỆC LƯỜI

  8. Khalid Alzahrani

    Bạn ơi, Các ô này có mã (?*) và (?) và (“Low Vol”) và các số có mã (67,306,444 *) làm cách nào để tách các số ra dùng để tính ạ. Thật không may, chức năng Getnumber không giúp được gì đặc biệt khi tất cả các mã trong cùng một cột với hơn 2 nghìn ô

    đây thử thách

  9. rick boen

    Tôi đang sử dụng Excel 2016. Chức năng textjoin chỉ khả dụng trong 365. Mình gõ công thức VBA mà không được. Không chỉ vậy, giờ đây sẽ không có hàm hay phép tính nào hoạt động trên bảng tính. Hãy giúp tôi

  10. shishir sharma

    Xin chào Sumit, tôi xem tất cả các video đã xuất bản của bạn và thấy nó thú vị và hữu ích…. Tôi cần sự giúp đỡ nhỏ của bạn hôm nay tôi muốn chuyển đổi giá trị số thành từ mà không cần sử dụng macro nếu có bất kỳ công thức nào giống như vậy, vui lòng trợ giúp

  11. Vikas G

    UDF với một sửa đổi. -
    ———————————————————————-
    Hàm GetNumeric(CellRef dưới dạng chuỗi)
    Độ dài chuỗi mờ dưới dạng số nguyên
    Kết quả mờ ””””””””””””””””””””'
    Kết quả = “”
    StringLength = Len(CellRef)
    Đối với i = 1 đến StringLength
    Nếu IsNumeric(Mid(CellRef, i, 1)) Thì Kết quả = Kết quả & Giữa(CellRef, i, 1)
    tiếp theo tôi
    GetNumeric = Kết quả * 1 ””””””””””””””””””””
    chức năng kết thúc
    ——————————————————————————-
    Hàm GetText(CellRef dưới dạng chuỗi)
    Độ dài chuỗi mờ dưới dạng số nguyên
    StringLength = Len(CellRef)
    Kết quả mờ dưới dạng chuỗi ””””””””””””””””””””
    Kết quả = “”
    Đối với i = 1 đến StringLength
    Nếu Không (IsNumeric(Mid(CellRef, i, 1))) Thì Kết quả = Kết quả & Giữa(CellRef, i, 1)
    tiếp theo tôi
    GetText = Kết quả
    chức năng kết thúc

  12. Franz

    Nếu phần số luôn ở cuối, như trong ví dụ của bạn, tôi nghĩ công thức sau đây sẽ hiệu quả hơn để trích xuất phần số. =VALUE(TRIM(MID(A2,FIND(“. ”,SUBSTITUTE(A2,” “,”. ”,LEN(A2)-LEN(SUBSTITUTE(A2,” “,””)))),9999999))) và cái sau để chỉ trích xuất văn bản =TRIM(LEFT(A2,FIND(“. ”,SUBSTITUTE(A2,” “,”. ”,LEN(A2)-LEN(SUBSTITUTE(A2,” “,””))))))

    • Sumit Bansal

      Cảm ơn Franz đã chia sẻ. Công thức này không hoạt động nếu không có dấu cách. Ví dụ: nếu văn bản là “ABC123” thì nó sẽ trả về lỗi