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")→ +84901234567 → 0901-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ànTí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.
Auto-link Email cho cell
=HYPERLINK("mailto:" & A1, A1)→ Cell hiện text email + click mở email client.
Auto-link Phone cho mobile
=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
- UDF Reference — tất cả hàm DVDAddin.
- Cheatsheet — quick reference.
- Best Practices — general tips.
- Performance — tối ưu formula nặng.