VBAを学習しております。
変数への追加でつまづいており質問させていただければと思います。
C列に数値があり、selectを使用して複数の検索条件結果を集計しようとしております。
合致する項目をcells(1,1)へまとめて表示させたいのですが、うまくいきません
tempへ一度格納させているのですが、最終結果しか反映しません。
sh.cells(1,1)= temp + temp としても最後の値しか代入されませんでした。
変数への代入方法の理解が追い付いていないと思います。
どう記述したらよいでしょうか?
それともselectではこの方法は行えないのでしょうか?
============================
Sub test()
Dim a As Range
Dim j As Long
Dim last As Long
Dim sh As Worksheet
Set sh = ThisWorkbook.Worksheets("Sheet1")
last = sh.Cells(Rows.Count, "B").End(xlUp).Row - 1
For j = 1 To last
Set a = sh.Cells(j + 1, 3)
Select Case a
Case 80 To 90, 170 To 180
Set temp = a.Offset(0, -1)
msgbox temp '対象の値は検索できている
sh.cells(1,1)= temp '追加していきたい
End Select
Next j
End Sub
No.1ベストアンサー
- 回答日時:
こんにちは
いろいろありそうですけれど、とりあえず直接関連する部分に関して・・・
>変数への追加でつまづいており~~
ここでいう「追加」って、該当する値を見付ける毎に逐次加算して行きたいってことですよね?
ご提示のコードの場合は、「変数」というよりはセルを利用しているようですが、追加するのに
>sh.cells(1,1)= temp
としているので、その時の検索値を代入していることになります。
(その時の値で上書きしている)
加算したいのであれば、
sh.cells(1,1)= sh.cells(1,1).Value + temp
のように、それまでの値に足し算して行けば、最終的に合計値になると思いませんか?
セルでなくて変数に入れておくとすれば、同様に
total = total + tmp
のようにすることで、変数に合計値を求めることが可能です。
いずれの場合も、最初に値をクリアしておくことが必要で、
ループの開始前に、
sh.cells(1,1).Value = 0
とか、
totla = 0
などと明示的にクリアしておく方が、間違いは少なくなるでしょう。
合計値だけを求めたいのではなく、全ての値を順に保持しておきたいというような場合は、配列に順次記憶していくとか、あるいは(変則的な方法ですが)文字列にカンマ区切りなどで記憶しておくといった方法等も考えられます。
fujillinさん
こんにちわ
ありがとうございます。
わかりづらい質問だったので理解していただいてありがとうございます。
その通りです。
>sh.cells(1,1)= sh.cells(1,1).Value + temp
>total = total + tmp
この方法です!
>いずれの場合も、最初に値をクリアしておくことが必要で、
>ループの開始前に、
> sh.cells(1,1).Value = 0
>とか、
> totla = 0
>などと明示的にクリアしておく方が、間違いは少なくなるでしょう。
この記述に見覚えがあります。そのときは理解できていませんでした。
ご丁寧に説明いただいてありがとうございます。
>合計値だけを求めたいのではなく、全ての値を順に保持しておきたいというような場合>は、配列に順次記憶していくとか、あるいは(変則的な方法ですが)文字列にカンマ区>切りなどで記憶しておくといった方法等も考えられます。
はい、ちょうど配列ということばを見かけるようになってきたので
新たに学習中です。
fujillinさんに教えて頂いたことを発展させて今後の学習や業務に活かしていきたいと思います。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 6 2022/06/08 12:55
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Visual Basic(VBA) 3つの条件を指定してVBAで行を削除したい 条件1:分類1が重複 条件2:分類2が重複 条件3:個数 6 2022/06/24 11:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
Variant型で宣言してるのにEmpt...
-
python の 連鎖代入の文法
-
EXCEL/VBA 変数の値をクリップ...
-
VBA 1行で複数の代入を行った...
-
ASP+SQLにてSessionがNullになる
-
JavaScriptをURLから直接実行し...
-
C言語 列挙型(enum型)変数について
-
【VBA】複合代入演算子
-
[VBS]変数を定数に変換する方法...
-
構造体からレコードセットへの代入
-
エラーの意味は? Lvalue req...
-
テキストボックスの値を変数に...
-
vba 最大値 条件分岐
-
Excel VBAでイコール二回使えま...
-
プログラミングで変数と関数の...
-
Accessコンボボックスにレコー...
-
フォームを開くときに、コンボ...
-
VBSで特定の文字列が含まれる場...
-
プログラミングについての質問...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
python の 連鎖代入の文法
-
VBAでダブルコーテーション入り...
-
テキストボックスの値を変数に...
-
EXCEL/VBA 変数の値をクリップ...
-
エラーの意味は? Lvalue req...
-
Variant型で宣言してるのにEmpt...
-
[VBS]変数を定数に変換する方法...
-
jsp~jspにhiddenを使って変数...
-
プログラミングで変数と関数の...
-
java 乗算をシフト演算と加算を...
-
整数xxxが大き過ぎますというエ...
-
processing エラーで、 "cannot...
-
C言語 列挙型(enum型)変数について
-
無名関数のメリットがよくわか...
-
gridViewの行選択解除
-
代入ができない。(undefined)
-
切り上げ
-
コマンドプロンプト バッチ|結...
-
i++と++i ってどう違うのですか?
-
stdpicture型の変数に、、
おすすめ情報