Mỗi cuối tháng, tôi mất 30 phút để tổng hợp doanh thu từ bảng giao dịch hàng ngày. Lọc thủ công theo từng tháng, copy từng dòng vào sheet riêng, rồi dùng hàm SUM để tính tổng. Với 500 giao dịch trong quý, công việc này tốn 90 phút chỉ để có 3 con số đơn giản.
Giờ đây, cùng một bảng dữ liệu, tôi có báo cáo doanh thu đầy đủ trong 3 phút. Hàm MONTH trong Excel kết hợp với SUMIFS tự động tính tổng theo tháng mà không cần lọc hay copy thủ công. Mọi thứ cập nhật ngay khi có giao dịch mới.

Hàm MONTH trích xuất tháng thành số từ 1 đến 12
Hàm MONTH trong Excel lấy bất kỳ ngày nào và trả về số tháng tương ứng. Ngày 15/03/2024 trở thành số 3, ngày 30/12/2024 trở thành số 12. Kết quả luôn là số nguyên từ 1 đến 12, dù định dạng ngày ban đầu như thế nào.
Cú pháp cơ bản:
=MONTH(A2)
Trong đó A2 là ô chứa ngày cần lấy tháng. Excel chấp nhận nhiều định dạng ngày: dd/mm/yyyy, mm/dd/yyyy, hoặc chuỗi văn bản như “15-Mar-2024”. Hàm này không quan tâm đến năm hay ngày, chỉ trích xuất phần tháng.
Tôi thường dùng MONTH để tạo cột phụ trong bảng dữ liệu. Với 500 giao dịch, chỉ cần nhập công thức ở dòng đầu tiên rồi kéo xuống, Excel tự động điền 499 dòng còn lại trong 2 giây. Cột này trở thành foundation cho mọi phân tích theo tháng sau đó.
Kết hợp MONTH với SUMIFS cho báo cáo tự động
Cách cũ của tôi là lọc từng tháng trong Data tab, copy kết quả vào sheet khác, rồi dùng SUM. Với 12 tháng, quy trình này lặp lại 12 lần. Mỗi lần thay đổi dữ liệu gốc lại phải làm lại từ đầu.
Công thức SUMIFS kết hợp với MONTH giải quyết vấn đề này hoàn toàn:
Công thức tính tổng doanh thu tháng 3:
=SUMIFS($D$2:$D$500, $A$2:$A$500, ">=1/3/2024", $A$2:$A$500, "<=31/3/2024")
Tuy nhiên công thức này có nhược điểm: phải nhập ngày đầu và ngày cuối tháng thủ công. Với 12 tháng, cần viết 12 công thức khác nhau và điều chỉnh ngày mỗi lần.
Cách tốt hơn với EOMONTH:
=SUMIFS($D$2:$D$500, $A$2:$A$500, ">="&G2, $A$2:$A$500, "<="&EOMONTH(G2,0))
Trong đó:
- D2:D500 là cột chứa doanh thu cần tính tổng
- A2:A500 là cột chứa ngày giao dịch
- G2 chứa ngày bất kỳ trong tháng muốn tính (ví dụ: 1/3/2024)
- EOMONTH(G2,0) tự động tìm ngày cuối tháng
Hàm EOMONTH giải quyết vấn đề tháng có 28, 29, 30 hay 31 ngày. Nhập 1/2/2024 vào ô G2, công thức tự biết tháng 2 năm 2024 có 29 ngày. Copy công thức xuống 12 dòng với 12 ngày khác nhau trong 12 tháng, báo cáo hoàn thành.
Tôi setup công thức này một lần duy nhất. Mỗi khi thêm giao dịch mới vào bảng gốc, chỉ cần nhấn F9 hoặc để Excel tự động tính lại. Doanh thu tháng 3 cập nhật từ 25 triệu lên 27 triệu trong nháy mắt.
Cách sử dụng SUMPRODUCT với MONTH cho điều kiện phức tạp
Khi cần tổng hợp doanh thu theo tháng bất kể năm nào, SUMIFS gặp khó khăn. Ví dụ muốn biết tổng doanh thu tháng 3 từ năm 2022 đến 2024, không thể dùng điều kiện ngày đơn giản.
Công thức SUMPRODUCT giải quyết:
=SUMPRODUCT((MONTH($A$2:$A$500)=3)*($D$2:$D$500))
Công thức này hoạt động như sau:
- MONTH($A$2:$A$500) tạo mảng gồm 499 số tháng từ mỗi ngày
- =3 kiểm tra số tháng nào bằng 3
- Kết quả là mảng TRUE/FALSE (TRUE khi tháng 3, FALSE khi tháng khác)
- Nhân với $D$2:$D$500 biến TRUE thành 1, FALSE thành 0
- SUMPRODUCT cộng tất cả giá trị
Tôi dùng phương pháp này để so sánh tháng 3 năm 2023 với tháng 3 năm 2024. Thay vì tách dữ liệu thành 2 bảng khác nhau, một công thức duy nhất cho cả 2 năm. Thêm điều kiện năm vào nếu cần:
Tổng doanh thu tháng 3 năm 2024:
=SUMPRODUCT((MONTH($A$2:$A$500)=3)*(YEAR($A$2:$A$500)=2024)*($D$2:$D$500))
Performance của SUMPRODUCT chậm hơn SUMIFS khoảng 20% với file lớn. Với 10,000 dòng dữ liệu, SUMIFS tính trong 0.8 giây còn SUMPRODUCT mất 1 giây. Tuy nhiên độ linh hoạt cao hơn nhiều khi cần điều kiện không theo khoảng thời gian liên tục.
Tạo cột phụ với MONTH tiết kiệm thời gian tính toán
Thay vì dùng MONTH trực tiếp trong công thức tính tổng, tôi tạo một cột phụ chứa số tháng cho mỗi giao dịch. Cách này giảm thời gian tính toán xuống 70% với file lớn.
Bước 1: Thêm cột “Tháng” ở cột B
=MONTH(A2)
Bước 2: Copy công thức xuống toàn bộ cột B (Ctrl+D)
Bước 3: Dùng SUMIFS với cột Tháng
=SUMIFS($D$2:$D$500, $B$2:$B$500, 3)
Công thức này đơn giản hơn nhiều và tính nhanh hơn vì Excel không phải chạy MONTH cho 499 dòng mỗi lần tính toán. So sánh số nguyên (3 = 3) nhanh hơn gấp 10 lần so với trích xuất tháng từ ngày.
Với file 5,000 giao dịch, báo cáo 12 tháng:
- Không có cột phụ: 12 giây
- Có cột phụ: 1.2 giây
Cột phụ tăng kích thước file thêm 50KB với 10,000 dòng, nhưng performance cải thiện đáng kể. Tôi luôn dùng phương pháp này cho file từ 1,000 dòng trở lên.
Xử lý lỗi thường gặp với hàm MONTH
Lỗi phổ biến nhất là kết quả hiển thị dạng ngày thay vì số tháng. Excel mặc định format ô kết quả theo ô nguồn. Nếu ô A2 có định dạng Date, ô chứa công thức MONTH cũng nhận định dạng Date.
Cách khắc phục:
- Chọn ô chứa kết quả MONTH
- Nhấn Ctrl+1 mở Format Cells
- Chọn Number trong Category
- Decimal places: 0
- Nhấn OK
Kết quả “01/01/1900” biến thành số 3 như mong đợi.
Lỗi thứ hai là #VALUE! khi ngày ở dạng văn bản. Ô A2 chứa “15/03/2024” nhưng Excel không nhận diện là ngày. Kiểm tra bằng cách nhập =ISNUMBER(A2), nếu trả về FALSE thì đây là văn bản.
Giải pháp:
=MONTH(DATEVALUE(A2))
DATEVALUE chuyển văn bản thành số serial date mà Excel hiểu được. Tuy nhiên cách tốt nhất là nhập ngày đúng định dạng từ đầu thông qua Data tab > Text to Columns > Date.
Với file import từ CSV hoặc hệ thống khác, tôi luôn chạy Text to Columns cho toàn bộ cột ngày trước khi dùng MONTH. Quy trình này mất 10 giây nhưng tránh được hàng trăm lỗi #VALUE! sau này.
Dashboard tự động cập nhật với MONTH và Chart
Sau khi có báo cáo doanh thu theo tháng, tôi tạo biểu đồ cột để theo dõi xu hướng. Chart trong Excel tự động cập nhật khi dữ liệu nguồn thay đổi, miễn là vùng dữ liệu được chọn đúng.
Setup dashboard:
- Tạo bảng tổng hợp doanh thu 12 tháng bằng SUMIFS
- Select range chứa tháng và doanh thu (B2:C13)
- Insert > Column Chart > Clustered Column
- Format chart với title, axis labels phù hợp
Mỗi khi thêm giao dịch mới, nhấn F9 refresh toàn bộ công thức. Chart tự động vẽ lại cột cao hơn cho tháng có doanh thu tăng. Không cần update manual hay re-create chart mỗi tháng.
Tôi đặt dashboard này trong sheet riêng, pin lên đầu workbook. Mở file Excel, sheet Dashboard hiện ngay với overview doanh thu 12 tháng. Drill down vào tháng cụ thể bằng cách jump đến sheet Data và filter theo cột Tháng nếu cần chi tiết.
Performance với 10,000 giao dịch vẫn smooth. Dashboard refresh trong 2-3 giây mỗi lần nhấn F9. Excel 2016 trở lên handle công thức này không vấn đề gì.
So sánh với Pivot Table
Pivot Table là công cụ mạnh khác để tổng hợp theo tháng, không cần viết công thức. Tuy nhiên tôi thích dùng hàm MONTH với SUMIFS vì control tốt hơn và customize dễ hơn.
Ưu điểm của Pivot Table:
- Setup nhanh, drag-and-drop interface
- Tự động group theo tháng/quý/năm
- Easy filter và drill-down
Nhược điểm:
- Phải refresh manual mỗi lần data thay đổi
- Không linh hoạt với điều kiện phức tạp
- Layout cố định, khó tích hợp vào dashboard tùy chỉnh
Ưu điểm của hàm MONTH + SUMIFS:
- Tự động tính lại khi data thay đổi
- Control hoàn toàn layout và format
- Kết hợp được với các hàm khác (IF, AND, OR)
- Nhẹ hơn, file size nhỏ hơn
Với báo cáo đơn giản cần nhanh, Pivot Table thắng. Với dashboard phức tạp cần automation, hàm MONTH thắng thế. Tôi dùng cả hai: Pivot Table cho ad-hoc analysis, hàm MONTH cho báo cáo định kỳ tự động.
Kết hợp với hàm TEXT để hiển thị tên tháng
Số tháng từ 1 đến 12 dễ tính toán nhưng khó đọc trong báo cáo. Thay vì “Tháng 3”, muốn hiển thị “Tháng 3” hoặc “March” tùy ngôn ngữ.
Chuyển số thành tên tháng:
=TEXT(DATE(2024,MONTH(A2),1),"mmmm")
Công thức này hoạt động như sau:
- MONTH(A2) lấy số tháng (ví dụ: 3)
- DATE(2024,3,1) tạo ngày 01/03/2024
- TEXT(…,”mmmm”) format thành “March” hoặc “Tháng 3” tùy cài đặt Excel
Với format “mmm” (3 chữ m) trả về “Mar” thay vì “March”. Với “mm” trả về “03” với leading zero.
Tôi dùng cách này cho header của bảng tổng hợp. Thay vì cột “3”, “4”, “5”, dashboard hiển thị “Tháng 3”, “Tháng 4”, “Tháng 5”. Professional hơn nhiều cho báo cáo gửi sếp hoặc khách hàng.
Lưu ý TEXT trả về văn bản, không phải số. Không thể dùng kết quả này trong phép tính. Nếu cần sort theo tháng, dùng cột phụ với MONTH(A2) để sort, cột hiển thị dùng TEXT cho đẹp mắt.
Áp dụng cho nhiều năm với điều kiện năm
File dữ liệu của tôi chứa giao dịch từ 2022 đến 2024. Muốn so sánh doanh thu tháng 3 qua 3 năm, cần thêm điều kiện năm vào công thức.
Tổng hợp theo tháng và năm:
=SUMIFS($D$2:$D$5000, $B$2:$B$5000, 3, $C$2:$C$5000, 2024)
Trong đó:
- Cột B chứa số tháng từ MONTH(A2)
- Cột C chứa số năm từ YEAR(A2)
- Điều kiện 1: Tháng = 3
- Điều kiện 2: Năm = 2024
Setup một lần với 2 cột phụ (Tháng và Năm), sau đó tạo bảng pivot thủ công với SUMIFS. Dòng là tháng (1-12), cột là năm (2022, 2023, 2024). Mỗi ô chứa công thức SUMIFS với điều kiện tương ứng.
Kết quả là bảng 12×3 với 36 ô dữ liệu, mỗi ô là tổng doanh thu một tháng một năm. Copy công thức theo dòng và cột với $ đúng chỗ để lock range nhưng để tham chiếu tháng/năm tương đối.
Performance vẫn tốt với 5,000 giao dịch. Excel tính toán 36 công thức trong dưới 1 giây. Thêm conditional formatting để highlight tháng có doanh thu cao nhất mỗi năm, dashboard hoàn chỉnh.
Kết quả sau 6 tháng sử dụng
Báo cáo doanh thu hàng tháng từ 30 phút giảm xuống 3 phút. Thêm năm mới vào không tốn thời gian vì công thức tự động mở rộng. File Excel 2.5MB chạy mượt trên laptop 8GB RAM.
Phương pháp này áp dụng cho mọi loại tổng hợp theo tháng: chi phí, số lượng đơn hàng, lượng khách hàng mới. Thay cột doanh thu bằng cột dữ liệu cần tính, công thức vẫn hoạt động y hệt.
Hàm MONTH có sẵn từ Excel 2013 trở đi, tương thích với Excel 365, 2016, 2019, 2021. Không cần add-in hay macro, chỉ cần hàm built-in. File lưu ở định dạng xlsx thông thường, mở được trên máy bất kỳ có Excel.
Đối với file cực lớn trên 50,000 dòng, consider chuyển sang Power Query hoặc Power Pivot. Nhưng với phần lớn trường hợp dưới 20,000 giao dịch, hàm MONTH kết hợp SUMIFS đủ nhanh và đơn giản hơn nhiều.
