- 締切済み
エクセルで特定のセルのみを任意のタイミングで更新
エクセルのRANDBETWEEN関数についての質問です。 再計算するたびに,新しい整数の乱数を返すと思いますが, 再計算のたびに,整数を返すのでなく自分のタイミング(マクロでフォームボタンを押したときなど)で実行されるようにしたいです RANDBETWEEN関数が設定されているセルだけを任意のタイミングで更新するのは,どのようにしたら良いでしょうか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- SI299792
- ベストアンサー率47% (772/1616)
・・・・・q10149843 ボタンを押した時だけ更新する関数ができないかと思い、作ってみました。 第3パラメータでIndex を指定する必要があります。(同じIndex だと同じ数字になります) 幾つ必要か解らないので、10個分です。 Option Explicit Dim Rand(9) As Double ' Sub Macro2() Dim Index As Integer ' For Index = 0 To 9 Rand(Index) = Rnd Next Index Calculate End Sub ' Function RandBetweenButton _ (Min As Integer, Max As Integer, Index As Integer) As Integer ' Application.Volatile RandBetweenButton = Rand(Index) * (Max - Min) + Min - 0.5 End Function
- imogasi
- ベストアンサー率27% (4737/17069)
>エクセル】あるセルのみ自動再計算させない方法 で照会すると、 ーー 別のブックに乱数を設定しておいてそのセルをリンクします。 乱数のあるブックを開かない限り乱数は変わりません。 これ以外だと手動で乱数を保存するか、マクロになると思います。 ーー とあります。 乱数データをファイルでもって固定するか、別シートや同一シートの他のセル範囲に、セルに値として固定するかしかないでしょう。値としてセル群に張り付けてしまい、変えたいときは、コピペをやり直しとかどうですか。 ーー ・「再計算されるたびに新しい乱数が発生する」、というこの関数の仕組みがこういう不便を生じるが、理由があってのことでしょう。 ーー VBAのRnd関数は、すこし様子が違うようです。 https://excel-ubara.com/excelvba8/EXCELVBA839.html 他多数。 少なくともエクセル関数の再計算(Shiftキーを押しながらF9キーを押す)の対象外のようです。
- SI299792
- ベストアンサー率47% (772/1616)
残念ながら、再計算をOFF にする以外方法はありません。 そういう時は、VBA で乱数を入れたいセルに乱数を入れます。 例えば、A1~A10 に 1~10の乱数を入れる場合です。 Option Explicit ' Sub Macro1() Const Min = 1 Const Max = 10 Dim Between As Integer Dim ROut As Long ' Between = Max - Min ' For ROut = 1 To 10 Cells(ROut, "A") = Int(Rnd() * Between + Min) Next ROut End Sub
- notnot
- ベストアンサー率47% (4900/10358)
質問ポイントがわかりませんが、VBAの処理で乱数が欲しいのなら、VBAのRnd関数を使います。 Rnd自体は0以上1未満の実数なので、 XからYまで(両端含む)の整数の乱数なら、 Int(Rnd()*(Y-X+1)+X) です。