二列目に、二桁の整数の足し算を出題することができるたし算の作問プログラムを以下のように作ったのですが、続いて三列目に、足し算の解答をして、それの正誤を確かめるプログラムを作りたいのですがどのようにすればよいでしょうか?
↓作問のプログラム
Sub test()
Columns("B:F").Clear
n = InputBox("問題数は?")
ReDim ans(n)
For i = 1 To n
Randomize
x = Int(Rnd * 100)
Randomize
y = Int(Rnd * 100)
ans(i) = x + y
Cells(i, 2) = "(" & i & ") " & x & " + " & y & " = "
Next i
End Sub
以下のような感じで採点のプログラムを作りたいのですが、上のプログラムの変数ans(i)を参照する場合、下のプログラムのans(i)はどのように定義すればよいのでしょうか?
Sub saiten()
For i = 1 To n
If Cells(i, 3) = ans(i) Then Cells(i, 4) = "○"
Else: Cells(i, 4) = "×"
Next i
End Sub
No.4ベストアンサー
- 回答日時:
Public ではなく Dimですね。
すみません。出題数であるnもモジュール全体で使用できるようにしなければなりませんね。
Dim Ans() As Long
Dim n As Variant
Sub Test()
Dim x As Long, y As Long
Columns("B:F").Clear
n = InputBox("問題数は?")
If Not IsNumeric(n) Then Exit Sub
If n <=0 Then Exit Sub
ReDim Ans(n) as Long
For i = 1 To n
Randomize
x = Int(Rnd * 100)
Randomize
y = Int(Rnd * 100)
Ans(i) = x + y
Cells(i, 2) = "(" & i & ") " & x & " + " & y & " = "
Next i
End Sub
Sub Saiten()
Dim i as Long
For i = 1 To n
If Cells(i, 3) = ans(i) Then
Cells(i, 4) = "○"
Else
Cells(i, 4) = "×"
End If
Next i
End Sub
二度のご回答どうもありがとうございます。nもモジュール全体で使えるようにすること、その具体的なやり方もおかげさまで理解することができました。また、ご丁寧に説明していただいてありがとうございます。
No.3
- 回答日時:
既回答の様に、モジュールレベルで
dim ans()
と宣言すれば、プロシージャ間で共通で使えますが、何らかの原因で消えてしまう事がありえますので、自分なら不可視化したワークシート上に保管します。
No.2
- 回答日時:
ans,n をプロシージャ外で定義(グローバル変数)しないと無理です。
問題作成後、エクセルを終了させると変数の値は初期化されるので、このまままではベストは方法とは言えません。
--------------------------------------------
Option Explicit
Dim ans()
Dim n
Sub test()
Dim i, x, y
Columns("B:F").Clear
n = InputBox("問題数は?")
ReDim ans(n)
For i = 1 To n
Randomize
x = Int(Rnd * 100)
Randomize
y = Int(Rnd * 100)
ans(i) = x + y
Cells(i, 2) = "(" & i & ") " & x & " + " & y & " = "
Next i
End Sub
Sub saiten()
Dim i
For i = 1 To n
If Cells(i, 3) = ans(i) Then
Cells(i, 4) = "○"
Else
Cells(i, 4) = "×"
End If
Next i
End Sub
No.1
- 回答日時:
VBA画面の一番上に
Public ans()
と入れてこのモジュール全体で使えるようにしてはいかがですか?
Public ans()
Sub test()
Columns("B:F").Clear
n = InputBox("問題数は?")
ReDim ans(n)
・
・
・
と以下に続きます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAプログラミング 2 2022/11/27 12:07
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
- Visual Basic(VBA) 複数シートの複数列に入力されているデータを重複なしで抽出するVBAを作りたいです。 9 2022/06/17 10:33
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) 乱数の表示 4 2022/10/12 10:43
- Visual Basic(VBA) マクロ実行時、自動で背景色を変えたい。 C列にあるチェックボックスをチェックするとB列に「TRUE」 4 2022/11/08 11:14
- C言語・C++・C# 【CASLプログラム】 定数(80と55)を確保し、その和をGR1に、その差をGR2に求めるCASL 1 2022/12/16 01:17
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
あるプログラムのコマンドライ...
-
Excelで4096点以上のFFTの方法
-
このプログラミング誰か教えて...
-
PICマイコンのコピー(クローン...
-
テキストボックスのエンターキ...
-
Excelに埋め込んだVBAのプログ...
-
プログラムを斜めに並べる
-
「Outlookが他のプログラムによ...
-
Notepad++の関数リスト表示でC...
-
円周率を求めるC言語のプログラム
-
等差数列の和を求めるプログラム
-
表計算プログラムの作り方
-
寿命
-
ラベルのアドレスを知る方法は...
-
Vba UserFormを前面に出す方法...
-
VBAにてメール作成した際、一部...
-
COBOLの連絡領域について
-
XnViewにwebpを「いつも開く」...
-
自動クエリとはどういうもので...
-
グラフをC#のASP.net MVCで表示...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelに埋め込んだVBAのプログ...
-
Notepad++の関数リスト表示でC...
-
あるプログラムのコマンドライ...
-
これってほんとにみますか?
-
Excelで4096点以上のFFTの方法
-
「Outlookが他のプログラムによ...
-
自動クエリとはどういうもので...
-
VBAでユーザーフォームが自動的...
-
VBAにてメール作成した際、一部...
-
PICマイコンのコピー(クローン...
-
テキストボックスのエンターキ...
-
読み込み中にアクセス違反が発...
-
特定のwebサイトのタイトルや記...
-
未使用の変数を一括検索する方法
-
モジュール、アプリケーション...
-
COBOLの連絡領域について
-
Google カレンダーの商用利用
-
エクセルとワードをデスクトッ...
-
ドロップダウンリストの文字を...
-
binファイルってiphone専用です...
おすすめ情報