🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

4回答

2247閲覧

VBA データの加算 変数に総和が格納される

ppss

総合スコア40

変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/02/24 04:57

VBAでデータの加算をしようと思っています。
行いたい内容は以下の通りです。添付画像をご覧の上お読みください。

【やりたいこと】
Sheet1に生データがあります。購入した品物、日付、個数
Sheet2は 生データの内、購入個数を確認したい品物リストです。

Sheet2には任意の品物の購入個数の 「総和」 が入力されるようにしたいです。
イメージ説明

イメージ説明
【困っていること】
購入個数の総和をもとめるプログラムがわかりません。
以下にコード示します。「↓」の部分が相談したいポイントです。

VBA

1コード 2Dim i As Long 3Dim k As Long 4 5Dim LastRowSheet1 As Long 'Sheet1最終行 6Dim LastRowSheet2 As Long 'Sheet2最終行 7 8Dim NameSheet1 As String '品物名称Sheet1 9Dim NameSheet2 As String '品物名称Sheet2 10 11 12 13Worksheets("Sheet1").Select 14LastRowSheet1 = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row '最終行 15 16Worksheets("Sheet2").Select 17LastRowSheet2 = Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row '最終行 18 19 20 21For i = 2 To LastRowSheet1 22 Worksheets("Sheet1").Select 23 NameSheet1 = Worksheets("Sheet1").Cells(i, 2).Value 24 25 For k = 2 To LastRowSheet2 26 Worksheets("Sheet2").Select 27 NameSheet2 = Worksheets("Sheet2").Cells(k, 1).Value 28 29 If NameSheet1 = NameSheet2 Then 30 Dim KOSUU As Variant 31 Worksheets("Sheet1").Select 32 KOSUU = Worksheets("Sheet1").Cells(i, 3).Value 33 Worksheets("Sheet2").Select 34 '↓↓↓↓↓↓↓↓↓↓↓↓↓この部分がわかりません↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 35 Worksheets("Sheet2").Cells(k, 2).Value = KOSUU '質問内容→ この部分を総和の値にしたいです 36 End If 37 38 Next k 39Next i 40 41 42 43

初歩的なことで申し訳ありませんが、ご教示お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yo_u

2021/02/24 05:23

他の方の回答でも書かれているように、SUMIF関数で済むように思うのですが、 VBAで作らなければいけない理由があるのでしょうか。
guest

回答4

0

PPSS様の質問内容と似た内容の動画があります
解説者は office TANAKAの田中様です。参考までURLは
https://www.youtube.com/watch?v=I-fN1wRtXcI&t=959s
です。
動画のコードを参考にすると、(私の理解した内容ですが)下記のコードです

VBA

1Sub サンプル解答() 2' サンプル解答******* 3 4 Call 重複の削除 5 6 Dim n As Long, i As Long, f As Long 7 f = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row 8 Sheets(2).Cells(1, 2) = "個数総和" 9 n = Sheets(2).Cells(Rows.Count, 1).End(xlUp).Row 10 For i = 2 To n 11 Sheets(2).Cells(i, 2) = WorksheetFunction.SumIf(Sheets(1).Range("B2:B" & f), _ 12 Sheets(2).Cells(i, 1), Sheets(1).Range("C2:C" & f)) 13 Next i 14End Sub 15 16Sub 重複の削除() 17'Sheet2へ物名作成 18'マクロの記録 19 Sheets("Sheet1").Select 20 Range("B1").Select 21 Range(Selection, Selection.End(xlDown)).Select 22 Selection.Copy 23 Sheets("Sheet2").Select 24 Range("A1").Select 25 ActiveSheet.Paste 26 Application.CutCopyMode = False 27 ActiveCell.RemoveDuplicates Columns:=1, Header:=xlYes 28 Range("A2").Select 29 Sheets("Sheet1").Select 30 Range("A2").Select 31End Sub 32

投稿2021/02/24 14:30

syousuke.33

総合スコア312

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ppss

2021/02/26 00:09

ご回答ありがとうございます。 教えて頂いたURLや皆様のアドバイスを参考にさせて頂きます。
guest

0

ベストアンサー

あなたのなさろうとしている方法でおこなうと、以下のようになります。
Sheet2のループのなかでSheet1のループを行うようにします。
(余計なselectをしている行は削除しました)

どうしても、あなたの書かれた「Sheet1ループのなかでSheet2のループ」の方法でやる場合は、
一旦、sheet2のB列をクリアして、そのセルに、Sheet1の該当品物の個数を加算していくように
しなければいけません。

VBA

1Public Sub 個数総和計算() 2 Dim i As Long 3 Dim k As Long 4 5 Dim LastRowSheet1 As Long 'Sheet1最終行 6 Dim LastRowSheet2 As Long 'Sheet2最終行 7 8 Dim NameSheet1 As String '品物名称Sheet1 9 Dim NameSheet2 As String '品物名称Sheet2 10 11 LastRowSheet1 = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row '最終行 12 13 LastRowSheet2 = Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row '最終行 14 15 For k = 2 To LastRowSheet2 16 Worksheets("Sheet2").Select 17 NameSheet2 = Worksheets("Sheet2").Cells(k, 1).Value 18 Dim KOSUU As Variant 19 KOSUU = 0 20 For i = 2 To LastRowSheet1 21 NameSheet1 = Worksheets("Sheet1").Cells(i, 2).Value 22 If NameSheet1 = NameSheet2 Then 23 KOSUU = KOSUU + Worksheets("Sheet1").Cells(i, 3).Value 24 End If 25 Next i 26 Worksheets("Sheet2").Cells(k, 2).Value = KOSUU '質問内容→ この部分を総和の値にしたいです 27 Next k 28End Sub 29

投稿2021/02/24 09:07

tatsu99

総合スコア5493

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ppss

2021/02/25 23:56

ご回答ありがとうございます。 未熟な点が多く、拙いコードながら添削頂き有り難うございました。 非常に勉強になりました!
guest

0

業務等で、結果として「やりたいこと」ができていればいいのなら、
SUMIF関数を使ってください。

勉強等の理由で、あえてVBAで実現することが前提であれば、
変数KOSUUをループの外で宣言し、
KOSUUに値を足していけば目的の結果が得られるのではないでしょうか。

投稿2021/02/24 05:42

yo_u

総合スコア95

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

投稿2021/02/24 05:02

FromMZ1500

総合スコア496

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問