Chơi với Bộ bài đầy đủ (Microsoft Excel)
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: