VBA Excel Cấp Tốc Bài 9 - Tự Tạo Hàm Excel Riêng

Khi sử dụng Excel, chúng ta thấy có rất nhiều hàm có được viết sẵn. Nhưng bấy nhiêu hàm đó có đủ để phục vụ cho công việc của bạn. Bạn cần một hàm thích hợp với công việc của mình hơn tại sao ta không tự viết chúng. Bài viết này sẽ hướng dẫn bạn cách viết hàm trong Excel đơn giản nhất.

Xem bài học trước

>> VBA Excel Cấp Tốc Bài 1 - Lọc Dữ Liệu Nhiều Điều Kiện Với Advanced Filter

>> VBA Excel Cấp Tốc Bài 2 - In Bảng Cửu Chương

>> VBA Excel Cấp Tốc Bài 3 - In Ấn Nhanh Hàng Loạt

>> VBA Excel Cấp Tốc Bài 4 - Xóa Tự Động Hàng Loạt Sheets Không Active

>> VBA Excel Cấp Tốc Bài 5 - Copy File Từ Một Thư Mục Sang Thư Mục Khác

>> VBA Excel Cấp Tốc Bài 6 - Hướng Dẫn Sử Dụng Record Macro Trong Excel Từ Cơ Bản Đến Nâng Cao

>> VBA Excel Cấp Tốc Bài 7 - Cách Gộp Nhiều File Excel Vào Một File Duy Nhất

>> VBA Excel Cấp Tốc Bài 8 - Cách Tạo Checkbox Hàng Loạt Trong Excel

Video hướng dẫn

Viết hàm nối chuỗi

Đầu tiên là một File trắng bạn cần phải lưu File trước khi thực hành: vào thẻ File ở góc trên màn hình -> Save As -> chọn nơi lưu File -> đặt tên -> ô bên dưới ô đặt tên chọn Excel Macro -> Save

lưu file trước khi thực hành

Mở Visual Basic lên: Vào Developer -> Visual Basic -> Insert -> Module.

mở visual basic

Mở đầu chương trình là: Function tên chương trình(chuỗi As Range, ký tự giữa các chuỗi As String) Enter xuống dòng tự sinh ra End Function. 
Vd: Function noi_chuoi(chuoi As Range, ky_tu_giua_cac_chuoi As String) 
      End Function

Khai báo biến mỗi ký tự: Dim moi_ky_tu As Range
Dùng vòng lặp For để quét từng ô một trong phạm vi: For Each moi_ky_tu In chuoi và nên xuống hàng gõ Next đề kết thúc vòng For tránh trường hợp bị quên.

mở đầu kết thúc chương trình

Tiếp theo trong vòng lặp For bạn viết lệnh nối chuỗi: tên chương trình = tên chương trình và khai báo mỗi ký tự ban đầu và ký tự giữa các chuỗi. vd:  noi_chuoi = noi_chuoi & moi_ky_tu & ky_tu_giua_cac_chuoi

Nhưng khi hoàn thành vòng lặp For thì bạn sẽ bị dư một ký tự nối chuỗi ở cuối để xóa nó đi dùng lệnh:  noi_chuoi = Left(noi_chuoi, Len(noi_chuoi) - Len(ky_tu_giua_cac_chuoi)). Trong đó Left là hàm xóa còn Len là hàm tính độ dài.

Giờ bạn có thể dùng hàm noi_chuoi bằng cách bạn tích vào 1 ô bạn muốn chứa chuỗi đó gõ noi_chuoi(bôi đen vùng dữ liệu muốn nối vào nhau;"khoản cách giữa các chuỗi sắp được nối vào nhau") 

hàm nối chuỗi trong Excel

Đoạn code hàm nối chuỗi:

Function noi_chuoi(chuoi As Range, ky_tu_giua_cac_chuoi As String)
    Dim moi_ky_tu As Range
    
    For Each moi_ky_tu In chuoi
          noi_chuoi = noi_chuoi & moi_ky_tu & ky_tu_giua_cac_chuoi
        
    Next
    noi_chuoi = Left(noi_chuoi, Len(noi_chuoi) - Len(ky_tu_giua_cac_chuoi))

End Function

Kết quả.

kết quả nối chuỗi

Viết hàm tính tổng

Đầu tiên ta cũng bắt đầu với tên chương trình: Function tên chương trình(chuỗi As String) Enter xuống dòng tự sinh ra End Function.
vd: Function tinh_tong(chuoi As String)
     End Function

Gán giá trị cho tinh_tong bằng không(tinh_tong = 0), khai báo biến i để tách và quét từ ký tự đầu tiên đến ký tự cuối cùng: Dim i As Integer

Khai báo thêm hàng từng ký tự để mình tính tổng: Dim tung_ky_tu As String.

Tiếp đến là vòng lặp For để cho i quét từng ký tự trong chuỗi: For i = 1 To Len(chuoi)Next để kết thúc vòng lặp.

hàm tính tổng

Tiếp theo mình sẽ gán tung_ky_tu bằng mid(chuoi, i, 1). Hàm mid là để tách từng ký tự trong chuỗi. Vd tung_ky_tu = Mid(chuoi, i, 1)

Dùng hàm If để xác định là số hay chữ nếu là số thì hàm sẽ đưa số đó và tính tổng nếu không phải thì nó bỏ qua và quay lại vòng lập For.
vd: If tung_ky_tu >= "0" And tung_ky_tu <= "9" Then
        tinh_tong = tinh_tong + tung_ky_tu
      End If

vòng lập if

Giờ bạn có thể tính tổng bất cứ ô nào trong File Excel.

kết quả tính tổng

Đoạn code tính tổng:

Function tinh_tong(chuoi As String)
    tinh_tong = 0
    Dim i As Integer
    Dim tung_ky_tu As String
    
    For i = 1 To Len(chuoi)
        tung_ky_tu = Mid(chuoi, i, 1)
        
        If tung_ky_tu >= "0" And tung_ky_tu <= "9" Then
            tinh_tong = tinh_tong + tung_ky_tu
        End If
    Next
  End Function

CHO ĐIỂM BÀI VIẾT NÀY

vote data
TOP