質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

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

Q&A

解決済

2回答

975閲覧

VBA 一致項目の 合計

amasan

総合スコア3

VBA

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

0グッド

1クリップ

投稿2021/06/03 02:45

_   A    B    C    D    E
1  100A   あ    い   300   500
2  100A   う    え   500   200
3  100B   お    か    0   50
4  100B   き    く   100   100
5  200    け    こ   100   100
6  300    さ    し   100   100
7  400    す    せ   100   100

のような値があるときに、Aが同じ数字だった際に上の行だけ残し、D,Eは数を合計したいです。

その際のコードを教えていただきたいです。
行数としては2000行程度ありその中から同じ数字を抽出、合算をしたいため関数よりマクロで処理したいと考えています。
データの更新とともに貼り付けをするため関数だと都度組まないといけない為。。。

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

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

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

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

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

1T2R3M4

2021/06/03 03:08

コードをください・デバッグしてください等の丸投げの質問 何かを作りたいのでコードを書いてほしい、学校の課題を解いてほしい等の質問は、具体的にプログラミングで困っている質問ではないと考え、推奨していません。 当然既読だとは思いますが、以下再度確認してください。 https://teratail.com/help/avoid-asking
meg_

2021/06/03 04:10

> Aが同じ数字だった際に上の行だけ残し 「数字」に着目するということはアルファベットは無視するというとこですね?また、データは常にソート済みですね?
guest

回答2

0

VBA

1Sub Main() 2 3Dim oShIn As Object 4Set oShIn = ThisWorkbook.Sheets("もとデータ") 5Dim oShOut As Object 6Set oShOut = ThisWorkbook.Sheets("合算") 7 8Dim iRow As Long 9iRow = oShIn.UsedRange.Rows.Count 10oShIn.Range("A1:A" & iRow).Copy 11oShOut.Range("A1").PasteSpecial Paste:=xlPasteValues 12 13oShOut.Range("A:A").RemoveDuplicates Columns:=Array(1) 14 15oShOut.Range("D1").Formula = "=SUMIF(もとデータ!$A$1:$A$" & iRow _ 16 & ",合算!$A1,もとデータ!$D$1:$D$" & iRow & ")" 17oShOut.Range("E1").Formula = "=SUMIF(もとデータ!$A$1:$A$" & iRow _ 18 & ",合算!$A1,もとデータ!$E$1:$E$" & iRow & ")" 19 20iRow = oShOut.UsedRange.Rows.Count 21oShOut.Range("D1:E1").Copy 22oShOut.Range("D2:E" & iRow).PasteSpecial Paste:=xlPasteFormulas 23 24Application.CutCopyMode = False 25 26End Sub

もとのシート名を「もとデータ」、合算の出力シート名を「合算」とします。
例示いただいたとおり、データの開始行は1行目とします。
「合算」シートへの合算の出力先は、もとデータと同じくD列、E列とします。
行や列に関する数字・アルファベットは実際に応じて変えていただければ
良いと思います。

処理内容は、A列をコピーして重複行を削除して、SUMIFの式を入れて、
その式を行数分コピーするというものです。
手でもできます。それをマクロでやるというものです。

投稿2021/06/04 10:50

plomte

総合スコア46

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

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

0

ベストアンサー

もしかすると、メニューから「おすすめピボットテーブル」あたりの機能でポチポチやった方が
早く目的のものが得られるのかもしれませんが、マクロで作るなら例えばこんな感じでしょうか。

VBA

1Sub sample1() 2 3 Dim ws1 As Worksheet 4 Set ws1 = Worksheets(1) 5 6 Dim ws2 As Worksheet 7 Set ws2 = Worksheets.Add(, ws1) 8 9 Dim i, j, k 10 For i = 1 To ws1.Cells(ws1.Rows.Count, 1).End(xlUp).Row 11 If WorksheetFunction.CountIf(ws2.Columns(1), ws1.Cells(i, 1)) = 0 Then 12 j = j + 1 13 ws1.Rows(i).Resize(, 5).Copy ws2.Cells(j, 1) 14 Else 15 k = WorksheetFunction.Match(ws1.Cells(i, 1), ws2.Columns(1), False) 16 ws2.Cells(k, 4) = ws2.Cells(k, 4) + ws1.Cells(i, 4) 17 ws2.Cells(k, 5) = ws2.Cells(k, 5) + ws1.Cells(i, 5) 18 End If 19 Next 20 21End Sub

VBA

1Sub sample2() 2 Dim rng As Range, ws As Worksheet 3 Set rng = Worksheets(1).UsedRange 4 Set ws = Worksheets.Add(, rng.Worksheet) 5 ws.Range(rng.Address).Value = rng.Value 6 ws.UsedRange.RemoveDuplicates 1 7 ws.UsedRange.Columns(4).Resize(, 2).Formula = "=SUMIF(" & rng.Columns(1).Address(True, True, , True) & "," & ws.Cells(1, 1).Address(False, True, , True) & "," & rng.Columns(4).Address(True, False, , True) & ")" 8 ws.UsedRange.Value = ws.UsedRange.Value 9End Sub 10

もしかして、100Aと100Bは同じ100として合算するのですか。

VBA

1Sub sample3() 2 3 Dim ws1 As Worksheet 4 Set ws1 = Worksheets(1) 5 6 Dim ws2 As Worksheet 7 Set ws2 = Worksheets.Add(, ws1) 8 9 Dim i, j, k, v 10 For i = 1 To ws1.Cells(ws1.Rows.Count, 1).End(xlUp).Row 11 v = Val(ws1.Cells(i, 1).Value) 12 If WorksheetFunction.CountIf(ws2.Columns(1), v) = 0 Then 13 j = j + 1 14 ws1.Rows(i).Resize(, 5).Copy ws2.Cells(j, 1) 15 ws2.Cells(j, 1).Value = v 16 Else 17 k = WorksheetFunction.Match(v, ws2.Columns(1), False) 18 ws2.Cells(k, 4) = ws2.Cells(k, 4) + ws1.Cells(i, 4) 19 ws2.Cells(k, 5) = ws2.Cells(k, 5) + ws1.Cells(i, 5) 20 End If 21 Next 22 23End Sub 24 25

投稿2021/06/03 08:26

編集2021/06/05 05:10
jinoji

総合スコア4592

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問