• ベストアンサー

Excelで文字列のランダム表示

当方、Excelは簡単な関数を使うレベルです。 マクロはほとんど使用した事が無く、 VBAは使用したことがありません。 最終的な目標は 同一の問題に対して、回答はランダムな答えを選択を用意するという物です。 例えば A1に問題 A5-E5に  L1ーL40の一覧に用意した文字列をそれぞれランダムに入れるという形にしたいと思っています。 現状では答えがかぶってしまっても良いです。 最終的にはボタンで更新となれば理想です。 関数、マクロの使用、VBAの使用でも良いのですが、 できるだけ簡単な方法を探しています。 RAND関数・乱数生成など考えましたが、 考え方が間違っているのか、今の所上手く出来ません。 大変恐縮ですが、何を使用して行うのか、 また、手順を教えていただけると嬉しいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • jo-zen
  • ベストアンサー率42% (848/1995)
回答No.1

RAND関数を使って   =ROUNDUP(RAND()*40,0) とすれば、1~40の整数をランダムに取り出すことができます。 K1~K40に順番に1,2,3,・・・,40の数字を入れ、 A5セルに   =VLOOKUP(ROUNDUP(RAND()*40,0),$K$1:$L$40,2,0) と式を入力してあげれば、VLOOKUP関数で、乱数で発生した整数に対応する文字列を取り出せます。 A1の式を、B5~E5にコピーしてあげれば完了です。

masaki_06
質問者

お礼

さっそくのご回答ありがとうございました。 無事目的の答えが出てきました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

質問の説明を他人にも判るように実例でも挙げて書いてください。 >L1ーL40の一覧に用意した文字列をそれぞれ 「文字列」とは「問題文」のことですか。イメージがわかりやすいように書いてください。 例 L1 日本の首都は東京です L2 山梨県には海辺がありません L3 富士山は静岡県です L4 日本は47の都道府県があります ・・ A5:E5に5問L1:L40から選択するのですね。 (エクセルとしては出来るだけ縦にA5:A9をお勧めします。) A1に問題というのは何を指定するのですか。 ーーー 質問の内容らしく式を作ると E5に =INDEX($L$1:$L$40,RANDBETWEEN(1,40),1) と入れてE9まで式を複写 ーーーー しかし http://maglog.jp/excel/Article258652.html にあるように 乱数が求まるタイミング:RAND関数で求まる乱数は、以下のタイミングで変化します。  ・セルの内容が変更されたときに変化します。。  ・RAND関数を使用しているファイルを開いたときに変化します。  ・キーボードのF9キーを押した時に変化します。 こんなに変わってしまうRand関数を使えるのでしょうか。 同じ式である=RANDBETWEEN(1,40)を2つのセルで入れても(当然だか)別の値が背とされる。他の関数では同じ値が返る。 またA1セルは変化のトリガーに使いたいのでしょうか。 結局関数・乱数では(出来れば)重複排除の件も含め難しいのでは。 ーーー VBAでSheet1のChangeイベントに Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo errr If Target.Address = "$A$1" Then 'MsgBox Target.Address Application.EnableEvents = False i = 5 Do p1: x = Int(40 * Rnd) + 1 Cells(i, "A") = Cells(x, "L") y = Application.CountIf(Range("A5:A" & i), Cells(i, "A")) MsgBox y If y > 1 Then GoTo p1 i = i + 1 Loop While i < 10 errr: Application.EnableEvents = True End If End Sub を貼り付ける L2:L41に a b c z a1 ・・ a14 を入れる。 ーー A1セルに何か値を入れると E5:E9に 例えば  q a9 a6 o a13 がセットされた。 一応A5:A9では同じものは排除した。 A1の値を変えると別の組み合わせになる。A1セルは「次へ」ボタン的な役割を担う。 VBAは値だけをセットするので、(A1を除く)他のセルの値が変わったときに組み合わせが変わってしまうことは無い。 ーー 経験したビジネスでは、余り乱数を使うまでロータス・エクセルを使ったこともなく、上記で正しいか(小生の力量不足)、質問者の意図どおりかわからないが、小生としては、上記を作るのさえも、難しかった。 >VBAは使用したことがありません。 のであればVBAは無理でしょう。 もともとこの質問のタイプは、エクセルには不適な課題ではないでしょうか。 関数では出来ないと言った関係で、VBAで出来無いかやってみただけです。

masaki_06
質問者

お礼

質問が明確では無く申し訳ありませんでした。 A1にいれるのは日本の都道府県はどれですか? A5からE5に都道府県名を入れるというレベルでした。 VBAについては、せっかく書いていただいたのですが、やはりすぐには無理だと判断いたしました。 Excel向きではないという意見も、当初より思っていたのですが、 何分能力的に限界があるため、他のアプリケーションやプログラムではさらに敷居が高いと判断し、Excelで出てきた結果をコピー&ペーストなどで、修正するという方法でも致し方ないと思っておりました。 非効率な方法ではあるかと思いますが、 自分の能力ではNo.1&No.2の方の回答から目的のデータは 出てきましたのでそれを利用していきたいと思います。 正直、ボタンレベルではなくF9で更新というのも知りませんでした。 ありがとうございました。

noname#204879
noname#204879
回答No.2

何処かの空き列(例えばK列)の1行目から下方にズズーッと式 =RAND() を入力しておけば、セル A5 に次式を入力して此れを右方にドラッグ&ペーストすればよろしいかと。 =INDEX($L1:$L40,MATCH(SMALL($K1:$K40,COLUMN(A1)),$K1:$K40,0))

masaki_06
質問者

お礼

ご回答ありがとうございました。 No,1に方とは別の方法を提示してくださったお陰で目的の結果がさらに効率よく出てくるようになりました。

関連するQ&A

専門家に質問してみよう