匿名質問者

VBAで変数をリセット?する方法


BMaxRow = 0 or Nothing ←こういったものが必要?

集計結果の最下部から1セル空けた後に合計値を算出(for-next構文)、
その左に"合計"という見出しを付ける一連の作業を組みました。

再度実行すると、集計表下部と合計値セルの間に+2行ずつ、数字がはいり
合計値と合計見出しが入力されるセルが、+2行ずつ下に降りていきます。
BMaxRowの値が増えていっているためだと思われます。

再集計の際、シート全体をクリアにしているのですが、
BMaxRowは値を引き継ぎ、実行の度に増幅していくのでしょうか?

対策というかこうならない方法を教えてください。

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

B←集計シート
Dim BMaxRow As Long
Dim 合計値 As Single

BMaxRow = B.Cells(Rows.Count, 1).End(xlUp).Row 'Bの1列目の最終行番号

'一旦集計シートの中身をクリアする
B.Cells.ClearContents

'集計表の集計
省略

'集計列の最下部に合計値を算出する
For i = 2 To BMaxRow
合計値 = 合計値 + B.Cells(i, 2)
Next i

B.Cells(BMaxRow + 2, 2) = 合計値 ←for-nextの最終結果を入れる
B.Cells(BMaxRow + 2, 1) = "合計" ←合計値の入ったセルの左隣に"合計"見出し作成

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2012/09/13 16:00:03

回答3件)

匿名回答1号 No.1

普通は
BMaxRow = 0
でいいです。

匿名回答2号 No.2

これは恐らく変数のリセット云々の問題ではありません。
「合計値の入ったセルの左隣に"合計"見出し作成 」とありますが
これによって、左端列においてデータが記入された最終行が2つ下がる
(「一行空けて記入」→「2行増える」)はずで、その状態で
BMaxRowを計算させているために、毎回2ずつ増えるのだと思います。

他1件のコメントを見る
匿名回答3号

具体的な問題点としては、BMaxRowの値を取得しているタイミングがおかしい。
合計行が表示されているとき、「集計シートの中身をクリアする前」にBMaxRowの値を取得すれば、合計行も含めたシート内容から最終行番号が取得される。

2012/09/06 16:49:07
匿名質問者

なるほどですね。
新たにdictionaryが作成された後に、BMaxRowの値を取得するべきですね。

そのように書き換えて上手くいきました。
ありがとうございます!!

2012/09/06 17:02:46
匿名質問者

質問者から

匿名質問者2012/09/06 17:46:13

BMaxRow = 0 

BMaxRow = Nothing

いずれを最後に入れてもエラーになります。

匿名回答1号 No.3

エラーになるのは別の原因。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません