Excel rất tốt trong việc tạo các số ngẫu nhiên, nhưng nó kém tuyệt vời hơn khi điền vào một dải ô bằng các số ngẫu nhiên mà không có số cụ thể nào được lặp lại hai lần. Ví dụ: bạn có thể muốn điền 52 ô với các số từ 1 đến 52, theo thứ tự ngẫu nhiên. (Điều này rất giống với việc chọn thẻ từ một bộ bài theo thứ tự ngẫu nhiên, trong đó một thẻ cụ thể chỉ có thể được chọn một lần. Vì vậy, tiêu đề cho mẹo này.)

Rõ ràng là không có hàm Excel tích hợp sẵn để cung cấp khả năng này, vì vậy bạn phải làm việc với macro. May mắn thay, một macro như vậy không quá khó để tạo. Macro sau sẽ thực hiện thủ thuật một cách độc đáo:

Sub FillRand()

Dim nums() As Integer     Dim maxval As Integer     Dim nrows As Integer, ncols As Integer     Dim j As Integer, k As Integer     Dim Ptr As Integer     Randomize

Set s = Selection     maxval = s.Cells.Count     nrows = s.Rows.Count     ncols = s.Columns.Count

ReDim nums(maxval, 2)



'Fill the initial array     For j = 1 To maxval         nums(j, 1) = j         nums(j, 2) = Int((Rnd * maxval) + 1)

Next j

'Sort the array based on the random numbers     For j = 1 To maxval - 1         Ptr = j         For k = j + 1 To maxval             If nums(Ptr, 2) > nums(k, 2) Then Ptr = k         Next k         If Ptr <> j Then             k = nums(Ptr, 1)

nums(Ptr, 1) = nums(j, 1)

nums(j, 1) = k             k = nums(Ptr, 2)

nums(Ptr, 2) = nums(j, 2)

nums(j, 2) = k         End If     Next j

'Fill in the cells     Ptr = 0     For j = 1 To nrows         For k = 1 To ncols             Ptr = Ptr + 1             s.Cells(j, k) = nums(Ptr, 1)

Next k     Next j End Sub

Macro này sử dụng một mảng hai chiều (nums) để tìm ra những số nào cần sử dụng và thứ tự chúng nên được sử dụng. Gần đầu macro, mảng được lấp đầy bởi một số tĩnh (từ 1 đến số ô) và một số ngẫu nhiên giữa 1 và số ô. Số thứ hai này sau đó được sử dụng để sắp xếp mảng. Khi mảng được lưu trữ, việc đặt các số ban đầu vào các ô là một vấn đề đơn giản.

Nhân tiện, lý do mảng hai chiều được sử dụng là vì hàm Rnd mà VBA sử dụng để tạo số ngẫu nhiên có thể trả về các giá trị trùng lặp. Do đó, mặc dù chiều thứ hai của mảng có thể có các bản sao trong đó, nhưng khi mảng được sắp xếp cuối cùng, thì chiều thứ nhất sẽ không có bản sao.

Để sử dụng macro, hãy bắt đầu bằng cách chọn các ô bạn muốn chứa đầy các giá trị tuần tự theo thứ tự ngẫu nhiên. Khi bạn chạy macro, phạm vi đó sẽ được lấp đầy. Ví dụ: nếu bạn chọn mười ô và sau đó chạy macro, thì các ô đó sẽ được điền từ các số từ 1 đến 10, theo thứ tự ngẫu nhiên.

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên trang ExcelTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (8269) áp dụng cho Microsoft Excel 2007, 2010, 2013, 2016, 2019 và Excel trong Office 365. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện menu cũ hơn của Excel tại đây: