Hàm văn bản
Nhóm này gồm 14 hàm làm việc với chuỗi: nối giá trị của một vùng (có hoặc không có điều kiện), tách và trích phần tử trong chuỗi, đếm từ / đếm lần xuất hiện, xử lý Tiếng Việt (bỏ dấu, VNI/Telex, chuỗi Unicode cho VBA) và tính nhanh biểu thức khối lượng viết trong ô diễn giải.
Các ví dụ dưới đây dùng dấu chấm phẩy ; để ngăn cách tham số (Excel chạy trên Regional format Việt Nam). Nếu máy bạn dùng định dạng English (US), hãy gõ dấu phẩy , thay cho ;.
Bảng tra nhanh:
| Hàm | Công dụng |
|---|---|
dvdConcatIF | Nối các giá trị của một vùng, có hoặc không kèm điều kiện. |
dvdConcatIFS | Nối các giá trị của một vùng khi thỏa nhiều điều kiện. |
dvdJoinIF | Gộp giá trị theo một điều kiện, có tùy chọn bỏ trùng. |
dvdJoinIFS | Gộp giá trị theo nhiều cặp vùng/điều kiện. |
dvdTextJoin | Nối nhiều chuỗi hoặc vùng bằng một dấu phân cách. |
dvdTextSplitItem | Lấy phần tử thứ n sau khi tách chuỗi theo dấu phân cách. |
dvdExtractElement | Trích phần tử thứ n của chuỗi, giữ nguyên phần tử rỗng. |
dvdCountOccurrences | Đếm số lần một chuỗi con xuất hiện trong chuỗi chính. |
dvdWordCount | Đếm số từ của một chuỗi. |
dvdUnDiacriticsVi | Bỏ dấu Tiếng Việt. |
dvdUniConvert | Chuyển văn bản gõ kiểu VNI hoặc Telex sang Unicode. |
dvdUniVba | Chuyển chuỗi Tiếng Việt thành biểu thức chuỗi dùng trong VBA. |
dvdSymbol | Chèn ký hiệu ô đánh dấu (trống / tick / gạch chéo). |
dvdEvaluate | Tính biểu thức toán học viết sau dấu hai chấm trong một chuỗi. |
dvdConcatIF
Nối các giá trị của một vùng thành một chuỗi; nếu khai báo thêm vùng điều kiện thì chỉ nối những dòng thỏa điều kiện.
Cú pháp:
=dvdConcatIF(Delimiter; ConcatRange; [ConditionRange]; [Condition])| Tham số | Bắt buộc | Mô tả |
|---|---|---|
Delimiter | Có | Ký tự phân cách giữa các giá trị được nối. |
ConcatRange | Có | Phạm vi các ô cần nối giá trị. |
ConditionRange | Không | Phạm vi chứa giá trị dùng để so với điều kiện. |
Condition | Không | Giá trị điều kiện, chấp nhận toán tử (">5", ">=2", "<>0") và ký tự đại diện ("BT*"). |
Ví dụ:
=dvdConcatIF(", "; C6:C40; B6:B40; "Móng")
// → "Bê tông lót M100, Bê tông móng M300, Cốt thép móng"
=dvdConcatIF(" + "; C6:C40)
// → nối toàn bộ tên công tác có nội dung trong C6:C40Lưu ý
ConditionRangevàConditionphải khai báo cùng nhau; thiếu một trong hai thì hàm nối toàn bộ vùng.- Khi không có điều kiện, các ô trống được bỏ qua.
dvdConcatIFS
Nối các giá trị của một vùng khi thỏa đồng thời nhiều điều kiện, mỗi điều kiện là một cặp vùng và tiêu chí.
Cú pháp:
=dvdConcatIFS(Delimiter; ConcatRange; Conditions…)| Tham số | Bắt buộc | Mô tả |
|---|---|---|
Delimiter | Có | Ký tự phân cách giữa các giá trị được nối. |
ConcatRange | Có | Phạm vi các ô cần nối giá trị. |
Conditions | Có | Các cặp Vùng / Điều kiện, khai báo lần lượt và lặp lại bao nhiêu cặp tùy nhu cầu. |
Ví dụ:
=dvdConcatIFS(", "; C6:C60; B6:B60; "Móng"; E6:E60; ">0")
// → "Bê tông móng M300, Cốt thép móng" (hạng mục Móng và có khối lượng)Lưu ý
- Điều kiện dùng cùng cú pháp với
dvdConcatIF: toán tử so sánh hoặc ký tự đại diện. - Các vùng điều kiện nên có cùng số ô với
ConcatRange; dòng nào vượt quá số ô của vùng điều kiện sẽ bị loại.
dvdJoinIF
Gộp các giá trị của một vùng khi cột điều kiện khớp đúng với giá trị cho trước, có thể bỏ trùng và ghi kèm tên điều kiện ở đầu kết quả.
Cú pháp:
=dvdJoinIF(CriteriaRange; Condition; ConcatenateRange; [Separator]; [RemoveDuplicate]; [ShowCondition])| Tham số | Bắt buộc | Mô tả |
|---|---|---|
CriteriaRange | Có | Phạm vi chứa các điều kiện để lọc dữ liệu. |
Condition | Có | Điều kiện để lọc. |
ConcatenateRange | Có | Phạm vi giá trị cần gộp. |
Separator | Không | Dấu phân tách, mặc định ", ". |
RemoveDuplicate | Không | TRUE để bỏ giá trị trùng, mặc định FALSE. |
ShowCondition | Không | TRUE để thêm điều kiện và dấu hai chấm trước kết quả. |
Ví dụ:
=dvdJoinIF(B6:B60; "Tầng 3"; C6:C60; " + "; TRUE; TRUE)
// → "Tầng 3: Cột C1 + Dầm D2 + Sàn S1"
=dvdJoinIF(D6:D60; "Đạt"; A6:A60)
// → "BB-01, BB-04, BB-07" (số biên bản nghiệm thu đã đạt)Lưu ý
- Hàm so khớp chính xác (không dùng toán tử hay ký tự đại diện); cần lọc theo
">5"hay"BT*"thì dùngdvdConcatIF. CriteriaRangevàConcatenateRangephải có cùng số ô, nếu lệch nhau hàm trả về#REF!.
dvdJoinIFS
Gộp các giá trị của một vùng khi thỏa đồng thời nhiều cặp vùng/điều kiện.
Cú pháp:
=dvdJoinIFS(Separator; RemoveDuplicate; ConcatenateRange; Pairs…)| Tham số | Bắt buộc | Mô tả |
|---|---|---|
Separator | Có | Ký tự phân tách; để trống thì dùng ", ". |
RemoveDuplicate | Có | TRUE để loại bỏ giá trị trùng. |
ConcatenateRange | Có | Phạm vi cần gộp. |
Pairs | Có | Các cặp Vùng / Điều kiện, khai báo lần lượt và lặp lại bao nhiêu cặp tùy nhu cầu. |
Ví dụ:
=dvdJoinIFS(" + "; TRUE; C6:C60; B6:B60; "Tầng 3"; E6:E60; ">0")
// → "Cột C1 + Dầm D2 + Sàn S1"Lưu ý
- Số tham số trong
Pairsphải chẵn và mọi vùng điều kiện phải cùng số ô vớiConcatenateRange, nếu không hàm trả về#REF!. - Điều kiện chấp nhận toán tử so sánh và ký tự đại diện như
dvdConcatIF.
dvdTextJoin
Nối nhiều giá trị hoặc nhiều vùng bằng một dấu phân cách, có tùy chọn bỏ qua ô trống.
Cú pháp:
=dvdTextJoin(Delimiter; IgnoreEmpty; Text…)| Tham số | Bắt buộc | Mô tả |
|---|---|---|
Delimiter | Có | Dấu phân cách giữa các chuỗi văn bản. |
IgnoreEmpty | Có | TRUE để bỏ qua các giá trị trống. |
Text | Có | Các giá trị hoặc phạm vi cần nối, khai báo được nhiều tham số. |
Ví dụ:
=dvdTextJoin("; "; TRUE; B6:B12; "Phát sinh ngoài hợp đồng")
// → "Cột C1; Dầm D2; Sàn S1; Phát sinh ngoài hợp đồng"dvdTextSplitItem
Tách chuỗi theo dấu phân cách rồi lấy phần tử ở vị trí chỉ định.
Cú pháp:
=dvdTextSplitItem(InputText; Delimiter; Index; [IgnoreEmpty])| Tham số | Bắt buộc | Mô tả |
|---|---|---|
InputText | Có | Chuỗi gốc cần tách. |
Delimiter | Có | Ký tự hoặc chuỗi phân tách. |
Index | Có | Vị trí phần tử, tính từ 1. |
IgnoreEmpty | Không | TRUE để bỏ qua phần tử rỗng, mặc định TRUE. |
Ví dụ:
=dvdTextSplitItem("MB-T3-D1"; "-"; 2)
// → "T3"
=dvdTextSplitItem(A6; "/"; 3)
// → "Móng M1" (từ mã công tác "HM01/BT/Móng M1")Lưu ý
- Vị trí vượt quá số phần tử sẽ trả về chuỗi rỗng, không báo lỗi.
dvdExtractElement
Trích phần tử thứ n của một chuỗi theo dấu phân tách, giữ nguyên cả những phần tử rỗng.
Cú pháp:
=dvdExtractElement(InputString; ElementNumber; Separator)| Tham số | Bắt buộc | Mô tả |
|---|---|---|
InputString | Có | Chuỗi cần trích xuất phần tử. |
ElementNumber | Có | Số thứ tự của phần tử cần trích xuất, tính từ 1. |
Separator | Có | Ký tự hoặc chuỗi phân tách. |
Ví dụ:
=dvdExtractElement("Bê tông/M300/Móng M1"; 2; "/")
// → "M300"
=dvdExtractElement(B6; 1; ",")
// → "Cột C1" (lấy hạng mục đầu tiên trong danh sách của ô B6)Lưu ý
- Khác với
dvdTextSplitItem, hàm này đếm cả phần tử rỗng, nên"A//B"có phần tử thứ 2 là chuỗi rỗng.
dvdCountOccurrences
Đếm số lần một chuỗi con xuất hiện trong chuỗi chính.
Cú pháp:
=dvdCountOccurrences(MainText; SubText)| Tham số | Bắt buộc | Mô tả |
|---|---|---|
MainText | Có | Chuỗi văn bản trong đó cần đếm. |
SubText | Có | Chuỗi văn bản cần đếm số lần xuất hiện. |
Ví dụ:
=dvdCountOccurrences("Tầng 1;Tầng 2;Tầng 3"; ";") + 1
// → 3 (số hạng mục trong danh sách phân cách bằng dấu chấm phẩy)
=dvdCountOccurrences(C6; "D")
// → 4 (số thanh thép ký hiệu D trong ghi chú cấu kiện)Lưu ý
- Hàm phân biệt chữ hoa và chữ thường.
dvdWordCount
Đếm số từ của một chuỗi văn bản.
Cú pháp:
=dvdWordCount(Text)| Tham số | Bắt buộc | Mô tả |
|---|---|---|
Text | Có | Chuỗi văn bản cần đếm số từ. |
Ví dụ:
=dvdWordCount("Bê tông lót móng M1")
// → 5dvdUnDiacriticsVi
Bỏ dấu Tiếng Việt của một chuỗi, giữ nguyên các ký tự khác.
Cú pháp:
=dvdUnDiacriticsVi(sContent)| Tham số | Bắt buộc | Mô tả |
|---|---|---|
sContent | Có | Chuỗi Unicode Tiếng Việt cần bỏ dấu. |
Ví dụ:
=dvdUnDiacriticsVi("Bê tông cốt thép")
// → "Be tong cot thep"
=dvdUnDiacriticsVi(A6)
// → "Bien ban nghiem thu Mong M1" (dùng đặt tên file hồ sơ)dvdUniConvert
Chuyển văn bản gõ theo kiểu VNI hoặc Telex sang Tiếng Việt Unicode.
Cú pháp:
=dvdUniConvert(Text; InputMethod)| Tham số | Bắt buộc | Mô tả |
|---|---|---|
Text | Có | Văn bản cần chuyển đổi. |
InputMethod | Có | Kiểu gõ của văn bản đầu vào: "VNI" hoặc "Telex". |
Ví dụ:
=dvdUniConvert("Be6 to6ng"; "VNI")
// → "Bê tông"
=dvdUniConvert("Bee toong"; "Telex")
// → "Bê tông"Lưu ý
InputMethodchỉ nhận"VNI"hoặc"Telex"; giá trị khác thì hàm trả nguyên văn bản gốc.
dvdUniVba
Chuyển chuỗi Tiếng Việt thành biểu thức chuỗi dán được vào code VBA, các ký tự có dấu được viết thành ChrW(...).
Cú pháp:
=dvdUniVba(TxtUni)| Tham số | Bắt buộc | Mô tả |
|---|---|---|
TxtUni | Có | Chuỗi Unicode Tiếng Việt cần chuyển. |
Ví dụ:
=dvdUniVba("Nghiệm thu")
// → "Nghi" & ChrW(7879) & "m thu"Lưu ý
- Dùng khi viết macro VBA cho biểu mẫu hồ sơ: dán trực tiếp kết quả vào code để không bị lỗi font khi lưu file .bas.
dvdSymbol
Trả về ký hiệu ô đánh dấu để dùng trong biểu mẫu kiểm tra, nghiệm thu.
Cú pháp:
=dvdSymbol(value)| Tham số | Bắt buộc | Mô tả |
|---|---|---|
value | Có | 1 = hộp trống, 2 = hộp có tick, 3 = hộp có dấu x. |
Ví dụ:
=dvdSymbol(2)
// → ☑
=dvdSymbol(IF(D6="Đạt"; 2; 3))
// → ☑ khi kết quả kiểm tra là Đạt, ☒ khi không đạtLưu ý
- Giá trị khác 1, 2, 3 trả về chuỗi rỗng.
dvdEvaluate
Tính biểu thức toán học viết sau dấu hai chấm trong một chuỗi diễn giải khối lượng.
Cú pháp:
=dvdEvaluate(InputString)| Tham số | Bắt buộc | Mô tả |
|---|---|---|
InputString | Có | Chuỗi đầu vào chứa biểu thức toán học nằm sau dấu hai chấm. |
Ví dụ:
=dvdEvaluate("Móng M1: 2x3x0.8")
// → 4.8
=dvdEvaluate("Dầm D1: 5*0.3*0.5")
// → 0.75Lưu ý
- Phần chuỗi từ dấu
=trở về sau bị bỏ qua, nên diễn giải dạng"Móng M1: 2x3x0.8 = 4.8"vẫn tính đúng. - Ký tự
xvàXđược hiểu là dấu nhân; khoảng trắng bị loại bỏ. - Biểu thức không hợp lệ hoặc kết quả bằng 0 sẽ trả về chuỗi rỗng.