Bài viết này Học Excel Online gửi tới các bạn bộ hướng dẫn cơ bản về hàm String VBA vốn được ứng dụng rất nhiều trong khởi tạo và quản lý các chuỗi. Chúng ta hãy bắt đầu ngay thôi!
Xem nhanh
String operations | Các hàm trong VBA (s) |
Nối hai hoặc nhiều chuỗi | Format hoặc “&” |
Xây dựng chuỗi từ mảng | Join |
So sánh – thông thường (Compare_ | StrComp or “=” |
So sánh chuổi theo mảng, theo pattern | Like |
Chuyển đổi kiểu dữ liệu sang kiểu chuỗi | CStr, Str |
Chuyển đổi kiểu dữ liệu thành kiểu date | Simple: CDate
Advanced: Format |
Chuyển đổi kiểu dữ liệu thành kiểu số | Simple: CLng, CInt, CDbl, Val
Advanced: Format |
Chuyển đổi unicode, wide, narrow | StrConv |
Chuyển đổi thành upper/lower case | StrConv, UCase, LCase |
Trích xuất dữ liệu từ chuỗi | Left, Right, Mid |
Định dạng chuỗi | Format |
Tìm kiếm các ký tự trong chuỗi | InStr, InStrRev |
Tạo chuỗi | String |
Độ dài của chuỗi | Len |
Xóa khoảng trống | LTrim, RTrim, Trim |
Thay thế một phần của chuỗi | Replace |
Đảo ngược chuỗi | StrReverse |
Phân tích cú pháp chuỗi thành mảng | Split |
Sử dụng hàm String VBA. Có rất nhiều cách thao tác với String VBA
VBA có rất nhiều cách để thực hiện các tác vụ trên một cách dễ dàng. Bài viết dưới đây sẽ cung cấp hướng dẫn về cách sử dụng chuỗi trong VBA.
Khi xử lý hàm String VBA cần lưu ý 2 điểm quan trọng sau:
Một điểm quan trọng là không được thay đổi chuỗi gốc trong VBA, nếu muốn thay đổi chuỗi ban đầu chúng ta chỉ cần gán kết quả cho chuỗi ban đầu.
Một số hàm như StrComp () và Guide… có tham số Option Compare và hoạt động như sau:
vbTextCompare : Chữ hoa và chữ thường được coi là giống nhau
vbBinaryCompare : Chữ hoa và chữ thường được coi là khác nhau
Đoạn mã sau sử dụng hàm so sánh chuỗi StrComp () để chứng minh tham số Compare:
Bạn có thể sử dụng Option Compare thay vì phải sử dụng compare nhiều lần như trên. Tùy chọn Option Compare đặt ở đầu Mô-đun. Bất kỳ hàm nào sử dụng tham số Compare sẽ lấy cài đặt này làm mặc định. Hai cách để sử dụng Option Compare là:
1. Option Compare Text: làm cho vbTextCompare trở thành đối số Compare mặc định.
2. Option Compare Binary: Tạo vbBinaryCompare đối số Compare mặc định
Nếu Option Compare không được sử dụng thì mặc định là Option Compare Binary.
Sử dụng toán tử “&” để nối các chuỗi, ví dụ:
Trong ví dụ các dữ liệu không cùng loại như date và số được tự động chuyển đổi thành chuỗi. Toán tử “+” cũng được sử dụng để nối các chuỗi, sự khác biệt là nó chỉ làm việc với chuỗi cùng kiểu dữ liệu, nếu sử dụng khác kiểu sẽ xuất hiện lỗi:
Các hàm được đề cập trong mục dưới đây rất hữu ích khi xử lý trích xuất dữ liệu từ một chuỗi.
Hàm | Tham số | Mô tả | Ví dụ |
Left | string, length | Trả về ký tự từ phía bên trái | Left(“John Smith”,4) |
Right | string, length | Trả về lý tự từ phía bên phải | Right(“John Smith”,5) |
Mid | string, start, length | Trả về ký tự từ giữa | Mid(“John Smith”,3,2) |
Các hàm Left , Right và Mid được sử dụng để trích xuất các phần của một chuỗi, những hàm này sử dụng khá đơn giản. Left đọc các ký tự từ bên trái, Right đọc ký tự từ bên phải và Mid từ điểm bắt đầu mà bạn chỉ định.
Như đã đề cập, không được thay đổi chuỗi gốc trong VBA, thay vào đó sẽ trả dưới dạng một chuỗi mới.
Trong ví dụ dưới có thể thấy rằng chuỗi Fullname không bị thay đổi khi sử dụng hàm Left:
Nếu bạn muốn thay đổi chuỗi ban đầu, bạn chỉ cần gán nó vào giá trị trả về của hàm:
Hàm | Tham số | Mô tả | Ví dụ |
InStr | String1, String2 | Tìm vị trí của chuỗi | InStr (“John Smith”, “h”) |
InStrRev | StringCheck, StringMatch | Tìm vị trí của chuỗi từ cuối | InStrRev (“John Smith”, “h”) |
InStr và InStrRev là các hàm VBA được sử dụng để tìm kiếm các chuỗi cho một chuỗi con. Nếu chuỗi tìm kiếm được tìm thấy thì vị trí (từ đầu chuỗi kiểm tra) của chuỗi tìm kiếm được trả về. Nếu chuỗi tìm kiếm không được tìm thấy thì trả về số không. Nếu một trong hai chuỗi là null thì trả về null (Vô giá trị).
InStr() Start[Optional], String1, String2, Compare[Optional]
InStr trả về lần xuất hiện đầu tiên của chuỗi con được chỉ định. Sau đây là một số ví dụ về việc sử dụng:
InStrRev() StringCheck, StringMatch, Start[Optional], Compare[Optional]
Hàm InStrRev giống như InStr ngoại trừ việc nó tìm kiếm từ cuối chuỗi. Điều quan trọng cần lưu ý là vị trí trả về là vị trí ngay từ đầu.
Ví dụ:
Các hàm InStr và InStrRev rất hữu ích khi xử lý các tìm kiếm chuỗi cơ bản. Tuy nhiên, nếu sử dụng chúng để trích xuất văn bản từ một chuỗi sẽ phức tạp hơn.
Hàm | Tham số | Mô tả | Thí dụ |
LTrim | String | Xóa khoảng trắng từ bên trái | LTrim (“John”) |
RTrim | String | Xóa khoảng trắng từ bên phải | RTrim (“John”) |
Xén | String | Loại bỏ các dấu cách từ trái và phải | Trim (“John”) |
Các hàm Trim là các hàm đơn giản loại bỏ các khoảng trắng khỏi đầu hoặc cuối của một chuỗi.
Sử dụng các hàm Trim và các ví dụ
Hàm | Tham số | Mô tả | Ví dụ |
Len | chuỗi | Trả về độ dài của chuỗi | Len (“John Smith”) |
Len là một hàm đơn giản khi được sử dụng với một chuỗi, len trả về số ký tự mà chuỗi chứa. Nếu được sử dụng với kiểu Long, nó sẽ trả về số byte.
Hàm | Tham số | Mô tả | Ví dụ |
StrReverse | String | Đảo ngược một chuỗi | StrReverse (“John Smith”) |
StrReverse là một chức năng dễ sử dụng khác, trả về chuỗi đã cho với các ký tự được đảo ngược.
Hàm | Tham số | Mô tả | Ví dụ |
StrComp | string1, string2 | So sánh 2 chuỗi | StrComp (“John”, “John”) |
Hàm StrComp được sử dụng để so sánh hai chuỗi.
Các tham số
StrComp() String1, String2, Compare[Optional]
Giá trị trả về | Mô tả |
0 | Các chuỗi khớp |
-1 | string1 nhỏ hơn string2 |
1 | string1 lớn hơn string2 |
Null (vô giá trị) | nếu một trong hai chuỗi là null |
Sử dụng và các ví dụ
Sau đây là một số ví dụ về việc sử dụng hàm StrComp :
Sử dụng dấu “=” để so sánh các chuỗi, sự khác biệt giữa cách này với hàm StrComp:
Ví dụ:
Toán tử “<>” có nghĩa là “không bằng”. Về cơ bản nó ngược lại với việc sử dụng dấu bằng như đoạn mã sau cho thấy
Operator | Tham số | Mô tả | Example |
Like | string, string pattern | kiểm tra xem chuỗi có mẫu đã cho không | “abX” Like “??X” “54abc5” Like “*abc#” |
Mã thông báo | Ý nghĩa |
? | Bất kỳ ký tự đơn nào |
# | Bất kỳ chữ số đơn nào (0-9) |
* | Không ký tự hoặc nhiều ký tự |
[charlist] | Bất kỳ ký tự nào trong danh sách |
[!charlist] | Bất kỳ ký tự nào không có trong danh sách ký tự |
Đối sánh mẫu được sử dụng để xác định chuỗi có mẫu ký tự cụ thể hay không. Ví dụ: bạn muốn kiểm tra khách hàng có 3 chữ số và theo sau là 3 ký tự chữ cái hoặc một chuỗi có các chữ cái XX và theo sau là bất kỳ kí tự nào.
Nếu chuỗi khớp với mẫu thì giá trị trả về là true, ngược lại là False.
Ví dụ sử dụng cơ bản các mã thông báo, chuỗi mã như sau:
[abc] [! def]? # X *
Xem cách chuỗi nay hoạt động:
[abc] một ký tự là a, b hoặc c
[! Def] một ký tự chung không phải là d, e hoặc f
? bất kỳ ký tự nào
# bất kỳ chữ số nào
X ký tự X
* theo sau bởi không hoặc nhiều ký tự
Do đó, chuỗi sau là apY6X hợp lệ
a là một trong abc
p không phải là một trong các ký tự d, e hoặc f
Y là bất kỳ ký tự nào
6 là một chữ số
X là chữ X
Các ví dụ mã sau đây cho thấy kết quả của các chuỗi khác nhau với mẫu này :
Toán tử Like sử dụng so sánh nhị phân hoặc văn bản dựa trên cài đặt Option Compare.
Hàm | Tham số | Mô tả | Example |
Replace | string, find, replace, start, count, compare |
Thay thế một chuỗi bằng chuỗi khác | Replace (“Jon”,”n”,”hn”) |
Replace được sử dụng để thay thế một chuỗi con bằng một chuỗi con khác. Nó thay thế tất cả các trường hợp của chuỗi con được tìm thấy theo mặc định.
Replace() Expression, Find, Replace, Start[Optional], Count[Optional], Compare[Optional]
Đoạn mã sau đây cho thấy một số ví dụ về việc sử dụng hàm Replace:
Kết quả
A; B; C; D; E
Peter Jones, Sophia Jones
ACD ABC BAB
Trong các ví dụ sau, chúng ta sử dụng tham số tùy chọn Count để xác định số lần thay thế cần thực hiện. Ví dụ, đặt Count bằng 1 có nghĩa là thay thế ngay lần xuất hiện đầu tiên.
Kết quả
A;B?C?D?E
A;B;C;D?E
Tham số tùy chọn Start cho phép bạn trả lại một phần của một chuỗi. Vị trí bạn chỉ định bằng Start là nơi nó bắt đầu trả về từ vị trí đó và do vậy nó sẽ không trả về bất kỳ phần nào của chuỗi trước vị trí này cho dù có thực hiện thay thế hay không.
Kết quả
;C;D;E
;E
CD
Đôi khi bạn muốn thay thế chữ hoa hoặc chữ thường. Chúng ta có thể sử dụng tham số Compare để thực hiện việc này.
Kết quả
XaXa
XXXX
Nếu bạn muốn thay thế nhiều giá trị trong một chuỗi, chúng ta có thể lồng các lệnh với nhau. Trong đoạn mã sau, chúng ta muốn thay thế X và Y bằng A và B tương ứng.
Trong ví dụ tiếp theo, chúng tôi sẽ thay đổi đoạn mã để thực hiện tác vụ tương tự. Sử dụng giá trị trả về của thay thế đầu tiên làm đối số cho thay thế thứ hai.
Kết quả của cả hai Sub này là
XYCD XYDN
Phần này để cập chuyển đổi số thành một chuỗi. Một điểm rất quan trọng ở đây là VBA sẽ tự động chuyển đổi thành chuỗi, ví dụ:
Khi mã chạy, số đã được tự động chuyển đổi thành chuỗi. Khi gán một giá trị cho một chuỗi, VBA sẽ chịu trách nhiệm chuyển đổi.
Hàm | Tham số | Mô tả | Ví dụ |
CStr | Expression | Chuyển đổi một biến số thành một chuỗi | CStr (“45,78”) |
Str | number | Chuyển đổi một biến số thành một chuỗi | Str (“45,78”) |
Trong một số trường hợp, có thể sử dụng cả hai hàm trên để chuyển đổi một mục thành một một chuỗi mà không cần đặt nó vào một biến trong chuỗi trước. Cả hai đều lấy được biểu thức dưới dạng hàm và áp dụng nhiều kiểu dữ liệu như Long, Double, Data hoặc là Boolean..
Ví dụ bạn đang đọc danh sách các giá trị từ các loại khác nhau trong bộ sưu tập. Chúng ta có thể sử dụng hàm Str/CStr để đảm bảo chúng lưu trữ dưới dạng chuỗi, ví dụ:
Trong ví dụ trên có thể sử dụng Str để chuyển đổi giá trị của một ô thành một chuỗi. Chúng ta gán giá trị cho chuỗi và sau đó gán chuỗi đó cho bộ sưu tập. Vì vậy, Str ở đây sẽ hiệu quả hơn.
Sự khác biệt giữa hàm Str và CStr là CStr chuyển đổi dựa trên vùng. Nếu macro được sử dụng ở nhiều vùng thì cần sử dụng CStr cho các chuyển đổi chuỗi.
Bạn nên thực hành sử dụng CStr khi đọc giá trị từ các ô. Nếu mã được sử dụng ở một vùng khác thì bạn sẽ không phải thực hiện bất kỳ thay đổi nào để mã hoạt động chính xác.
Chuyển đổi chuỗi thành Number- CLng, CDbl, Val, v.v.
Hàm | Trả về | Ví dụ |
CBool | Boolean | CBool(“True”), CBool(“0”) |
CCur | Currency | CCur(“245.567”) |
CDate | Date | CDate(“1/1/2017”) |
CDbl | Double | CCur(“245.567”) |
CDec | Decimal | CDec(“245.567”) |
CInt | Integer | CInt(“45”) |
CLng | Long Integer | CLng(“45.78”) |
CVar | Variant | CVar(“”) |
Các hàm trên dùng để chuyển đổi chuỗi thành nhiều kiểu dữ liệu khác nhau.
Sử dụng các loại chuyển đổi mang đến sự linh hoạt. Có nghĩa bạn có thể xác định kiểu dữ liệu trong thời gian chạy. Trong đoạn mã sau, chúng ta đặt kiểu dữ liệu dựa trên đối số sType được truyền cho hàm PrintValue. Kiểu này có thể đọc đượcnguồn bên ngoài chẳng hạn như một ô. Nếu chúng ta khai báo một biến là Long thì nó sẽ luôn Long khi mã chạy.
Nếu chuỗi không phải là một số hợp lệ (tức là chứa các ký hiệu dạng số khác) thì bạn sẽ gặp lỗi “Loại không khớp”.
Hàm Val chuyển đổi các số đầu tiên mà nó gặp. Khi nó gặp các chữ cái trong một chuỗi, nó sẽ dừng lại. Nếu chỉ có các chữ cái thì nó trả về giá trị là 0. Đoạn mã sau đây cho thấy một số ví dụ về việc sử dụng Val:
Hàm Val có hai nhược điểm
Function | Params | Description | Example |
String | number, character | Converts a number variable to a string | String (5,”*”) |
Hàm String được sử dụng để tạo một chuỗi các ký tự lặp lại. Đối số đầu tiên là số lần lặp lại, đối số thứ hai là ký tự.
Function | Params | Description | Example |
StrConv | string, conversion, LCID | Converts a String | StrConv(“abc”,vbUpperCase) |
Kết quả
MARY HAD A LITTLE LAMB
MARY HAD A LITTLE LAMB
mary had a little lamb
mary had a little lamb
Mary Had A Little Lamb
Các chuyển đổi khác
Cũng như trường hợp StrConv có thể thực hiện các chuyển đổi khác dựa trên thông số chuyển đổi. Bảng sau đây hiển thị danh sách các giá trị tham số khác nhau và tác dụng của chúng.
Constant | Value | Converts |
vbUpperCase | 1 | to upper case |
vbLowerCase | 2 | to lower case |
vbProperCase | 3 | first letter of each word to uppercase |
vbWide* | 4 | from Narrow to Wide |
vbNarrow* | 8 | from Wide to Narrow |
vbKatakana** | 16 | from Hiragana to Katakana |
vbHiragana | 32 | from Katakana to Hiragana |
vbUnicode | 64 | to unicode |
vbFromUnicode | 128 | from unicode |
Function | Params | Description | Example |
Split | expression, delimiter, limit, compare |
Parses a delimited string to an array | arr = Split(“A;B;C”,”;”) |
Join | source array, delimiter | Converts a one dimensional array to a string | s = Join(Arr, “;”) |
Bạn có thể dễ dàng phân tích cú pháp một chuỗi thành một mảng. Bạn chỉ cần sử dụng hàm Split với tham số là dấu phân cách. Đoạn mã sau đây cho thấy một ví dụ về việc sử dụng hàm Split.
Kết quả:
John
Jane
Paul
Sophie
Nếu bạn muốn xây dựng một chuỗi từ một mảng, bạn có thể thực hiện dễ dàng bằng cách sử dụng hàm Join. Đây thực chất là một sự đảo ngược của chức năng Split. Đoạn mã sau cung cấp một ví dụ về việc sử dụng Join :
Kết quả
John,Jane,Paul,Sophie
Function | Params | Description | Example |
Format | expression, format, firstdayofweek, firstweekofyear |
Formats a string | Format(0.5, “0.00%”) |
Hàm Format được sử dụng để định dạng một chuỗi dựa trên các hướng dẫn. Nó chủ yếu được sử dụng để đặt ngày hoặc số ở định dạng nhất định. Các ví dụ dưới đây cho thấy các cách phổ biến nhất.
Các ví dụ sau đây là một số cách định dạng số phổ biến:
Một cách nhanh chóng để tìm ra định dạng sẽ sử dụng là áp dụng định dạng ô trên trang tính Excel. Ví dụ: thêm một số vào một ô. Sau đó nhấp chuột phải và định dạng ô theo cách bạn yêu cầu. Khi hài lòng với định dạng, hãy chọn Custom từ hộp danh sách danh mục ở bên trái. Khi bạn chọn mục này, bạn có thể thấy chuỗi định dạng trong hộp văn bản loại (xem hình ảnh bên dưới). Đây là định dạng chuỗi bạn có thể sử dụng trong VBA.
Và đó là toàn bộ những hướng dẫn cơ bản của chúng tôi về sử dụng String VBA. Nếu còn bất cứ thắc mắc nào về String trong VBA hay rộng hơn là Excel VBA hãy cmt ngay xuống phía dưới để được Học Excel Online giải đáp trong tích tắc nhé!