アプリ版:「スタンプのみでお礼する」機能のリリースについて

二列目に、二桁の整数の足し算を出題することができるたし算の作問プログラムを以下のように作ったのですが、続いて三列目に、足し算の解答をして、それの正誤を確かめるプログラムを作りたいのですがどのようにすればよいでしょうか?
↓作問のプログラム
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

A 回答 (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
    • good
    • 0
この回答へのお礼

二度のご回答どうもありがとうございます。nもモジュール全体で使えるようにすること、その具体的なやり方もおかげさまで理解することができました。また、ご丁寧に説明していただいてありがとうございます。

お礼日時:2008/07/22 17:02

既回答の様に、モジュールレベルで


dim ans()
と宣言すれば、プロシージャ間で共通で使えますが、何らかの原因で消えてしまう事がありえますので、自分なら不可視化したワークシート上に保管します。
    • good
    • 0
この回答へのお礼

なるほど、モジュールレベルでdim ans()と宣言すれば上手くいきました。どうもありがとうございます。

お礼日時:2008/07/22 17:05

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
    • good
    • 0
この回答へのお礼

どうもご丁寧な回答ありがとうございます。大変参考になりました。

お礼日時:2008/07/22 17:06

VBA画面の一番上に


Public ans()
と入れてこのモジュール全体で使えるようにしてはいかがですか?

Public ans()

Sub test()
  Columns("B:F").Clear
  n = InputBox("問題数は?")
  ReDim ans(n)
   ・
   ・
   ・
と以下に続きます。
    • good
    • 0

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