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

VBAのfor next構文での変数優先順位について。

VBA初心者です。
dtシートの2列目の項目名i(仮に100項目)とmtシートの1列目の項目名a(仮に10項目)を照合し、
同項目名であれば、dtの数値列の数値を積み上げ、
mtの数値列に合計値を入れていきたいです。
※dtシートの項目の重複をなくした状態がmtシートの項目となっています。

ここで、i=1?100、a=1?10という変数において、aを優先的に、
a=1の時にi=1?100で数字を集計し、
a=2の時にi=1?100で数字を集計し、

a=10の時にi=1?100で数字を集計する。
という命令をしたいのですが、下記の書き方ではうまくいきません。

For i = 4 To dt.Cells(Rows.Count, 2).End(xlUp).Row
For a = 2 To mt.Cells(Rows.Count, 1).End(xlUp).Row
If dt.Cells(i, 2) = mt.Cells(a, 1) Then
合計値 = 合計値 + dt.Cells(i, 4)
End If
Next a
Next i
mt.Cells(a, 2) = 合計値

何らかのご指摘、アドバイス頂きたいです。

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

▽最新の回答へ

1 ● 匿名回答1号
ベストアンサー

aのループとiのループの内外関係が逆ですよ。
iのループを内側にしないと。
VBAであるか否か、言語の種類とは無関係ですね。


匿名質問者さんのコメント
はい。aとiを入れ替えても試しているのですが、どっちでやって同じ結果で、出したいものが出ない状態です。 結果:mtシートの枠外の一括で算出値が入力される。 ※例で言うと、range(11,2)に一括で何らかの合計値が算出されます。 mtシートの(a,2)に10項目別の合計値(10種類)を返したいのです。

匿名回答1号さんのコメント
aのループとiのループの内外関係を逆にした上で 一番最後の行に出て来ている「mt.Cells(a, 2) = 合計値」を 外側のnextの内側に入れるのかな。 つまり、最後の三行は Next i mt.Cells(a, 2) = 合計値 Next a の順序する。

匿名質問者さんのコメント
ありがとうございます! 合計値の最終入力もループ内で処理しなければいけないですよね。。。 最後の方を、下記のように書き直すことで、思い通りの動きになりました!! Next i mt.Cells(a, 2) = 合計値 合計値 = 0 Next a

匿名回答1号さんのコメント
良かったですw Excel VBAの修行、頑張って下さい!
関連質問

●質問をもっと探す●



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