Skip to content

Công thức hay dùng (Recipes)

Snippet công thức combine DVDAddin UDF + Excel built-in cho các tác vụ phổ biến.

Text processing

Convert toàn cột sang Title Case (Vietnamese)

=DvdProper(A1)

So với =PROPER(A1) built-in: chính xác cho tiếng Việt có dấu.

Clean text từ paste

=TRIM(CLEAN(DvdRemoveDiacritics(A1)))

→ Bỏ dấu + xóa whitespace thừa + xóa ký tự non-printable.

Format số điện thoại VN

=TEXT(VALUE(SUBSTITUTE(A1, "+84", "0")), "0000-000-000")

+849012345670901-234-567.

Detect URL trong cell

=DvdRegexMatch(A1, "https?://[\w.-]+(?:/[\w./?=&%-]*)?")

→ TRUE/FALSE.

Extract email

=DvdRegexExtract(A1, "[\w.+-]+@[\w-]+\.[\w.-]+")

→ Trích email đầu tiên trong text.

Date / Calendar

Đếm ngày làm việc trừ lễ Tết VN

Sheet Holidays cột A có danh sách ngày lễ.

=DvdWorkdays(A1, B1, Holidays!$A$2:$A$30)

Ngày tới hạn báo cáo (tháng sau, ngày 5)

=IF(DAY(TODAY()) > 5, DATE(YEAR(TODAY()), MONTH(TODAY())+1, 5), DATE(YEAR(TODAY()), MONTH(TODAY()), 5))

Hoặc dùng UDF DVDAddin:

=DvdAddWorkdays(EOMONTH(TODAY(), 0), 5)

Convert dương sang âm + lễ Tết

=DvdToLunar(A1)                  → "29/03/Bính Ngọ"
=DvdLunarHoliday(A1)             → "Tết Đoan Ngọ" hoặc ""

Money / Number

Định dạng tiền VND chuẩn

=DvdFormatVnd(A1)                → "1.234.567 đ"
=DvdFormatVnd(A1, TRUE)          → "1.234.567 VNĐ"

Đọc số bằng chữ cho hóa đơn

=DvdNumToText(SUM(C2:C100), "VND")

→ Cell tổng cuối hóa đơn / hợp đồng tự động đọc bằng chữ.

Tỉ giá USD/VND realtime

=VALUE(DvdParseJson(DvdHttpGet("https://api.exchangerate-api.com/v4/latest/USD"), "rates.VND"))

→ Lấy tỉ giá hiện tại từ API. Volatile — recalc khi F9.

Round to nearest 1000

=DvdRound(A1, 0, "round", 1000)

→ 1.234.567 → 1.235.000.

Lookup / Range

Lấy giá trị mới nhất theo ngày

Bảng History có cột A (date) + cột B (value).

=INDEX(History!B:B, MATCH(MAX(History!A:A), History!A:A, 0))

Hoặc UDF DVDAddin compact:

=DvdMaxByDate(History!B:B, History!A:A)

Lấy tất cả match VLOOKUP

=DvdVLookupAll("Hà Nội", A2:C100, 3)

→ Spill array tất cả giá trị cột 3 có MATCH với "Hà Nội".

So với VLOOKUP chỉ trả first.

Tổng cell visible (sau filter)

=DvdSumVisible(B:B)

So với SUM(B:B) tính cả ẩn, SUBTOTAL(9, B:B) chỉ bỏ filter-hidden (manual hide vẫn tính).

Spill arrays

Top 10 hạng mục có giá trị lớn nhất

=DvdSpillSort(DATA!A2:C1000, 3, FALSE)

→ Sort giảm dần theo cột 3.

Sau đó wrap thêm TAKE:

=TAKE(DvdSpillSort(DATA!A2:C1000, 3, FALSE), 10)

→ Lấy top 10 hàng.

Unique customers từ bảng đơn hàng

=DvdSpillUnique(Orders!B:B)

→ Spill danh sách khách hàng unique.

Filter điều kiện complex

=DvdSpillFilter(Sales!A2:E1000, "regex 'Hà Nội|Hải Phòng'", 2)

→ Filter cột 2 match regex "Hà Nội" hoặc "Hải Phòng".

AI integration

Tóm tắt nội dung cell

=DvdAskGemini("Tóm tắt văn bản sau trong 1 câu: " & A1)

Phân loại email

=DvdAskGemini("Email này thuộc loại gì? (Spam/Quảng cáo/Công việc/Cá nhân): " & A1)

→ Auto-classify email subject.

Generate test data

=DvdRandomVietnameseName()                       → tên ngẫu nhiên
=DvdRandomText(50, "vi")                         → 50 chars text VN
=RANDBETWEEN(20, 60)                              → tuổi
=CHOOSE(RANDBETWEEN(1,3), "Nam", "Nữ", "Khác")  → giới tính

→ Fill bảng test 100 dòng nhanh.

Construction-specific

Tính khối lượng đào đất

KhoiLuong = DvdRound(L * W * H, 2)

Với L, W, H là kích thước. Round to 0.01 m³.

Đếm thanh thép theo đường kính

=COUNTIF(D:D, "D16") + COUNTIF(D:D, "Ø16")

→ Đếm cả 2 cách viết thông dụng.

Tổng kết theo cấu kiện

Bảng có cột A (mã cấu kiện), B (khối lượng). Tổng theo mã:

=SUMIF(A:A, "C-*", B:B)   → tất cả cột (C-01, C-02, ...)
=SUMIF(A:A, "D-*", B:B)   → tất cả dầm
=SUMIF(A:A, "S-*", B:B)   → tất cả sàn

Tính lap length cho cốt thép

Lap length = 40 × diameter (theo TCVN 5574:2018):

=DvdRound(40 * VALUE(MID(A1, 2, 2)) / 1000, 2)

→ A1 = "D16" → 40 × 16 / 1000 = 0.64m → lap length.

Tính số cây thép cần mua

Bảng có cột A (mã CT), B (chiều dài thanh m), C (số lượng).

TotalLength = SUMPRODUCT(B:B, C:C)            → tổng chiều dài cần
WastePercent = 5%                              → hao phí 5%
RodLength = 11.7                               → chiều dài cây thép
NumberOfRods = CEILING(TotalLength * (1 + WastePercent) / RodLength, 1)

Hoặc tốt hơn: dùng Cắt thép tối ưu — chính xác hơn nhiều.

Workflow automation

Auto-fill cột STT khi thêm hàng

Cell A2 trở xuống:

=IF(B2="", "", COUNTA($B$2:B2))

→ Cột STT tự đánh khi cột B (tên hạng mục) có data.

Highlight cell sai dùng Conditional Format

CF rule: =AND(B2<>"", ISERROR(VLOOKUP(B2, BangGia!A:A, 1, FALSE))) → Tô đỏ cell B nếu Mã CT KHÔNG có trong BangGia.

=HYPERLINK("mailto:" & A1, A1)

→ Cell hiện text email + click mở email client.

=HYPERLINK("tel:" & A1, A1)

→ Cell click mở app gọi điện (trên máy có Skype / Teams).

Multi-step formulas

Reverse VLOOKUP

Cột A = mã, cột B = tên. Tìm mã từ tên:

=INDEX(A:A, MATCH("Đào đất", B:B, 0))

Hoặc compact:

=DvdReverseLookup("Đào đất", B:B, A:A)

N-th occurrence

Tìm lần xuất hiện thứ 3 của "Hà Nội" trong cột A:

=INDEX(A:A, SMALL(IF(A:A="Hà Nội", ROW(A:A)), 3))

(Ctrl+Shift+Enter cho array formula.)

Dynamic chart title

=CONCATENATE("Doanh thu tháng ", TEXT(TODAY(), "MM/yyyy"))

→ Title chart auto-update theo tháng hiện tại.

Liên quan

Released under DVDAddin License.