windows10エクセル2016で添付画像の様にSheet1のデータ(行指定)を統合してSheet2に集計したいのですがマクロで自動作成する事は可能でしょうか?
【Sheet1】
F列に「東京-001」など型番が表示されています。
H列に「黒」や「シルバー/PINK」など色が表示されています。
I列に「37」や「38,39」などNoが表示されています。
L列に「10」など総数量が表示されています。
【Sheet2】
Sheet1の統合されたもの(A1に型番、B1に色、C1にNo、D1に総数量)が表示。
※統合するとき型番、色、Noが同じものは総数量を合算して、そうでないものはそのままを表示したいです。
※Sheet1の行データ個数は30行の時もあれば1000行と時もあります。
宜しくお願いします。
No.1ベストアンサー
- 回答日時:
こんにちは!
両Sheetとも1行目は項目行になっているとします。
一例です。
標準モジュールにしてください。
Sub Sample1()
Dim myDic As Object
Dim i As Long, lastRow As Long
Dim myStr As String, wS As Worksheet
Dim myKey, myItem, myR, myAry
Set myDic = CreateObject("Scripting.Dictionary")
Set wS = Worksheets("Sheet2")
lastRow = wS.Cells(Rows.Count, "A").End(xlUp).Row
If lastRow > 1 Then
Range(wS.Cells(2, "A"), wS.Cells(lastRow, "D")).ClearContents
End If
With Worksheets("Sheet1")
lastRow = .Cells(Rows.Count, "F").End(xlUp).Row
myR = Range(.Cells(2, "F"), .Cells(lastRow, "L"))
For i = 1 To UBound(myR, 1)
myStr = myR(i, 1) & "_" & myR(i, 3) & "_" & myR(i, 4) '//★//
If Not myDic.exists(myStr) Then
myDic.Add myStr, myR(i, 7)
Else
myDic(myStr) = myDic(myStr) + myR(i, 7)
End If
Next i
myKey = myDic.keys
myItem = myDic.items
myR = Range(wS.Cells(2, "A"), wS.Cells(UBound(myKey) + 2, "D"))
For i = 0 To UBound(myKey)
myAry = Split(myKey(i), "_") '//★//
myR(i + 1, 1) = myAry(0)
myR(i + 1, 2) = myAry(1)
myR(i + 1, 3) = myAry(2)
myR(i + 1, 4) = myItem(i)
Next i
Range(wS.Cells(2, "A"), wS.Cells(UBound(myKey) + 2, "D")) = myR
Set myDic = Nothing
wS.Activate
MsgBox "完了"
End With
End Sub
※ コードは長いですが、数万行のデータでもほとんど時間を要しないと思います。
※ コード内の「★」の行のアンダーバーは、Sheet1のデータ内に使っていない文字にしてください。m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
- Excel(エクセル) フォルダ内のエクセルファイルを開かずにデータ採取する関数式 2 2022/12/22 22:15
- Excel(エクセル) 【Excel質問】別シートにある複数の同型の表から、同じ行項目にある数字を集計する 4 2023/02/16 00:14
- Excel(エクセル) エクセルでのコピーペースト 6 2022/09/03 07:14
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) このプログラムなんですがsheetにデータを置いて表示できるようにしてありますがsheetに101を 2 2023/02/23 20:13
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで1列に500行並んだデ...
-
複数の条件に合う行番号を取得...
-
Excelでデータベースを構築した...
-
エクセル~空白のセルのある行...
-
Excel 列データのランダムな並...
-
Excelの30個ずつの平均値の出し方
-
excel:別シートの値を飛び飛び...
-
Excelで2行単位のソートの出来...
-
VBA 数式を最終行までコピー
-
エクセルVBA C列に特定の文字列...
-
エクセルで日付から日にちを削...
-
A1セルに入力したら、入力時間...
-
EXCELで○ヶ月を○年○ヶ月に変換...
-
Excelで同じセルに箇条書きをし...
-
エクセルで既に入力してある文...
-
エクセルの数式がかぶって、選...
-
ワードの表の中に文字を入れる...
-
エクセルの複数のセルを一括で...
-
Excelの入力規則で2列表示したい
-
お肉の下のシートを煮込んでし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで1列に500行並んだデ...
-
エクセルで日付から日にちを削...
-
Excelで2つのデータの突合せを...
-
Excelで2行単位のソートの出来...
-
複数の条件に合う行番号を取得...
-
excel:別シートの値を飛び飛び...
-
エクセルで、重複データを除外...
-
Countifよりも早く重複数をカウ...
-
Excelの30個ずつの平均値の出し方
-
VBA 数式を最終行までコピー
-
エクセルVBA C列に特定の文字列...
-
エクセルで横並びの複数データ...
-
エクセル2016にて、行挿入&コピ...
-
【Excel】小計単位で並べ替えを...
-
VBA 大きなtxtテキストファ...
-
500行の中から、多い順に抽出す...
-
エクセル~空白のセルのある行...
-
エクセルで1つの会社名に対して...
-
【エクセル】1列内に複数ある同...
-
Excel VBA 空白セル以下のデー...
おすすめ情報