実現したいこと
前提
VBAの勉強を始めて間もないため初歩的な質問であることをご容赦ください。
Excelで作成したリストを基に同シート内に統計表を作成するためVBAを使用しています。
使用した変数は別のモジュールでも使用する可能性があるため「Public」ステートメントを使って宣言しているのですが、実行を押す度に統計結果の数値が増加してしまいます。
「Dim」を使用しているときは起こらなかった現象なのですが、原因がわかる方がいましたら教えていただけると幸いです。
【追記】
参考書で確認したところ「すべてのモジュールで有効な変数はブックを閉じたりモジュールの編集を行ったりしない限り、リセットされません。」との記載がありました。
リストに変更があった時のために作成したマクロを登録して更新ボタンを作成したいため、何か解決策がありましたらご教授ください。
【追記2】
諸事情によりコードは一部分を記載いたしました。
「○○」、「△△」の部分等は具体的な名称から変更しております。
非常に分かりにくいと思いますが、何かご指摘いただければ幸いです。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
vba
1Option Explicit 2 Public a, b, a1, b1 3 Public bosu As Integer '参照元(リスト)の母数 4 Public ○○ As Integer '○○の人数 5 Public △△ As Integer '△△の人数 6 7Sub エントリー者の進捗状況及び割合() 8 Dim x As Integer 9 10 bosu = 205 '200人まで反映されます 11 a = 5 '作成する表の起点位置(行) 12 b = 27 '作成する表の起点位置(列) 13 14 a1 = 6 '参照元の起点の位置(行) 15 b1 = 1 '参照元の起点の位置(列) 16 17 'セルを指定するときはすべてCells(a+2,b+1)、Cells(a1,b1+4)のように使用しています 18 19 Cells(a, b + 2).Value = "割合" 20 Cells(a, b + 1).Value = "人数(人)" 21 Cells(a + 1, b).Value = "○○の人数" 22 Cells(a + 2, b).Value = "△△の人数" 23 24 25 For x = a1 To bosu 26 27 If Cells(x, b1).Value <> "" Then 28 ○○ = ○○ + 1 29 Cells(a + 1, b + 1).Value = ○○ 30 31 End If 32 Next x '○○の人数 33 34 For x = a1 To bosu 35 36 If Cells(x, b1 + 2).Value = 1 Then 37 △△ = △△ + 1 38 Cells(a + 2, b + 1).Value = △△ 39 40 End If '△△の人数 41 Next x
試したこと
ClearContentsを使用して実行するたびにセルの数値を毎回リセットするようにしたのですが、結果は変わらず数値は増えるままでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
想定されている処理が把握できてないので検討違いかもしれませんが処理の最初のほうでリセットする(0を代入する等)ではだめなんですか?
情報不足で申し訳ありません。
ClearContentsを使用して実行のたびにリセットを試みたのですが、改善されませんでした。
表を必要な時に移動できるように、表を置く位置のセルを「Public」で変数に置き換え、変数に数値を代入しているのですが、代入後にClearContentsを使用しています。そちらがおそらく改善されない原因なのだと考えておりますが、代入前ですとリセット対象のセルも変数を使用して呼び出しているため、そもそもコンパイルエラーになってしまいます。
> Excelで作成したリストを基に同シート内に統計表を作成するためVBAを使用しています。
実際にモジュールに記述されているコードを明記して下さい。
> 使用した変数は別のモジュールでも使用する可能性があるため
> 「Public」ステートメントを使って宣言している
> 「Dim」を使用しているときは起こらなかった現象
モジュールレベルで宣言された変数とプロシージャレベルで宣言された変数とでは、スコープ(適用範囲)と有効期間が異なります。
https://learn.microsoft.com/ja-jp/office/vba/language/concepts/getting-started/understanding-scope-and-visibility
https://learn.microsoft.com/ja-jp/office/vba/language/concepts/getting-started/understanding-the-lifetime-of-variables
諸事情によりコードはほんの一部分になってしまいますが記載いたしました。
非常に分かりにくいと思いますが、何かございましたらコメントいただけますと幸いです。
「Public」を使用する場合は「Dim」の使用時のように実行の際に数値を初期化することは絶対に不可能なのでしょうか。
回答1件
あなたの回答
tips
プレビュー