人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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) = "合計" ←合計値の入ったセルの左隣に"合計"見出し作成

●質問者: 匿名質問者
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● 匿名回答1号

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


2 ● 匿名回答2号

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


匿名質問者さんのコメント
左端列は、dictionaryで毎回作成する行見出しが入ります。 そのdictionaryに対応して右に数字が計算され、 その2つ下に合計値が入り、その左に、合計という見出しが追加されます。 2回目実行した場合に、シートはクリアになり、dictionayは再度作成されます。 その上で同じ事を繰り返すのですが、なぜBMaxRowは1回目実行時の値を引き継ぐのでしょうか? また対策はありますでしょうか?

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

匿名質問者さんのコメント
なるほどですね。 新たにdictionaryが作成された後に、BMaxRowの値を取得するべきですね。 そのように書き換えて上手くいきました。 ありがとうございます!!

質問者から

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


3 ● 匿名回答1号

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

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ