25/04/2016

Cắt chuỗi ký tự trong excel

Trong excel có các hàm để cắt chuỗi là LEFT, RIGHT, MID. Cách sử dụng như sau:
LEFT(text; num_chars): cắt num_chars ký tự bên trái chuỗi text. Ví dụ: LEFT("abcde";3) thì kết quả là abc
RIGHT(text; num_chars): cắt num_chars ký tự bên phải chuỗi text. Ví dụ: RIGHT("abcde";3) thì kết quả là cde
MID(text; start_num; num_chars): cắt num_chars ký tự bắt đầu từ ký tự thứ start_num trong chuỗi text. Ví dụ: MID("abcde";2;3) thì kết quả là bcd

Giả sử ta có chuỗi ký tự sau


Muốn lấy số 123 trong đoạn trên ta làm cách nào?
Tôi viết thêm hàm sau để có thể cắt chuỗi cho chủ động hơn
Function catchuoi(str, sttkytubatdaucat, catdenkhigapkytunao)
timthay = False
For i = sttkytubatdaucat To Len(str)
ch = Mid(str, i, 1)
If ch = catdenkhigapkytunao Then
timthay = True
Exit For
End If
Next
If catdenkhigapkytunao = "" Then
timthay = True 'cut to the end of str
End If
If timthay Then
catchuoi = Mid(str, sttkytubatdaucat, i - sttkytubatdaucat)
Else
catchuoi = CVErr(xlErrNA) 'return N/A in excel
End If
End Function
view raw catchuoi.vba hosted with ❤ by GitHub

Sử dụng như sau: catchuoi(str, sttkytubatdaucat, catdenkhigapkytunao), tham số:
  • str: chuỗi ký tự gốc
  • sttkytubatdaucat: bắt đầu cắt từ vị trí này
  • catdenkhigapkytunao: cắt chuỗi cho đến khi gặp ký tự này. Nếu không tìm thấy ký tự này trong chuỗi thì kết quả sẽ trả về N/A, nếu đặt là "" thì sẽ cắt đến cuối chuỗi.

Áp dụng cho trường hợp trên ta phân tích như sau: số 123 cần lấy đứng sau ký tự ":" thứ 2 trong chuỗi, ta sẽ cắt từ vị trí sau dấu ":" thứ 2 này đến khi gặp dấu cách sau 123. Ta có công thức như sau


Hàm timsttkytu bạn có thể xem ở bài trước tôi có giới thiệu http://lehoangdieu.blogspot.com/2016/04/tim-vi-tri-cua-ky-tu-trong-excel.html.
Vì timsttkytu trả về số thứ tự của dấu ":" nên ta phải cộng 2 vào.

Không có nhận xét nào: