Hướng dẫn cách sử dụng hàm tạo số ngẫu nhiên trong VBA Excel

Trong Excel chúng ta biết tới hàm tạo giá trị ngẫu nhiên (random) là hàm RANDhàm RANDBEETWEN. Nhưng những hàm tạo giá trị ngẫu nhiên này lại là 1 công thức tự động thay đổi kết quả mỗi khi excel thực hiện 1 phép tính mới. Vậy làm thế nào để Excel vẫn thực hiện được công việc lấy giá trị ngẫu nhiên nhưng không tự động thay đổi kết quả? Hãy cùng tìm hiểu cách sử dụng hàm tạo số ngẫu nhiên trong VBA Excel nhé.

Câu lệnh tạo giá trị ngẫu nhiên trong VBA Excel

Hàm RAND trong VBA

Đầu tiên bạn hãy mở cửa sổ VBA (phím tắt Alt + F11), tạo mới 1 module. (Nếu bạn chưa biết cách làm, xem lại bài viết: Bắt đầu với Excel Macros và lập trình VBA)

Trong Module vừa tạo, bạn nhập câu lệnh sau:

Sheet1.Range(“B2”).Value = Rnd()

Câu lệnh trên có ý nghĩa:

Tại ô B2 trong Sheet1 (là sheet đang làm việc) gán giá trị là 1 số ngẫu nhiên được tạo bởi hàm Random là Rnd()

Rnd() chính là hàm RAND của Excel.

Khi viết Rnd(), kết quả sẽ là 1 số trong khoảng từ 0 đến 1. Số này có phần thập phân.

Để tạo 1 số trong khoảng từ 0 đến 50, chúng ta sẽ nhân Rnd() với 50

Sheet1.Range(“B2”).Value = Rnd() * 50

Để đưa số tạo bởi Rnd() của VBA về số nguyên, chúng ta sẽ thêm hàm INT ở trước câu lệnh ban đầu:

Sheet1.Range(“B2”).Value = Int(Rnd() * 50)

Khá đơn giản phải không nào. Cách viết này hoàn toàn giống với việc chúng ta sử dụng hàm RAND() trong Excel.

Ưu điểm của phương pháp này là chúng ta hoàn toàn có thể kiểm soát được tại thời điểm nào chúng ta cần lấy số ngẫu nhiên, bởi kết quả chỉ được tạo ra khi Macro được kích hoạt. Như vậy chúng ta có thể giảm được số công thức động trong Excel, giúp file Excel tính toán nhanh hơn, nhẹ hơn mà vẫn đảm bảo được yêu cầu ban đầu.

Hàm RANDBETWEEN trong VBA

Khác với hàm RAND, hàm RANDBETWEEN trong VBA không thể viết một cách trực tiếp được, bởi VBA không có sẵn đối tượng RandBetween.

Ví dụ: Gán giá trị ngẫu nhiên từ 5 đến 40 vào ô B2 bằng câu lệnh:

Sheet1.range(“B2”).Value = RandBetween(5, 40)

Lỗi khi chạy câu lệnh RandBetween trong VBA

Tuy nhiên chúng ta hoàn toàn có thể tạo ra giá trị này dựa trên nguyên tắc:

  • RandBetween gồm 2 điểm giới hạn là Số nhỏ nhấtSố lớn nhất.
  • Giá trị tạo ra bởi RandBetween = (Số lớn nhất – Số nhỏ nhất)*Số ngẫu nhiên + Số nhỏ nhất
  • Số ngẫu nhiên tạo ra bởi Rnd()

Ví dụ:

Giá trị ngẫu nhiên giữa số 5 và sốố 40 trong VBA được viết như sau:

Để tạo ra số nguyên, chúng ta thêm hàm INT phía trước biểu thức tạo số ngẫu nhiên.

Tuy nhiên chúng ta có thể viết lại biểu thức trên dưới dạng tổng quát như sau:

 

Ở dạng viết tổng quát này, chúng ta sẽ gán cho 2 biến RndMin và RndMax các giá trị của hàm RANDBETWEEN.

Tại câu lệnh gán giá trị vào ô B2 chúng ta sẽ viết dưới dạng tổng quát của các biến đó:

sheet1.range(“B2”).Value = Int((RndMax – RndMin) * Rnd() + RndMin)

Khi thay đổi giá trị các biến, đồng thời kết quả sẽ thay đổi tương ứng. Khi muốn thay đổi giá trị của Randbetween, chúng ta chỉ cần thay đổi giá trị của 2 biến RndMin và RndMax.

Như vậy chúng ta có thể tạo ra các giá trị ngẫu nhiên theo cả 2 cách là Random và Random Between rồi. Việc sử dụng các lệnh tạo giá trị ngẫu nhiên trong VBA sẽ giúp chúng ta không phụ thuộc nhiều vào các hàm RAND, RANDBETWEEN, bởi đây là các hàm thay đổi giá trị liên tục, ảnh hưởng tới quá trình tính toán trong excel.

Xem thêm:

Hướng dẫn tạo dữ liệu ngẫu nhiên tự động trong excel với hàm vlookup randbetween

Cách tạo số tự nhiên ngẫu nhiên không trùng trong khoảng