Trong công việc hàng ngày, có nhiều thao tác lặp đi lặp lại rất nhiều lần, dễ tạo ra sự nhàm chán và nhầm lẫn, đồng thời cũng rất tốn thời gian.
Để khắc phục việc này, chúng ta có thể sử dụng tính năng VBA trong Microsoft Excel (cũng như Microsoft Word, Microsoft Outlook…) là một tính năng miễn phí và rất mạnh mẽ, có sẵn trong phần mềm này.
Ví dụ chúng ta muốn tự động hóa việc tạo ra các file tính lương (payslip) riêng lẻ cho từng nhân viên từ 1 danh sách tổng hợp sau:
No | Họ và tên | Lương | Thưởng | Tổng |
1 | Bùi Như Lạc | 20,000,000 | 5,000,000 | |
2 | Ngọt Như Mía | 22,000,000 | 6,000,000 | |
3 | Chậm Như Sên | 33,000,000 | 7,000,000 | |
4 | Nhanh Như Cắt | 44,000,000 | 8,000,000 | |
5 | Nặng Như Chì | 55,000,000 | 9,000,000 | |
6 | Nhẹ Như Bấc | 90,000,000 | 20,000,000 |
Hãy copy bảng trên và paste vào Excel như hình dưới:
Trong cột F, hãy điền công thức tính tổng lương và thưởng cho tất cả các nhân viên.
Để bắt đầu thực hiện việc tự động hóa, bấm tổ hợp phím Alt+F11 (giữ phím Alt và bấm phím F11).
Bấm đúp (double click) vào Sheet1 trong danh sách bên trái. Màn hình sẽ tương tự như dưới đây:
Copy và paste đoạn mã dưới đây vào cửa sổ bên phải của màn hình đó:
Option Explicit
Public Sub Tao_Phieu_Luong()
Dim MyCell As Range
Dim TenNhanVien As String
Dim Luong As Long
Dim Thuong As Long
Dim ws As Worksheet
Application.DisplayAlerts = False
For Each ws In Sheets
If ws.Name <> "Sheet1" Then ws.Delete
Next
Application.DisplayAlerts = True
Dim FirstNameCell As Range
Set FirstNameCell = Sheet1.Range("A1:Z100").Find("H" & ChrW(&H1ECD) & " và tên")
If FirstNameCell Is Nothing Then
MsgBox "Khong tim thay 'Ho va ten'"
Exit Sub
End If
Set FirstNameCell = FirstNameCell.Offset(1, 0)
For Each MyCell In Sheet1.Range(FirstNameCell, FirstNameCell.End(xlDown))
TenNhanVien = MyCell
Luong = MyCell.Offset(0, 1).Value
Thuong = MyCell.Offset(0, 2)
Sheets.Add after:=Sheet1
Set ws = ActiveSheet
ws.Name = TenNhanVien
ws.Range("B3") = "Bang luong nhan vien: " & UCase(TenNhanVien)
ws.Range("B3").Font.Size = 20
ws.Range("B5") = "Luong: "
ws.Range("C5") = Luong
ws.Range("B6") = "Thuong: "
ws.Range("C6") = Thuong
ws.Range("B7") = "TONG: "
ws.Range("C7").Formula = "= C5 + C6"
ws.Range("C5:C7").NumberFormat = "[Blue]#,##0 ""VND"""
ws.Range("C1").ColumnWidth = 20
Next
MsgBox "Da xu ly xong!"
End Sub
Sau khi paste, kết quả như hình dưới đây:
Quay trở lại bảng danh sách nhân viên, chèn một nút bấm trên Excel, để khi bấm thì tự động chạy mã lệnh trên.
Các bước như sau: (1) bấm vào tab Insert, (2) bấm vào Shapes, (3) bấm chọn ví dụ hình chữ nhật bo tròn 4 góc.
Bấm chuột phải vào hình chữ nhật màu xanh vừa chèn vào, chọn mục “Edit Text”, nhập vào chữ “Tạo các bảng lương”
Bấm chuột phải lần nữa vào hình này, chọn mục “Assign Macro” như hình dưới:
Bấm chọn Sheet1.Tao_Bang_Luong rồi bấm OK như hình dưới:
Bấm chuột vào một ô nào đó bên ngoài nút bấm màu xanh.
Trỏ chuột vào nút bấm màu xanh, con trỏ chuột biến thành hình bàn tay, bấm vào nút màu xanh này. Trong vòng chưa tới 10 giây, các sheet tính lương riêng biệt cho từng nhân viên được tự động tạo ra tương ứng với mỗi dòng trong danh sách tổng hợp.
Công thức tính tổng lương theo hàng dọc được tự động đưa vào. Có thể format dữ liệu số trong cell theo hình thức mong muốn (ví dụ thêm chữ VND vào phía sau), nhưng vẫn đảm bảo tính toán bằng công thức được bình thường, như cell C7 trong hình dưới.
Kết luận: Với Microsoft VBA miễn phí có sẵn trong Microsoft Excel, chúng ta có thể tự động hóa các thao tác lặp đi lặp lại, nhàm chán, dễ sai sót và tốn thời gian. Quá trình chạy tự động này diễn ra vô cùng nhanh chóng: mỗi lần cần tạo ra danh sách các bảng tính lương chi tiết, chỉ mất vài chục giây.
Trong các giải pháp tự động hóa đầy đủ, có thể đưa hỗ trợ tiếng Việt đầy đủ vào tất cả các công đoạn có liên quan, có thể tạo ra các file PDF riêng lẻ cho bảng tính lương của từng nhân viên, đặt mật khẩu bảo vệ các file PDF này, và tự động gửi email tới từng nhân viên.
Bài viết này mang tính chất giới thiệu về Microsoft Excel VBA. Việc xây dựng các giải pháp này thông thường khá là phức tạp và cần kiến thức chuyên về CNTT.
Hãy liên hệ với chúng tôi để nhận được sự hỗ trợ.