Excel: Trích xuất số từ chuỗi văn bản

  • Chia Sẻ Cái Này
Michael Brown

Hướng dẫn chỉ ra cách trích xuất số từ các chuỗi văn bản khác nhau trong Excel bằng cách sử dụng công thức và công cụ Trích xuất.

Khi cần trích xuất một phần của chuỗi văn bản có độ dài nhất định , Excel cung cấp ba hàm Chuỗi con (Trái, Phải và Giữa) để xử lý nhanh công việc. Khi nói đến việc trích xuất các số từ một chuỗi chữ và số, Microsoft Excel không cung cấp... gì cả.

Để lấy một số từ một chuỗi trong Excel, cần một chút khéo léo, một chút kiên nhẫn và một loạt các chức năng khác nhau lồng vào nhau. Hoặc, bạn có thể chạy công cụ Trích xuất và hoàn thành công việc chỉ bằng một cú nhấp chuột. Dưới đây, bạn sẽ tìm thấy đầy đủ thông tin chi tiết về cả hai phương pháp.

    Cách trích xuất số từ cuối chuỗi văn bản

    Khi bạn có một cột gồm các chuỗi chữ và số trong đó số đứng sau văn bản, bạn có thể sử dụng công thức sau để lấy nó.

    RIGHT( cell, LEN( cell) - MAX(IF(ISNUMBER(MID( cell, ROW(INDIRECT("1:"&LEN( cell))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN( cell))), 0))))

    Chúng ta sẽ đi sâu vào logic của công thức một chút sau. Hiện tại, chỉ cần thay thế ô bằng một tham chiếu đến ô chứa chuỗi ban đầu (trong trường hợp của chúng tôi là A2) và nhập công thức vào bất kỳ ô trống nào trong cùng một hàng, chẳng hạn như ô B2:

    =RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)))

    Công thức này chỉ lấy số ở cuối. Nếu một chuỗi cũng có các số ở đầu hoặc giữa, chúng làbị bỏ qua:

    Việc trích xuất được thực hiện với hàm RIGHT thuộc danh mục hàm Văn bản. Đầu ra của hàm này luôn là văn bản . Trong trường hợp của chúng tôi, kết quả là chuỗi con số , mà theo thuật ngữ Excel cũng là văn bản, không phải số.

    Nếu bạn cần kết quả là số (mà bạn có thể sử dụng trong các phép tính tiếp theo), sau đó đưa công thức vào hàm VALUE hoặc thực hiện một phép toán số học không làm thay đổi kết quả, chẳng hạn như nhân với 1 hoặc cộng 0. Để bắt lỗi trong các chuỗi không chứa a số duy nhất, hãy sử dụng hàm IFERROR. Ví dụ:

    =IFERROR(VALUE(RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)))), "")

    hoặc

    =IFERROR(RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0))) +0, "")

    Lưu ý. Trong Dynamic Array Excel (Office 365 và 2021), bạn nhập công thức theo cách thông thường bằng phím Enter. Trong Excel 2019 trở về trước, nó chỉ hoạt động dưới dạng công thức mảng, vì vậy hãy nhớ nhấn Ctrl + Shift + Enter để hoàn thành.

    Cách thức hoạt động của công thức này:

    Để trích xuất số từ một chuỗi chữ và số, điều đầu tiên bạn cần biết là bắt đầu trích xuất từ ​​đâu. Vị trí của ký tự không phải là số cuối cùng trong một chuỗi được xác định với sự trợ giúp của công thức phức tạp này:

    MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN( A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0))

    Để hiểu logic, hãy tìm hiểu nó từ bên trong :

    Kết hợp ROW(INDIRECT("1:"&LEN(A2)))tạo một chuỗi số tương ứng với tổng số ký tự trong chuỗi nguồn (A2) và chúng tôi cung cấp các số thứ tự này cho MID làm số bắt đầu:

    MID(A2, {1;2;3;4 ;5;6;7;8}, 1)

    Hàm MID lấy từng ký tự riêng lẻ từ A2 và trả về chúng dưới dạng một mảng:

    {"0";"5";" -";"E";"C";"-";"0";"1"}

    Vì MID là một hàm văn bản nên đầu ra của nó luôn là văn bản (như bạn có thể nhận thấy, tất cả các ký tự được đặt trong dấu ngoặc kép). Để biến số đơn thành số, chúng ta nhân mảng với 1 (phủ định kép --MID() sẽ có tác dụng tương tự). Kết quả của thao tác này là một mảng số và #VALUE! lỗi đại diện cho các ký tự không phải là số:

    ISNUMBER({0;5;#VALUE!;#VALUE!;#VALUE!;#VALUE!;0;1})

    Hàm ISNUMBER đánh giá từng phần tử của mảng và đưa ra phán quyết của nó ở dạng giá trị Boolean - TRUE cho các số, FALSE cho bất kỳ thứ gì khác:

    {TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE}

    Mảng này đi đến kiểm tra logic của hàm IF, trong đó mỗi phần tử của mảng được so sánh với FALSE:

    IF({TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE ;TRUE}=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)

    Đối với mỗi FALSE (giá trị không phải là số), một hàm ROW(INDIRECT()) khác trả về vị trí tương đối của nó trong chuỗi. Đối với mỗi TRUE (giá trị số), số 0 được trả về. Mảng kết quả trông giống nhưsau:

    {0;0;3;4;5;6;0;0}

    Phần còn lại thật dễ dàng. Hàm MAX tìm số cao nhất trong mảng trên, là vị trí của giá trị không phải số cuối cùng trong chuỗi (trong trường hợp của chúng ta là 6). Chỉ cần trừ vị trí đó khỏi tổng độ dài của chuỗi do LEN trả về và chuyển kết quả cho RIGHT để cho biết có bao nhiêu ký tự cần trích xuất từ ​​phía bên phải của chuỗi:

    RIGHT(A2, LEN (A2) - 6)

    Xong!

    Cách trích xuất số từ đầu chuỗi văn bản

    Nếu bạn đang làm việc với các bản ghi có văn bản xuất hiện sau số, bạn có thể trích xuất số từ đầu chuỗi bằng cách sử dụng công thức chung sau:

    LEFT( cell, MATCH(FALSE, ISNUMBER(MID( cell, ROW(INDIRECT("1: "&LEN( cell)+1)), 1) *1), 0) -1)

    Với chuỗi gốc trong A2, sử dụng công thức sau để lấy số:

    =LEFT(A2, MATCH(FALSE, ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)+1)), 1) *1), 0) -1)

    Bất kể có bao nhiêu chữ số ở giữa hay ở cuối, chỉ có số bắt đầu được trích xuất:

    Lưu ý. Trong Excel 365 và Excel 2021, do hỗ trợ mảng động nên công thức thông thường hoạt động tốt. Trong Excel 2019 trở về trước, bạn nên nhấn Ctrl + Shift + Enter để biến nó thành công thức mảng một cách rõ ràng.

    Cách thức hoạt động của công thức này:

    Ở đây, chúng ta lại sử dụng kết hợp các hàm ROW, INDIRECT và LEN để tạo ra một dãy số bằng tổng các ký tự trong chuỗi nguồn cộng thêm 1 (vai trò củaký tự bổ sung sẽ trở nên rõ ràng sau một chút).

    ROW(INDIRECT("1:"&LEN(A2)+1))

    MID và ISNUMBER thực hiện công việc tương tự như trong ví dụ trước - MID lấy các ký tự riêng lẻ và ISNUMBER chuyển đổi chúng thành các giá trị logic. Mảng kết quả của TRUE và FALSE chuyển đến hàm MATCH dưới dạng một mảng tra cứu:

    MATCH(FALSE, {TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;FALSE}, 0)

    MATCH tính toán vị trí tương đối của FALSE đầu tiên, cho chúng ta vị trí của ký tự không phải số đầu tiên trong chuỗi (3 trong A2). Để trích xuất các số trước đó, chúng ta trừ 1 từ vị trí của ký tự văn bản đầu tiên và cung cấp chênh lệch cho đối số num_chars của hàm LEFT:

    LEFT(A2, 3-1)

    Bây giờ, quay lại một ký tự "phụ" trong chuỗi được tạo bởi ROW(INDIRECT()+1)). Như bạn đã biết, trình tự này cung cấp các điểm bắt đầu cho chức năng MID. Nếu không có +1, MID sẽ trích xuất chính xác số ký tự có trong chuỗi gốc. Nếu chuỗi chỉ chứa số, ISNUMBER sẽ chỉ trả về TRUE trong khi MATCH cần ít nhất một FALSE. Để đảm bảo điều đó, chúng tôi thêm một ký tự nữa vào tổng độ dài của chuỗi, mà hàm MID sẽ chuyển đổi thành một chuỗi trống. Ví dụ: trong B7, MID trả về mảng sau:

    {"1";"2";"3";"4";""}

    Lưu ý. Như trường hợp của hàm RIGHT, LEFT cũng trả về một sốchuỗi con , về mặt kỹ thuật là văn bản, không phải số. Để nhận kết quả dưới dạng số thay vì chuỗi số, hãy lồng công thức vào hàm VALUE hoặc nhân kết quả với 1 như minh họa trong ví dụ đầu tiên.

    Cách lấy số từ bất kỳ vị trí nào trong chuỗi

    Nếu nhiệm vụ của bạn là trích xuất số từ bất kỳ đâu trong một chuỗi, bạn có thể sử dụng công thức đáng kinh ngạc sau được xuất bản trên diễn đàn MrExcel:

    =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 đó A2 là chuỗi văn bản gốc.

    Việc chia nhỏ công thức này sẽ cần một bài viết riêng, vì vậy bạn chỉ cần sao chép nó vào trang tính của mình để đảm bảo rằng nó thực sự hoạt động :)

    Tuy nhiên, khi kiểm tra kết quả, bạn có thể nhận thấy một nhược điểm không đáng kể - nếu chuỗi nguồn không chứa số, công thức sẽ trả về số 0, như ở hàng 6 trong ảnh chụp màn hình ở trên. Để khắc phục điều này, bạn có thể bọc công thức trong câu lệnh IF, phép thử logic kiểm tra xem chuỗi nguồn có chứa bất kỳ số nào không. Nếu đúng như vậy, công thức sẽ trích xuất số, nếu không sẽ trả về một chuỗi trống:

    =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),"")

    Như được hiển thị trong ảnh chụp màn hình bên dưới, công thức được cải thiện hoạt động rất tốt (xin gửi lời cảm ơn đến Alex, chuyên gia Excel của chúng tôi, cho cải tiến này):

    Không giống như tất cả các ví dụ trước, kết quả của công thức này là số . Để đảm bảo điều này, chỉ cần lưu ý các giá trị được căn phải trong cột B và các số 0 ở đầu bị cắt bớt.

    Mẹo. Trong Excel 365 -Excel 2019, có một giải pháp đơn giản hơn nhiều với sự trợ giúp của hàm TEXTJOIN. Vui lòng xem Cách xóa văn bản và giữ lại số.

    Trích xuất số từ chuỗi văn bản với Ultimate Suite

    Như bạn vừa thấy, không có công thức Excel tầm thường nào để lấy số từ chuỗi văn bản. Nếu bạn gặp khó khăn trong việc hiểu các công thức hoặc điều chỉnh chúng cho tập dữ liệu của mình, bạn có thể thích cách đơn giản này để lấy số từ chuỗi trong Excel.

    Với Ultimate Suite của chúng tôi được thêm vào dải băng Excel của bạn, đây là cách bạn có thể nhanh chóng truy xuất số từ bất kỳ chuỗi chữ và số nào:

    1. Chuyển đến nhóm Dữ liệu Ablebits > Văn bản và nhấp vào Trích xuất :

    2. Chọn tất cả các ô có chuỗi nguồn.
    3. Trên ngăn của công cụ Trích xuất, chọn nút radio Trích xuất số .
    4. Tùy thuộc vào việc bạn muốn kết quả là công thức hay giá trị, hãy chọn hộp Chèn dưới dạng công thức hoặc không chọn hộp này (mặc định).

      Lời khuyên của tôi là chọn hộp này nếu bạn muốn các số được trích xuất tự động cập nhật ngay khi có bất kỳ thay đổi nào đối với chuỗi nguồn. Nếu bạn muốn kết quả độc lập với các chuỗi ban đầu (ví dụ: trong trường hợp bạn định xóa dữ liệu nguồn sau này), thì không chọn hộp này.

    5. Nhấp vào nút Chèn kết quả . Xong!

    Giống như trong ví dụ trước, kết quả củatrích xuất là số , nghĩa là bạn có thể tự do đếm, tính tổng, tính trung bình hoặc thực hiện bất kỳ phép tính nào khác với chúng.

    Trong ví dụ này, chúng tôi đã chọn chèn kết quả là values và bổ trợ đã thực hiện chính xác những gì được yêu cầu:

    Nếu hộp kiểm Chèn dưới dạng công thức được chọn, bạn' d quan sát công thức trong thanh công thức. Tò mò muốn biết cái nào? Chỉ cần tải xuống bản dùng thử của Ultimate Suite và tự mình xem :)

    Các bản tải xuống hiện có

    Số trích xuất Excel - sổ làm việc mẫu (tệp .xlsx)

    Ultimate Suite - phiên bản dùng thử (.exe tập tin)

    Michael Brown là một người đam mê công nghệ chuyên dụng với niềm đam mê đơn giản hóa các quy trình phức tạp bằng các công cụ phần mềm. Với hơn một thập kỷ kinh nghiệm trong ngành công nghệ, anh ấy đã trau dồi kỹ năng của mình trong Microsoft Excel và Outlook, cũng như Google Trang tính và Tài liệu. Blog của Michael dành để chia sẻ kiến ​​thức và chuyên môn của anh ấy với những người khác, cung cấp các mẹo và hướng dẫn dễ thực hiện để cải thiện năng suất và hiệu quả. Cho dù bạn là một chuyên gia dày dạn kinh nghiệm hay người mới bắt đầu, blog của Michael đều cung cấp những hiểu biết có giá trị và lời khuyên thiết thực để tận dụng tối đa những công cụ phần mềm thiết yếu này.