
●質問の主旨
INT関数及びRND関数を使い、「0から9」までの
数値をランダムに発生させるのではなく、「1から9」
までの数値をランダムに発生させるには、下記のコードを
どのように書き換えれば良いでしょうか?
●質問の補足
下記コード及び画像のように九九の計算問題を
作成したいと思っています。今のコードでは
「0から9」までの数値が発生するのは、分かっていたので
If ThenステートメントやSelect Caseステートメントを
使って、0の数値が発生するときは「1」とみなすというような
記述もしてみましたが、上手くいきませんでした。
ご存知のかたよろしくお願いします。
なお使用機種はWindowsVista、Excel2007を使用しています。
私はVBAをはじめて3カ月程度です。
●コード
Option Explicit
Const ORG_RW As Integer = 4 '問題の開始行
Const DST_RW As Integer = 8 '問題の終了行
Const NUM1_CLM As Integer = 1 '問題の数値1の列
Const NUM2_CLM As Integer = 3 '問題の数値2の列
Const ANSW_CLM As Integer = 5 '問題の解答の列
Private Sub CommandButton1_Click() 'Checkボタン
Dim i As Integer 'カウンタ変数
For i = ORG_RW To DST_RW'問題の開始行から問題の終了行まで
If Cells(i, NUM1_CLM).Value * Cells(i, NUM2_CLM).Value = Cells(i, ANSW_CLM).Value Then
Cells(i, ANSW_CLM).Font.Color = vbBlue '問題が正解のときは文字が青色
Else
Cells(i, ANSW_CLM).Font.Color = vbRed '問題が正解のときは文字が赤色
End If
Next i
End Sub
Private Sub CommandButton2_Click() 'Resetボタン
Dim i As Integer 'カウンタ変数
For i = ORG_RW To DST_RW Cells(i, ANSW_CLM).ClearContents '解答が消去される
Cells(i, ANSW_CLM).Font.Color = vbBlack '解答が消去されたときは文字が黒色
' 解答が消去されたときは0~9までのランダムな数値が発生
Cells(i, NUM1_CLM).Value = Int(Rnd * 10)
'解答が消去されたときは0~9までのランダムな数値が発生
Cells(i, NUM2_CLM).Value = Int(Rnd * 10)
Next i
End Sub

No.3
- 回答日時:
標題とか質問文の速いうちにワークシート関数の質問かVBAの質問か明記すべきです。
ワークシート関数デモできると思うがVBAの問題にしているのだね。
ーー
関数の本には、乱数を発生させる領域を指定したいときは
RAND()x(上限ー下限)+下限という解説が有る。
しかし乱数は同じ値が出てくることを排除するものでない。1桁で10個の数字でも同じ数字が出てくるだろう。
だから2桁も数字でも発生させて、それを並べ替えし行番号でもとるのはどうだろう。
Sub test01()
For i = 1 To 9
Cells(i, "G") = i '行番号的数字
Cells(i, "H") = Int(100 * Rnd()) '2桁乱数
Next i
'---H列で並べ替え マクロの記録などから
Range("G1:H9").Sort Key1:=Range("H1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlPinYin, DataOption1:=xlSortNormal
'---B2からB11にG列の数字を取って1桁数をセット
For i = 2 To 11
Cells(i, "B") = Cells(i - 1, "G")
Next i
End Sub
ーーーー
上記は被乗数で、乗数に付いても同じ(略)。
正解かどうかの判定は別問題という事で略。
imogasi様
ご回答ありがとうございます。
>標題とか質問文の速いうちにワークシート関数の質問かVBAの質問か明記すべきです。
おっしゃるとおりですね。
関数については標題か質問文の冒頭でワークシート関数が
VBA関数であるか、明記するようにします。
また記述してくださったコードにつきましては
後の参考とさせていただきます。
No.2
- 回答日時:
以下の関数があります。
使い方はhelpで見てください。RAND
RANDBETWEEN
セルに以下を貼り付けします。
=INT(9 * RAND() + 1)
乱数は初期値が決まってしまいますので、年月日や時間の値を組み合わせて初期化する工夫をします。
私がよくやる方法は
10をパイ(3.141592654)で割って1から10までの乱数ができますよね。
10/3.141592654=3.183098862
1の位の数字の3を取って10倍してから10から割ります。
10/((3.183098862-int(3.183098862))*10)
これを繰り返します。
初期値の修正は上記の方法で1から10までの値を作りました。
LHS07様
ご回答ありがとうございます。
最初にワークシート関数ではなく、
VBA関数の質問であることを
書いておけばよかったです。誠に恐縮です。
しかし本件質問について、INT関数とRAND関数の
使い方に関してはワークシートでも同じであることが
分かりました。
初期化する工夫については後の参考とさせていただきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) マクロ実行時、自動で背景色を変えたい。 C列にあるチェックボックスをチェックするとB列に「TRUE」 4 2022/11/08 11:14
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) 数式が消える 1 2023/03/19 16:55
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
B列の最終行までA列をオート...
-
Excelで、あるセルの値に応じて...
-
Cellsのかっこの中はどっちが行...
-
IIF関数の使い方
-
Worksheets メソッドは失敗しま...
-
【VBA】2つのシートの値を比較...
-
Changeイベントでの複数セルの...
-
【VBA】複数行あるカンマ区切り...
-
VBAを使って検索したセルをコピ...
-
VBAで、離れた複数の列に対して...
-
vba 2つの条件が一致したら...
-
VBAコンボボックスで選択した値...
-
DataGridViewにリンク列の追加...
-
VBA 列が空白なら別のマクロへ...
-
DataGridViewに空白がある場合...
-
C# 列の挿入
-
マクロについて。S列の途中から...
-
VBA 何かしら文字が入っていたら
-
VBAで、特定の文字より後を削除...
-
rowsとcolsの意味
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで、あるセルの値に応じて...
-
Worksheets メソッドは失敗しま...
-
vba 2つの条件が一致したら...
-
B列の最終行までA列をオート...
-
IIF関数の使い方
-
Cellsのかっこの中はどっちが行...
-
【VBA】2つのシートの値を比較...
-
VBAのFind関数で結合セルを検索...
-
URLのリンク切れをマクロを使っ...
-
文字列の結合を空白行まで実行
-
VBA 何かしら文字が入っていたら
-
VBAを使って検索したセルをコピ...
-
【Excel VBA】 B列に特定の文字...
-
VBAで指定範囲内の空白セルを左...
-
Changeイベントでの複数セルの...
-
VBAで、離れた複数の列に対して...
-
VBAでのリスト不一致抽出について
-
データグリッドビューの一番最...
-
rowsとcolsの意味
-
DataGridViewに空白がある場合...
おすすめ情報