人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルに関しての質問です。

あらかじめ用意してある100個の単語を、
100個のセル(A1?J10)に、
ランダムに配置させたいのですが、
どのような関数・手順で行えばよいでしょうか?

要は、ボタンを押すなどのアクションを行うたびに、
100個の単語をランダムに配置させたいのです。


質問がわかりにくくて恐縮ですが、
よろしくお願いいたします。

●質問者: endzendzendz
●カテゴリ:コンピュータ
✍キーワード:A1 アクション エクセル セル ボタン
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● きゃづみぃ
●23ポイント

http://q.hatena.ne.jp/1153342543

こちらの質問を応用してできますでしょうか?

ちなみに 単語100個は どこに用意されてますでしょうか?

◎質問者からの返答

とても近い気がします。

単語100は、テキストファイルか、

同一シート状の空いたセル上に配置しておく予定です。


2 ● freemann
●23ポイント

<<前提条件>>

1.もとになる単語100個を選択しておく

2.コピー先の範囲が(A1:J10)であり、データは空である事

*コマンドボタンに関数を割り当てるところは割愛します

考え方としては、乱数で生成された値を10行10列の値に変換し、そこから後ろに向かってコピー先でデータがまだ入ってないところを探して行き、あいていたらそこにデータをコピーする。

という方針で作りました。

Dim a As Range

Dim i As Integer

Dim j As Integer

Dim iRow As Integer

Dim iCol As Integer

Randomize (Now) '乱数のSeedを毎回変えるため

For Each a In Selection

i = Int(Rnd() * 100)

'0?100までの乱数を10行10列の値に変換するところ(コピー元が10行10列だから)

iRow = Int(i / 10) + 1

If iRow > 10 Then

iRow = 1

End If

iCol = Int(i Mod 10) + 1

For j = 0 To 99

If iCol + j > 10 Then '列がJ列より外側をさしてたら先頭に戻す

iCol = -j + 1

iRow = iRow + 1

If iRow > 10 Then '行が10列より外側を指していたら先頭にもどす

iRow = 1

End If

End If

If Worksheets(2).Cells(iRow, iCol + j).Value = "" Then

Worksheets(2).Cells(iRow, iCol + j).Value = a.Value

Exit For

End If

Next j

Next a

http://q.hatena.ne.jp/1154479102


3 ● Boone
●22ポイント

■方式案

Excelの関数、randを使えば良いと思います。

randで作成したランダムな値を元に、100個の単語を並び替え(ソート)すれば、単語の並びをランダムにできます。

■手順例

?セルA1に下記の式

=RAND()

を代入して下さい。0以上1未満の値が表示されるはずです。

?セルA2?A100にもセルA1と同じ式を代入して下さい。

その際、セルA1を選択し、フィルハンドルにより一気に代入すると便利です。

http://excimer.hp.infoseek.co.jp/HP-Excel/e-FillN.htm

?セルB1?B100に、対象の単語を貼り付けてください。

?セルA1?B100を、行Aの値を基準に並べ替えてください。

すると、100個の単語がランダムに並び替えられます。

?最後に、A1?J10に単語を10ずつ切り取り配置します。

■課題

randは、


4 ● db_Magician
●22ポイント ベストアンサー

http://www.relief.jp/itnote/archives/001798.php

ちょっと面倒な方法ですが。

まず、別シートに下図のような100個の単語のリストを作ります。


(1行)rank(A列) random(B列) 単語(C列)

(2行)3 0.781673996 単語1

(3行)55 0.561949554 単語2

(4行)27 0.117892303 単語3

(5行)8 0.031631073 単語4

(101行)91 0.168868717 単語100


B列には数式 =RAND()を入れ、ランダムな数を作ります。

A2に =RANK(B2,$B$2:$B$101)を入れ、下までずーっと伸ばしていくと

B列に入っているランダム数の、大きさの順位が出てきます。

重複のない乱数を作るためにこの操作をします。


あとはメインのシートに

=VLOOKUP(1,別シート!$A$2:$C$101,3,FALSE)

=VLOOKUP(2,別シート!$A$2:$C$101,3,FALSE)

=VLOOKUP(3,別シート!$A$2:$C$101,3,FALSE)

を入れていけばできると思います。

F9キーを押して再計算させれば、順番もランダムに変わると思います。

説明へたですみません。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ