- 締切済み
手動で固定したランダム表示の値を自動取得にしたい
=VLOOKUP(ROUNDUP(RAND()*27,0),A:B,2,FALSE) エクセルで、現在上記の式で値をランダム表示させています。 それをコピーして、別セルに右クリック→形式を選択→値 で固定しているのですが、これでは、逆に時間がかかる事が判明しました。 そこで、式のみで完全に自動取得に切り替えたいのですが どうすればいいでしょうか? 必要な動作は、一度ランダムに値を取得して、 以後、値が変化しないようにしたいです。 計算式用のシートを使いますので、複数の手順でも問題ありません。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- keithin
- ベストアンサー率66% (5278/7941)
ん? >一つの値が永遠と抽出されました。 あなたが希望したとおり,一つの値をランダムに計算したら,以後は変わらない数式ですが? 一回式を消してもう一回入れ直すと,次はまた違う値を計算し以後変わりません。 それとも勝手に違うことをしているのでしょう。 回答したのはE1に入れる式です。 何が出来ないと言ってるのか不明ですが,もし「コピーしたら同じ数字が並んだ」と言いたかったのでしたら,それぞれのセルにそれぞれのセルの式を入れ直してください。
- keithin
- ベストアンサー率66% (5278/7941)
ご利用のエクセルのバージョンが不明ですが,Excelのオプションで反復計算のチェックを入れてから。 >一度ランダムに値を取得して、以後、値が変化しないようにしたい いまご質問のその式を例えばE1セルに記入しているとしたら,E1セルに =IF(E1=0,INDEX(B:B,RAND()*27),E1) と記入します。
お礼
肝心なバージョンを忘れていました。すみません。 EXCEL 2003です。 また、数式の説明も抜けておりましたので、 書かせて頂きます。 A1~27に数字を記述。 B1~27に値(文字列)を記述 C1~40(ひとまず)にランダムに抽出としています。 =VLOOKUP(ROUNDUP(RAND()*27,0),A:B,2,FALSE) 反復計算にチェックをいれてから、Eのセルに =IF(E1=0,INDEX(B:B,RAND()*27),E1) を記述しますと、一つの値が永遠と抽出されました。
- imogasi
- ベストアンサー率27% (4737/17069)
RAND関数はそういうものだから仕方がない。 VBAでやれば(セルの値として、式には影響されなく出来る。 参考 Sub test01() For i = 1 To 10 y = Round(Rnd() * (10 - 1) + 1) Cells(i, "C") = y x = Application.WorksheetFunction.VLookup(y, Range("A:B"), 2, False) Cells(i, "D") = x Next i End Sub で A-D列 1 A 7 G 2 B 6 F 3 C 6 F 4 D 4 D 5 E 4 D 6 F 8 H 7 G 1 A 8 H 8 H 9 I 8 H 10 J 7 G A列は乱数の範囲の1-10のエントリーを作った。それら数字の対応をB列とする。 私の場合です。C列が乱数、D列が対するA-B列での対応する値。 質問と内容的には余り関係ないです。 これなら、データ全行実行すれば終了するし、乱数が再度振りなおされることはない。 乱数というのは、むつかしい。エクセルなどでビジネスで使うようなケースは少ないし、相当経験を積んでから使うものだ。 前の質問今回の質問振りからして、もっと勉強して。
お礼
なるほど、そういう意味とは知らず、失礼しました。 仰るとおり、式自体をコピーして一旦削除→式を再挿入したら以後変わらない値になりました。 ただ、物凄く時間がかかるので、 現状では、形式を選択して値でペーストが一番早いと言うのがわかりました。 お手間を取らせてすいませんでした。 ありがとうございました。