Các hàm xử lý chuỗi (text functions)

Vài dòng tâm sự

Trước giờ, trong diễn đàn này đã có nhiều bài viết về các hàm Excel, tổng hợp, liệt kê các hàm Excel. Tuy nhiên, nếu gọi là tổng hợp theo hệ thống, phân loại theo từng chủ đề thì chưa có.
Với một mong muốn là đóng góp được chút gì cho GPE, tôi xin gửi đến các bạn chùm topic này. Gọi là chùm bởi vì nó có nhiều topic. Được tổng hợp từ cuốn sách Formulas and Functions with Microsoft Excel 2007 của Paul McFedries, và dịch từ phần Helpcủa Excel.
Trong các topic sau đây, các hàm Excel được biên soạn theo từng chủ đề, từng loại. Thiết nghĩ rất cần thiết cho các bạn, nhất là các bạn mới làm quen với Excel.
Vì trình độ dịch thuật cũng như sự am hiểu về các hàm trong Excel là có giới hạn, nên sẽ không tránh được những sai sót. Rất mong các bạn đóng góp những ý kiến cũng như nói cho tôi biết những chỗ sai, để loạt topic này sớm được hoàn thiện.

Bùi Nguyễn Triệu Tường - giaiphapexcel.com

Download toàn bộ tài liệu tại http://www.mediafire.com/?77enl7lpon31f7r

toan-thpt.blogspot.com

Hàm TRIM

Xóa tất cả những khoảng trắng vô ích trong chuỗi văn bản, chỉ chừa lại những khoảng trắng nào dùng làm dấu cách giữa hai chữ.
Những khoảng trắng vô ích này có thể nằm ở bất kỳ đâu trong đoạn văn: ở đầu, ở cuối hoặc ở giữa…

Cú pháp: =TRIM(text)
text : chuỗi văn bản cần xóa những khoảng trắng vô ích.
Ví dụ
:

Hình sau đây cho thấy công dụng của hàm TRIM.
Mỗi chuỗi văn bản trong khối A2:A7 đều có những khoảng trắng vô ích, nằm ở đầu, ở giữa hoặc ở cuối.
Tôi đặt hàm TRIM() ở cột C. Để các bạn thấy công dụng của hàm TRIM, tôi có dùng thêm hàm LEN() đặt ở cột B và D, để đếm số ký tự trong chuỗi trước và sau khi thực hiện hàm TRIM()

Các hàm xử lý chuỗi (text functions)

Hàm CLEANDùng để xóa tất cả những ký tự không in ra được (nonprintable characters) trong chuỗi văn bản.
Hàm CLEAN() thường được dùng để gỡ bỏ những dấu ngắt đoạn, ngắt câu (có được do nhấn phím Enter), nghĩa là nối những đoạn bị xuống hàng lại với nhau.

Cú pháp: =CLEAN(text)

text: chuỗi văn bản cần xóa những ký tự không in ra được. (Những ký tự không in ra được là những ký tự có mã số từ 1 đến 31 trong bảng mã ANSI.)


Ví dụ
: Hình sau đây cho thấy công dụng của hàm CLEAN.

Các hàm xử lý chuỗi (text functions)

Hàm REPTDùng để lập đi lập lại (nhân bản) một ký tự hoặc một từ, với số lần được định trước.

Cú pháp: =REPT(text, times)

text : ký tự (character), một con số hoặc một từ (string) cần được nhân bảntimes: số lần lập đi lập lại của text


Lưu ý
:

  • Nếu times = 0, hàm REPT() sẽ trả về một chuỗi rỗng
  • Nếu text là một con số, REPT() sẽ làm tròn con số đó thành số nguyên

Hàm MID

Công dụng: Dùng để trích xuất một chuỗi con (substring) từ một chuỗi Công thức: =MID(text, start_num, num_chars])
___text: chuỗi văn bản cần trích xuất
___start_num: vị trí bắt đầu trích ra chuỗi con, tính từ bên trái sang
___num_chars: số ký tự của chuỗi con cần trích ranum_chars phải là số nguyên dương
start_num phải là số nguyên dương
– Nếu start_num lớn hơn độ dài của chuỗi thì kết quả trả về sẽ là chuỗi rỗng Ví dụ:___=MID(“Karen Elizabeth Hammond”, 7, 9) Elizabeth

Trích xuất họ, tên đệm và tên (ví dụ với tên tiếng Anh, phần tên đệm được viết tắt)

Đây cũng là dạng bài toán đã được rất nhiều bạn hỏi trên GPE.
Cách làm giống như bài Trích xuất họ và tên ở trên, tuy nhiên có khác một chút, để trích thêm phần tên đệm.
Giả sử Họ và Tên (full name) nằm ở cell A2, và đang có giá trị là Karen E. HammondĐầutiên, như bài trên, dùng công thức sau để tách phần Tên (first name):

=LEFT(A2, FIND(” “, A2) – 1) Karen

Công thức FIND(” “, A2) sẽ cho kết quả là 6, là vị trí của khoảng trắng đầu tiên (sau chữ Karen).
Để tìm vị trí của khoảng trắng thứ hai, thì bạn phải gán vị trí bắt đầu tìm (start_num) là 7, hoặc là bằng kết quả của
FIND(” “, A2) cộng thêm 1:

=FIND(” “, A2, FIND(” “,A2) + 1)

Rồi dùng kết quả của công thức này làm tham số cho hàm RIGHT() để trích ra phần Họ (last name):

=RIGHT(A2, LEN(A2) – FIND(” “, A2, FIND(” “, A2) +1)) Hammond

Để trích phần tên đệm, dùng hàm FIND() để tìm vị trí của dấu chấm (.) rồi đưa vào trong công thức của hàm MID() để tìm ký tự đứng trước dấu chấm:

=MID(A2, FIND(“.”, A2) – 1, 1) E


Hình sau đây là một minh họa cho phần vừa trình bày ở trên:

Các hàm xử lý chuỗi (text functions)


Xác định tên của cột
(Determining the Column Letter)

Trong Excel có hàm COLUMN(), cho ra kết quả là số của cột (ví dụ, gõ hàm này trong cột B thì kết quả sẽ là 2).
Nhưng đôi khi bạn muốn kết quả là tên của cột chứ không muốn đó là con số (B chứ không phải là 2), thì làm sao?

Đây là một vấn đề đòi hỏi sự khôn khéo một chút, vì tên cột trong bảng tính chạy từ A đến Z, từ AA đến AZ… và cho tới tận cùng là XFD (!)

Có một hàm giúp chúng ta tìm địa chỉ tuyệt đối của một cell, đó là hàm CELL(“address”), ví dụ $A$2, hoặc $B$10…

Hàm CELL(info_type [,reference])
Với info_type là một tham số đã được định nghĩa (sẽ nói kỹ hơn trong những bài sau)
reference là cell mà bạn chỉ định, nếu bỏ trống thì Excel sẽ lấy ngay cái cell có chứa công thức CELL().
Trong bài này, để tìm địa chỉ tuyệt đối của một cell, chúng ta sẽ dùng công thức CELL() với info_type “address”

Mời bạn xem thêm về hàm CELL()

Tinh ý một chút, ta thấy tên của cột chính là những chữ cái nằm giữa hai dấu dollar ($) trong cái địa chỉ tuyệt đối này.

Bắt đầu làm nhé: dùng hàm MID() trích ra chữ cái từ vị trí thứ 2 trong địa chỉ tuyệt đối của cell:

=MID(CELL(“Address”), 2, num_chars)

Cái khó là cái num_charsnày đây, vì tên cột thì có thể là 1, 2, hoặc 3 ký tự (ví dụ: A, AA hoặc AAA). Vận dụng hàm FIND thôi:

FIND(“$”, CELL(“address””,A2), 3) – 2

Giải thích chút nhé: Dùng hàm FIND(), tìm vị trí của dấu $ trong cái địa chỉ tuyệt đối của cell, và bắt đầu tìm từ vị trí thứ 3 trong cái địa chỉ này.

Tại sao phải trừ đi 2 ? Công thức trên sẽ chỉ ra vị trí (là một con số) của dấu $ thứ hai trong địa chỉ tuyệt đối của cell, tức là cái dấu $ phía sau tên cột,
phải trừ đi 2 tức là trừ bớt đi 2 cái $, lúc này kết quả sẽ chính là số ký tự của tên cột (1 chữ, 2 chữ hoặc 3 chữ)

Bây giờ, công thức hoàn chỉnh sẽ như sau:

=MID(CELL(“Address”), 2, FIND(“$”, CELL(“address”), 3) – 2)

Công thức này áp dụng cho chính cell chứa công thức.
Nếu muốn tìm tên cột tại một cell nào đó, bạn chỉ việc thêm địa chỉ (hoặc một cái gì đó tham chiếu đến địa chỉ này) của cell muốn tìm vào phía sau cái “address”

Ví dụ, muốn tìm tên của cell AGH68, bạn gõ:

=MID(CELL(“Address”, AGH68), 2, FIND(“$”, CELL(“address”, AGH68), 3) – 2)AGH

Hàm SUBSTITUTE

Công dụng: Dùng để thay thế một chuỗi này bằng một chuỗi khác. Hàm này cũng tương tự hàm REPLACE(), nhưng dễ sử dụng hơn.

Công thức: =SUBSTITUTE(text, old_text, new_text [,instance_num])
___text: chuỗi văn bản gốc, cần được xử lý
___old_text: chuỗi văn bản cần được thay thế
___new_text: chuỗi văn bản sẽ thay thế vào
___instance_num: số lần thay thế old_text bằng new_text, nếu bỏ qua thì tất cả old_text tìm được sẽ được thay thế bằng new_text

Ví dụ: đế thay số 2007 bằng 2008 trong câu Expense Budget for 2007

Dùng công thức như sau:

=SUBSTITUTE(“Expense Budget for 2007″, “2007”, “2008”) Expense Budget for 2008

Có nhiều chương trình có khả năng tìm kiếm một số đoạn văn và thay thế nó bằng đoạn văn khác.
Excel cũng có khả năng làm chuyện đó bằng cách dùng hàm. Đó là hàm REPLACE và hàm SUBSTITUTE.

Hàm REPLACECông dụng: Dùng để thay thế một phần của chuỗi bằng một chuỗi khác, dựa vào số ký tự được chỉ định

Công thức: =REPLACE(old_text, start_num, num_chars, new_text)
___old_text: chuỗi văn bản cần được xử lý
___start_num: vị trí bắt đầu tìm cái sẽ thay thế, tính từ bên trái sang
___num_chars: số ký tự của chuỗi cần được thay thế
___new_text: chuỗi văn bản sẽ thay thế cho số ký tự đã chọn bởi start_numnum_chars

Cái khó của hàm này là xác định được bởi start_numnum_chars. Làm sao biết được bắt đầu từ đâu và thay thế bao nhiêu chữ? Tôi gợi ý nhé:

– Bạn dùng hàm FIND() hoặc SEARCH() để xác định vị trí bắt đầu (start_num)

– Dùng hàm LEN() để xác định số ký tự của chuỗi sẽ được thay thế (num_chars)

Ví dụ: đế thay số 2007 bằng 2008 trong câu Expense Budget for 2007

Dùng công thức như sau:

=REPLACE(A1, FIND(“2007”, A1), LEN(“2007”), “2008”)Expense Budget for 2008

Với A1 = Expense Budget for 2007