- 締切済み
VBAの初期化について
VBAの初期化について 変数Xに100という値を初期値として代入したいのですが。 Option Explicit Dim X As Integer X =100 と書くとコンパイルエラーになります。 C言語では int X=100 と初期化できますが、 VBAではどのようにすればいいのでしょうか?
- yuyakun
- お礼率14% (7/50)
- Excel(エクセル)
- 回答数2
- ありがとう数0
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- dogs_cats
- ベストアンサー率38% (278/717)
変数Xをどのプロシージャで使用するのかによって宣言方法が違ってきます。 1)sub プロシージャだけ使用する場合はsubプロシージャ内で宣言します。 Option Explicit sub test() Dim X As Integer X =100 end sub 2)同一モジュール内で複数のsubプロシージャで共有する変数。 Option Explicit Dim X As Integer sub test() X =100 end sub 3) 異なるモジュールにも共有する変数の場合はPublicで宣言します。 Option Explicit Public X As Integer sub test() X =100 end sub
- neKo_quatre
- ベストアンサー率45% (718/1578)
> と書くとコンパイルエラーになります。 「コンパイルエラー: プロシージャの外では無効です。」 ですよね? エラーのダイアログの「ヘルプ」を押して表示されるとおり、 | Sub 内または Function 内、またはプロパティ プロシージャ (Property Get、Property Let、Property Set) 内に記述しなければならないステートメントです。 です。 -- > C言語では > int X=100 > と初期化できますが、 > VBAではどのようにすればいいのでしょうか? モジュールレベルの変数を初期化する手段は無いハズ。 プロシージャの最初で初期化するとか、初期化用の処理を呼び出すとかが一般的です。 変数でなくて定数なら、 Const X As Integer = 100 とかって書き方は出来ますが。
関連するQ&A
- VBAのUserFormのイベント
VBAの公式問題集の練習をしているのですが、分からないことがあるので質問致します。 UserFormのイベントを使ってコードにマクロを作成したのですが、ユーザーフォームの実行を押しても、コンパイルエラーが表示されてしまいます。 具体的なマクロの式ですが、 Option Explicit Private Sub UserForm_Initialize() Dim i As Long TextBox1.Text = "UserFormの初期化" For i = 1 To 5 Listbox1.AddItem "Sample" & i Next i Listbox1.ListIndex = 2 End Sub です。 エラーには、コンパイルエラー: TextBox1が表示され、変数が定義されていませんと出ます。 どのようにしたらいいのでしょうか。 どなたかお分かりになるかたがいらっしゃいましたら教えて下さい。 お願いします。
- 締切済み
- その他(インターネット・Webサービス)
- 全ての変数を一気にリセットする方法はありますか?
全ての変数を一気にリセットする方法はありますか? Sub test() Dim i As Integer Dim int1 As Integer Dim int2 As Integer int1 = 1 int2 = 2 For i = 1 To 100 'プロシージャー int1 = 0 'リセット int2 = 0 'リセット Next End Sub みたいなコードがあり、 ループが終わる度に変数をリセットしたい場合 int1 = 0 'リセット int2 = 0 'リセット のように一つ一つ変数に値を入れてリセットするしかないですか? 例のコードは二つしか変数が有りますが 実際100個くらいの変数が有る場合も、 一個一個リセットするしかないのでしょうか? 理想としては、VBAを中断したら全ての変数がリセットされますが それと同じようなコードが有れば、楽だなと思います。
- 締切済み
- オフィス系ソフト
- マインスイーパーもどき(VBA)
ExcelのVBAでマインスイーパーもどきを作っていますが、どうも上手くいきません。9が地雷で0が何もないと言うことです。以下、ソースです。 Sub mine() Dim minefield(11, 13) As Integer Dim i As Integer, a As Integer, b As Integer, x As Integer x = 0 Randomize For i = 1 To 20 a = Int(Rnd * 10) + 1 b = Int(Rnd * 12) + 1 If minefield(a, b) = 9 Then x = x + 1 i = i - 1 End If minefield(a, b) = 9 Next i MsgBox "地雷が" & x & "回重複" countMine minefield, 10, 12 showInt minefield, 10, 12 show minefield, 10, 12 End Sub Sub show(f() As Integer, h As Integer, w As Integer) Dim a As Integer, b As Integer For a = 1 To 10 For b = 1 To 12 If (f(a, b) = 9) Then CStr(f(a, b)) = "*" If (f(a, b) = 0) Then CStr(f(a, b)) = " " Next b Next a End Sub If (f(a, b) = 9) Then CStr(f(a, b)) = "*" If (f(a, b) = 0) Then CStr(f(a, b)) = " " の部分でコンパイル時に 「コンパイルエラー:修正候補 識別子」 とでます。ヘルプを見てもよくわかりませんでした。 テキストが長すぎるので途中は省きました。 よろしくお願いします。
- ベストアンサー
- Visual Basic
- VBA "double"から0.1を引くと・・・
エクセルVBAですが、double型で変数を定義し、-80を代入します。 そこから0.1ずつを引いていきます。すると、途中から桁がおかしくなってしまいます。 (注:別に-80からでなくても、どの値からでも、また、引いていっても足していっても、遅かれ早かれ どこかから桁がおかしくなってしまいます。) -80 -80.1 -80.2 …中略 -80.8 -80.8999999999999 -80.9999999999999 … といった感じです。 どうしてこのようになってしまうのでしょうか。 また、このようにならないためにはどうしたらよいのでしょうか。 いかにサンプルプログラムを載せます。 ------------------------------------------ Sub test() Dim test As Double Dim i As Integer test = -80 For i = 1 To 100 test = test - 0.1 Cells(i, 1) = test Next i End Sub ----------------------------------
- ベストアンサー
- Visual Basic
- VBAの変数変換のことです
VBAの変数変換のことです 整数変数=実数変数や実数変数=整数変数でCIntやCSng関数を使わないでOKでしょうか? Dim VAR(20) As Single '単精度浮動小数点数型 (Single) Dim IVARO(20) As Integer '整数型 (Integer) Dim IVAROC(20) As Integer '整数型 (Integer) IVARO(NCD) = VAR(NCD) 'Single to Integer IVAROC(NCD) = CInt(VAR(NCD)) 'Single to Integer これで、IVARO(NCD)とIVAROC(NCD)には同じ値が入っているのですが、 整数=実数でCInt関数を使わないで整数にする構文はOKでしょうか?
- ベストアンサー
- Visual Basic
- VBAのByte配列からInteger値を取り出し
Access VBA初心者です。 Dim Ax( 1 to 256 ) as Byte Dim Bx as Integer があるとします。 Ax(1)~Ax(256)には,データが入っています。 Ax(102)~Ax(103)を切り出して,Bxに代入したいのですが,どうしたら良いのでしょうか。 Bxの値は整数として,あとの処理に使います。
- 締切済み
- Visual Basic
- エクセルVBAで変数初期値を入れる場所
早速ですが Moduleに Dim ct As Integer Workbook Open に ct=0 Shet1 Calculete で IF 文で 値がない エラーが出ます。 エクセルって どこに初期値を書くのでしょ? VB6なら Form Load で 事足りるのですが
- ベストアンサー
- Visual Basic
- VBAの正しい構文なのでしょうか?。
VBAの正しい構文なのでしょうか?。 以下の構文は正しいのでしょうか?。 Option Explicit Dim stdocname As String Dim repo As Report : : : Private Sub 印刷_Click() On Error GoTo Err_印刷_Click : Set repo = Reports(stdocname)
- ベストアンサー
- Visual Basic
- DLLの利用について
現在、VCで作成したDLLをVB使うということを行っています。 概要は、VBの方で定義した配列に1~9の数字を代入し、その和を求めるというものです。 DLLに値を渡す際は参照による引渡しをし、DLLで変数の変更を行いたいんです。 しかしその変数の変更がうまくいかないんです。 どこがまずいのでしょうか? プログラム内容は以下に示します。 よろしくお願いします。 *****VBのプログラム***** Option Explicit Private Declare Sub Sum Lib "test.dll" (aa as Integer, bb as Integer) Private Sub Command1_Click() Dim a(9) As Integer '1~9の値の代入先 Dim b As integer '和 Dim I As Integer For I = 0 To 9 a(I) = I + 1 Next I b = 0 Sum a, b 'DLLでの計算 MsgBox (b) '結果表示 End Sub *****DLLの中身***** _declspec(dllexport) void _stdcall Sum(short *aa, short bb) { int i; for ( i=0; i<=9; i++){ bb=bb+aa[i]; } } *****モジュール定義内容***** EXPORTS Sum
- ベストアンサー
- Visual Basic