Excel Lambda

TỔNG QUAN BÀI VIẾT

_FILTER

Lọc dữ liệu tương tự hàm FILTER của Excel, nhưng hỗ trợ thêm wildcard trong điều kiện lọc.Hàm phù hợp khi cần lọc dữ liệu theo các điều kiện dạng chứa, bắt đầu bằng, kết thúc bằng hoặc khớp mẫu ký tự.

Ví dụ: "*Excel*" "HN*" "*2026" "A?01"FILTERS hỗ trợ tối đa 5 cặp điều kiện. Các cặp điều kiện khác nhau được kết hợp theo logic AND.

=LAMBDA(array, by_array1, criteria1, [if_empty], [by_array2], [criteria2], [by_array3], [criteria3], [by_array4], [criteria4], [by_array5], [criteria5],
  LET(
    MatchWild, LAMBDA(rng, crit,
      MAP(rng, LAMBDA(x, --(SUM(COUNTIF(x, crit))>0)))
    ),    Include1, MatchWild(by_array1, criteria1),
    Include2, IF(ISOMITTED(by_array2), 1, MatchWild(by_array2, criteria2)),
    Include3, IF(ISOMITTED(by_array3), 1, MatchWild(by_array3, criteria3)),
    Include4, IF(ISOMITTED(by_array4), 1, MatchWild(by_array4, criteria4)),
    Include5, IF(ISOMITTED(by_array5), 1, MatchWild(by_array5, criteria5)),    FILTER(
      array,
      Include1 * Include2 * Include3 * Include4 * Include5,
      IF(ISOMITTED(if_empty), "", if_empty)
    )
  )
)

 

=LAMBDA(
array,
by_array1,criteria1,
[if_empty],
[by_array2],[criteria2],
[by_array3],[criteria3],
[by_array4],[criteria4],
[by_array5],[criteria5],
[by_array6],[criteria6],
[by_array7],[criteria7],
[by_array8],[criteria8],
[by_array9],[criteria9],
[by_array10],[criteria10],

LET(
    MatchWild,
    LAMBDA(rng,crit,
        MAP(rng,LAMBDA(x,--(SUM(COUNTIF(x,crit))>0)))
    ),

    Include1, MatchWild(by_array1,criteria1),
    Include2, IF(ISOMITTED(by_array2),1,MatchWild(by_array2,criteria2)),
    Include3, IF(ISOMITTED(by_array3),1,MatchWild(by_array3,criteria3)),
    Include4, IF(ISOMITTED(by_array4),1,MatchWild(by_array4,criteria4)),
    Include5, IF(ISOMITTED(by_array5),1,MatchWild(by_array5,criteria5)),
    Include6, IF(ISOMITTED(by_array6),1,MatchWild(by_array6,criteria6)),
    Include7, IF(ISOMITTED(by_array7),1,MatchWild(by_array7,criteria7)),
    Include8, IF(ISOMITTED(by_array8),1,MatchWild(by_array8,criteria8)),
    Include9, IF(ISOMITTED(by_array9),1,MatchWild(by_array9,criteria9)),
    Include10, IF(ISOMITTED(by_array10),1,MatchWild(by_array10,criteria10)),

    FILTER(
        array,
        Include1*
        Include2*
        Include3*
        Include4*
        Include5*
        Include6*
        Include7*
        Include8*
        Include9*
        Include10,
        IF(ISOMITTED(if_empty),"",if_empty)
    )
)
)

 

Cú pháp
=FILTERS(array, by_array1, criteria1, [if_empty], [by_array2], [criteria2], [by_array3], [criteria3], [by_array4], [criteria4], [by_array5], [criteria5])Tham Số

Tham số Bắt buộc Mô tả
array Vùng dữ liệu cần lọc
by_array1 Vùng điều kiện thứ nhất
criteria1 Điều kiện lọc thứ nhất
[if_empty] Không Giá trị trả về nếu không có kết quả
[by_array2,3,4,5] Không Vùng điều kiện thứ hai, ba, bốn, năm
[criteria2,3,4,5] Không Điều kiện lọc thứ hai, ba, bốn, năm

Wildcard Hỗ Trợ

Ký tự Ý nghĩa Ví dụ
* Đại diện cho chuỗi ký tự bất kỳ "*Excel*"
? Đại diện cho một ký tự bất kỳ "A?01"
~* Tìm ký tự * thật "A~*"
~? Tìm ký tự ? thật "A~?"

Ví dụ
Lọc cột B chứa chữ Excel:
=FILTERS(A2:D100, B2:B100, "*Excel*")Lọc cột C bắt đầu bằng HN:
=FILTERS(A2:D100, C2:C100, "HN*")Lọc cột B chứa Excel, nếu không có kết quả thì trả về thông báo:
=FILTERS(A2:D100, B2:B100, "*Excel*", "Không có kết quả")Lọc theo 2 điều kiện:
=FILTERS(A2:D100, B2:B100, "*Excel*", "Không có kết quả", C2:C100, "HN*")Nghĩa là:
Cột B chứa Excel AND cột C bắt đầu bằng HNLọc theo 3 điều kiện:
=FILTERS(A2:D100, B2:B100, "*Excel*", "Không có kết quả", C2:C100, "HN*", D2:D100, "Active")Lọc theo nhiều giá trị OR trong cùng một điều kiện:
=FILTERS(A2:D100, B2:B100, {"*Excel*","*Power BI*"}, "Không có kết quả")Nghĩa là cột B chứa Excel hoặc Power BI.Kết hợp OR và AND:
=FILTERS(A2:D100, B2:B100, {"*Excel*","*Power BI*"}, "Không có kết quả", C2:C100, "HN*")Nghĩa là:
Cột B chứa Excel hoặc Power BI AND cột C bắt đầu bằng HN


Lưu ý

Các vùng by_array phải có cùng số dòng hoặc cùng số cột với array, giống nguyên tắc của hàm FILTER.Ví dụ hợp lệ:

=FILTERS(A2:D100, B2:B100, "*Excel*")Ví dụ dễ lỗi do vùng điều kiện không cùng kích thước:
=FILTERS(A2:D100, B2:B90, "*Excel*")Các cặp điều kiện khác nhau được kết hợp theo logic AND.Nhiều điều kiện trong cùng một criteria, ví dụ {"*Excel*","*Power BI*"}, được hiểu là logic OR.


_GROUPBY

Nhóm dữ liệu theo tên cột, thay vì phải chọn trực tiếp vùng cột như hàm GROUPBY gốc.

=LAMBDA(data,row_field_labels,value_field_labels,agg_fn,[total_depth],[sort_order],[filter_array],[field_relationship],
    LET(
        headers,TAKE(data,1),
        body,DROP(data,1),
        row_ids,XMATCH(TOROW(row_field_labels),headers,0),
        val_ids,XMATCH(TOROW(value_field_labels),headers,0),
        row_fields,VSTACK(CHOOSECOLS(headers,row_ids),CHOOSECOLS(body,row_ids)),
        values,VSTACK(CHOOSECOLS(headers,val_ids),CHOOSECOLS(body,val_ids)),
        IF(ISOMITTED(total_depth),
            GROUPBY(row_fields,values,agg_fn,3),
            IF(ISOMITTED(sort_order),
                GROUPBY(row_fields,values,agg_fn,3,total_depth),
                IF(ISOMITTED(filter_array),
                    IF(ISOMITTED(field_relationship),
                        GROUPBY(row_fields,values,agg_fn,3,total_depth,sort_order),
                        GROUPBY(row_fields,values,agg_fn,3,total_depth,sort_order,,field_relationship)
                    ),
                    IF(ISOMITTED(field_relationship),
                        GROUPBY(row_fields,values,agg_fn,3,total_depth,sort_order,VSTACK(TRUE,filter_array)),
                        GROUPBY(row_fields,values,agg_fn,3,total_depth,sort_order,VSTACK(TRUE,filter_array),field_relationship)
                    )
                )
            )
        )
    )
)

Cú pháp:

=GROUPBYS(data,row_field_labels,value_field_labels,agg_fn,[total_depth],[sort_order],[filter_array],[field_relationship])

Trong đó:

Tham số Ý nghĩa
data Vùng dữ liệu bao gồm cả dòng tiêu đề
row_field_labels Tên cột dùng để nhóm dòng
value_field_labels Tên cột chứa giá trị cần tổng hợp
agg_fn Hàm tổng hợp như SUMCOUNTAVERAGEMAXMIN
[total_depth] Tùy chọn hiển thị dòng tổng
[sort_order] Tùy chọn sắp xếp
[filter_array] Mảng điều kiện lọc
[field_relationship] Cách xử lý quan hệ giữa nhiều trường nhóm

Ví dụ dữ liệu:

Region Product Year Sales Profit
North A 2024 100 20
North B 2024 150 30
South A 2024 200 50

Nhóm theo Region, tính tổng Sales: =GROUPBYS(A1:E4,"Region","Sales",SUM)

Kết quả:

Region Sum of Sales
North 250
South 200
Grand Total 450

Nhóm theo nhiều trường: =GROUPBYS(A1:E4,{"Region","Product"},"Sales",SUM)

Tổng hợp nhiều cột giá trị: =GROUPBYS(A1:E4,"Region",{"Sales","Profit"},SUM)

Dùng nhiều phép tính cho cùng một cột: =GROUPBYS(A1:E4,"Region","Sales",HSTACK(SUM,AVERAGE,COUNT))

Lọc dữ liệu trước khi nhóm, ví dụ chỉ lấy năm 2024: =GROUPBYS(A1:E100,"Region","Sales",SUM,,,(C2:C100=2024))

Lưu ý: filter_array chỉ áp dụng cho phần dữ liệu, không bao gồm dòng tiêu đề. Vì vậy nếu data là A1:E100, điều kiện lọc nên là C2:C100=2024.

Nếu dùng Excel với dấu phân cách tham số là dấu chấm phẩy, hãy viết: =GROUPBYS(A1:E4;"Region";"Sales";SUM)


_PIVOTBY

Nhóm dữ liệu theo tên cột, thay vì phải chọn trực tiếp vùng cột như hàm GROUPBY gốc.

=LAMBDA(data,row_field_labels,col_field_labels,value_field_labels,agg_fn,[row_total_depth],[row_sort_order],[col_total_depth],[col_sort_order],[filter_array],[relative_to],
    LET(
        headers,TAKE(data,1),
        body,DROP(data,1),
        row_ids,XMATCH(TOROW(row_field_labels),headers,0),
        col_ids,XMATCH(TOROW(col_field_labels),headers,0),
        val_ids,XMATCH(TOROW(value_field_labels),headers,0),
        row_fields,VSTACK(CHOOSECOLS(headers,row_ids),CHOOSECOLS(body,row_ids)),
        col_fields,VSTACK(CHOOSECOLS(headers,col_ids),CHOOSECOLS(body,col_ids)),
        values,VSTACK(CHOOSECOLS(headers,val_ids),CHOOSECOLS(body,val_ids)),
        IF(ISOMITTED(row_total_depth),
            PIVOTBY(row_fields,col_fields,values,agg_fn,3),
            IF(ISOMITTED(row_sort_order),
                PIVOTBY(row_fields,col_fields,values,agg_fn,3,row_total_depth),
                IF(ISOMITTED(col_total_depth),
                    PIVOTBY(row_fields,col_fields,values,agg_fn,3,row_total_depth,row_sort_order),
                    IF(ISOMITTED(col_sort_order),
                        PIVOTBY(row_fields,col_fields,values,agg_fn,3,row_total_depth,row_sort_order,col_total_depth),
                        IF(ISOMITTED(filter_array),
                            IF(ISOMITTED(relative_to),
                                PIVOTBY(row_fields,col_fields,values,agg_fn,3,row_total_depth,row_sort_order,col_total_depth,col_sort_order),
                                PIVOTBY(row_fields,col_fields,values,agg_fn,3,row_total_depth,row_sort_order,col_total_depth,col_sort_order,,relative_to)
                            ),
                            IF(ISOMITTED(relative_to),
                                PIVOTBY(row_fields,col_fields,values,agg_fn,3,row_total_depth,row_sort_order,col_total_depth,col_sort_order,VSTACK(TRUE,filter_array)),
                                PIVOTBY(row_fields,col_fields,values,agg_fn,3,row_total_depth,row_sort_order,col_total_depth,col_sort_order,VSTACK(TRUE,filter_array),relative_to)
                            )
                        )
                    )
                )
            )
        )
    )
)

Cú pháp:

=PIVOTBYS(data,row_field_labels,col_field_labels,value_field_labels,agg_fn,[row_total_depth],[row_sort_order],[col_total_depth],[col_sort_order],[filter_array],[relative_to])

Trong đó:

Tham số Ý nghĩa
data Vùng dữ liệu bao gồm cả dòng tiêu đề
row_field_labels Tên cột dùng làm nhóm dòng
col_field_labels Tên cột dùng làm nhóm cột
value_field_labels Tên cột chứa giá trị cần tổng hợp
agg_fn Hàm tổng hợp như SUMCOUNTAVERAGEMAXMIN
[row_total_depth] Tùy chọn hiển thị tổng theo dòng
[row_sort_order] Tùy chọn sắp xếp nhóm dòng
[col_total_depth] Tùy chọn hiển thị tổng theo cột
[col_sort_order] Tùy chọn sắp xếp nhóm cột
[filter_array] Mảng điều kiện lọc dữ liệu
[relative_to] Tùy chọn tính toán tương đối, ví dụ phần trăm so với tổng

Ví dụ dữ liệu:

Region Product Year Sales Profit
North A 2024 100 20
North B 2024 150 30
South A 2024 200 50
South B 2025 300 70

Tạo bảng tổng doanh số theo Region và Year: =PIVOTBYS(A1:E5,"Region","Year","Sales",SUM)

Kết quả dạng:

Region 2024 2025 Grand Total
North 250   250
South 200 300 500
Grand Total 450 300 750

Nhóm nhiều trường theo dòng: =PIVOTBYS(A1:E5,{"Region","Product"},"Year","Sales",SUM)

Nhóm nhiều trường theo cột: =PIVOTBYS(A1:E5,"Region",{"Year","Product"},"Sales",SUM)

Tổng hợp nhiều cột giá trị: =PIVOTBYS(A1:E5,"Region","Year",{"Sales","Profit"},SUM)

Dùng nhiều phép tính: =PIVOTBYS(A1:E5,"Region","Year","Sales",HSTACK(SUM,AVERAGE,COUNT))

Lọc dữ liệu trước khi tạo bảng, ví dụ chỉ lấy Product = "A"=PIVOTBYS(A1:E100,"Region","Year","Sales",SUM,,,,,(B2:B100="A"))

Lưu ý: filter_array chỉ áp dụng cho phần dữ liệu, không bao gồm dòng tiêu đề. Nếu data là A1:E100, điều kiện lọc nên bắt đầu từ dòng 2, ví dụ B2:B100="A".

Nếu Excel của bạn dùng dấu chấm phẩy làm dấu phân cách tham số: =PIVOTBYS(A1:E5;"Region";"Year";"Sales";SUM)


_CHOOSECOLS

 


_TNCN2025

=LAMBDA(ThuNhapTinhThue,SoThang,
LET(t,ThuNhapTinhThue/SoThang,
    thue_thang,
        IF(t<=5000000,t*5%,
        IF(t<=10000000,250000+(t-5000000)*10%,
        IF(t<=18000000,750000+(t-10000000)*15%,
        IF(t<=32000000,1950000+(t-18000000)*20%,
        IF(t<=52000000,4750000+(t-32000000)*25%,
        IF(t<=80000000,9750000+(t-52000000)*30%,
        18150000+(t-80000000)*35%)))))),
    thue_thang*SoThang
))


_TNCN2026

Giới Thiệu Chức Năng

Hàm này dùng để tính số thuế thu nhập cá nhân phải nộp dựa trên thu nhập tính thuế và số tháng tính thuế.

Công thức sẽ tự động quy đổi thu nhập tính thuế về mức thu nhập bình quân theo tháng, sau đó áp dụng biểu thuế lũy tiến từng phần theo các bậc sau:

Thu nhập tính thuế/tháng Thuế suất
Đến 10.000.000 5%
Trên 10.000.000 đến 30.000.000 10%
Trên 30.000.000 đến 60.000.000 20%
Trên 60.000.000 đến 100.000.000 30%
Trên 100.000.000 35%

Kết quả cuối cùng là tổng số thuế phải nộp

=LAMBDA(ThuNhapTinhThue,SoThang,
LET(t,ThuNhapTinhThue/SoThang,
    thue_thang,
        IF(t<=10000000,t*5%,
        IF(t<=30000000,500000+(t-10000000)*10%,
        IF(t<=60000000,2500000+(t-30000000)*20%,
        IF(t<=100000000,8500000+(t-60000000)*30%,
        20500000+(t-100000000)*35%)))),
    thue_thang*SoThang
))

Cú Pháp Sử Dụng 

=TênHàm(ThuNhapTinhThue, SoThang)

Trong đó:

  • ThuNhapTinhThue: Tổng thu nhập tính thuế trong kỳ.
  • SoThang: Số tháng dùng để phân bổ thu nhập tính thuế.

Ví dụ nếu đặt tên hàm là TINHTHUE_TNCN, có thể sử dụng như sau: =TINHTHUE_TNCN(120000000,12)

Hàm sẽ lấy: 120000000 / 12 = 10000000

Thu nhập tính thuế bình quân mỗi tháng là 10.000.000, thuộc bậc thuế 5%.

Thuế mỗi tháng: 10.000.000 x 5% = 500.000

Tổng thuế cho 12 tháng: 500.000 x 12 = 6.000.000

Lưu Ý Khi Sử Dụng

  • ThuNhapTinhThue là thu nhập sau khi đã trừ các khoản giảm trừ, miễn thuế hoặc khấu trừ hợp lệ.
  • SoThang phải lớn hơn 0.
  • Hàm này đang áp dụng biểu thuế gồm 5 bậc như trong công thức, không phải biểu thuế TNCN lũy tiến 7 bậc thông thường.
×