プロが教える店舗&オフィスのセキュリティ対策術

当方、Excelは簡単な関数を使うレベルです。
マクロはほとんど使用した事が無く、
VBAは使用したことがありません。

最終的な目標は
同一の問題に対して、回答はランダムな答えを選択を用意するという物です。
例えば
A1に問題
A5-E5に 
L1ーL40の一覧に用意した文字列をそれぞれランダムに入れるという形にしたいと思っています。
現状では答えがかぶってしまっても良いです。
最終的にはボタンで更新となれば理想です。

関数、マクロの使用、VBAの使用でも良いのですが、
できるだけ簡単な方法を探しています。

RAND関数・乱数生成など考えましたが、
考え方が間違っているのか、今の所上手く出来ません。

大変恐縮ですが、何を使用して行うのか、
また、手順を教えていただけると嬉しいです。

A 回答 (3件)

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にコピーしてあげれば完了です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/05/25 17:47

質問の説明を他人にも判るように実例でも挙げて書いてください。


>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

a1
・・
a14
を入れる。
ーー
A1セルに何か値を入れると
E5:E9に 例えば 
q
a9
a6
o
a13
がセットされた。
一応A5:A9では同じものは排除した。
A1の値を変えると別の組み合わせになる。A1セルは「次へ」ボタン的な役割を担う。
VBAは値だけをセットするので、(A1を除く)他のセルの値が変わったときに組み合わせが変わってしまうことは無い。
ーー
経験したビジネスでは、余り乱数を使うまでロータス・エクセルを使ったこともなく、上記で正しいか(小生の力量不足)、質問者の意図どおりかわからないが、小生としては、上記を作るのさえも、難しかった。
>VBAは使用したことがありません。
のであればVBAは無理でしょう。
もともとこの質問のタイプは、エクセルには不適な課題ではないでしょうか。
関数では出来ないと言った関係で、VBAで出来無いかやってみただけです。
    • good
    • 0
この回答へのお礼

質問が明確では無く申し訳ありませんでした。
A1にいれるのは日本の都道府県はどれですか?
A5からE5に都道府県名を入れるというレベルでした。

VBAについては、せっかく書いていただいたのですが、やはりすぐには無理だと判断いたしました。

Excel向きではないという意見も、当初より思っていたのですが、
何分能力的に限界があるため、他のアプリケーションやプログラムではさらに敷居が高いと判断し、Excelで出てきた結果をコピー&ペーストなどで、修正するという方法でも致し方ないと思っておりました。

非効率な方法ではあるかと思いますが、
自分の能力ではNo.1&No.2の方の回答から目的のデータは
出てきましたのでそれを利用していきたいと思います。
正直、ボタンレベルではなくF9で更新というのも知りませんでした。

ありがとうございました。

お礼日時:2008/05/25 18:04

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


=INDEX($L1:$L40,MATCH(SMALL($K1:$K40,COLUMN(A1)),$K1:$K40,0))
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/05/25 17:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!