Chơi với Bộ bài đầy đủ (Microsoft Excel)
Làm thế nào đó cho một tiêu đề mẹo? Tiêu đề đề cập đến thực tế là bạn có thể cần điền vào một dải ô với một chuỗi số theo thứ tự ngẫu nhiê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 tương tự như rút các lá bài từ một bộ bài xáo trộn, do đó là tiêu đề mẹo.)
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 đó, ngay cả thông qua chiều thứ hai của mảng có thể có các bản sao trong đó, khi mảng được sắp xếp cuối cùng, 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 (2280) áp dụng cho Microsoft Excel 97, 2000, 2002 và 2003. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện ribbon của Excel (Excel 2007 trở lên) tại đây: