フルデッキで遊ぶ(Microsoft Excel)
チップタイトルはどうですか?タイトルは、セルの範囲にランダムな順序で一連の数値を入力する必要がある場合があるという事実を示しています。たとえば、52個のセルに1から52までの数字をランダムな順序で入力したい場合があります。 (これは、シャッフルされたデッキからカードを引くのと似ているため、チップのタイトルになります。)
明らかに、この機能を提供する組み込みのExcel関数はないため、マクロを操作する必要があります。幸い、このようなマクロを作成するのはそれほど難しくありません。次のマクロはうまく機能します:
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
このマクロは、2次元配列(nums)を使用して、使用する数値とそれらを使用する順序を決定します。マクロの先頭近くで、配列は静的な数値(1からセルの数まで)と1からセルの数の間の乱数で埋められます。次に、この2番目の数値を使用して配列をソートします。配列が保存されたら、元の番号をセルに配置するのは簡単です。
ちなみに、2次元配列を使用する理由は、VBAが乱数を生成するために使用するRnd関数が重複した値を返す可能性があるためです。したがって、配列の2番目の次元に重複がある場合でも、配列が最終的に並べ替えられたときに、最初の次元に重複はありません。
マクロを使用するには、ランダムな順序で連続した値を入力するセルを選択することから始めます。マクロを実行すると、その範囲がいっぱいになります。たとえば、10個のセルを選択してからマクロを実行すると、それらのセルには1から10までの数字がランダムな順序で入力されます。
注:
このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。
このヒント(2280)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。
linkフルデッキで遊ぶ。