会社で在庫管理表を作成しているのですが、大変困っております。
マクロ初心者で技術不足なのでどうかご教授願います。
1 2 3 4
部品名 材料名 寸法 数量
チャンネル SS400 180*75*6.5 10
アングル SS400 50*50*6 5
チャンネル SS400 180*75*6.5 2
チャンネル SS400 180*100*6 4
チャンネル SUS304 180*75*6.5 12
アングル SS400 50*50*6 10
FB SS400 60*4 1
FB SS400 60*4 7
これを1列目「部品名」をキーとして「材料名、寸法」を確認し、同じ(つまり同じ物)であればその行を削除して、数量を加算して1行にまとめるマクロを作りたいのです。ポイントは(1)1列目「部品名」の重複確認のみで行削除ではなく、2、3列目「材料名、寸法」も確認する必要があることと、(2)削除してからその「部品名」がある行に削除した「数量」分加算しなくてはいけないことだと考えているのですが・・・。
1 2 3 4
部品名 材料名 寸法 数量
チャンネル SS400 180*75*6.5 12
チャンネル SS400 180*100*6 4
チャンネル SUS304 180*75*6.5 12
アングル SS400 50*50*6 15
FB SS400 60*4 8
7/7 C DC200 7
説明が分かりづらいかもしれませんが、どうか宜しくお願い致します。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
こんばんは!
別シート表示でも良いですか?
元データはSheet1にあり、Sheet2に表示するとします。
標準モジュールにしてください。
Sub Sample1()
Dim i As Long, lastRow1 As Long, lastRow2 As Long
Dim c As Range, wS As Worksheet
Set wS = Worksheets("Sheet2")
Application.ScreenUpdating = False
wS.Cells.Clear
With Worksheets("Sheet1")
lastRow1 = .Cells(Rows.Count, "A").End(xlUp).Row
.Range("E:E").Insert
.Range("E1") = "ダミー"
Range(.Cells(2, "E"), .Cells(lastRow1, "E")).Formula = "=A2&B2&C2"
.Range("E:E").AdvancedFilter Action:=xlFilterCopy, copytorange:=wS.Range("A1"), unique:=True
lastRow2 = wS.Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To lastRow2
Set c = .Range("E:E").Find(what:=wS.Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole)
wS.Cells(i, "B").Resize(, 3).Value = .Cells(c.Row, "A").Resize(, 3).Value
Next i
With Range(wS.Cells(2, "E"), wS.Cells(lastRow2, "E"))
.Formula = "=SUMIF(Sheet1!E:E,A2,Sheet1!D:D)"
.Value = .Value
End With
wS.Range("A:A").Delete
.Range("E:E").Delete
.Range("A1").Resize(, 4).Copy wS.Range("A1")
wS.Columns.AutoFit
End With
Application.ScreenUpdating = True
MsgBox "完了"
End Sub
※ Sheet1の出現順に表示されます。m(_ _)m
No.2
- 回答日時:
「手作業でやったら、こんな感じ」をマクロ化してみました。
新しいシートを作成して、集計しています。
Sub sample()
Dim wsn As String
wsn = "'" & ActiveSheet.Name & "'"
ActiveSheet.Copy before:=Sheets(1)
ActiveSheet.Range("A:D").RemoveDuplicates Columns:=Array(1, 2, 3), Header:=xlYes
Range("D2:D" & Cells(Rows.Count, "A").End(xlUp).Row).Formula = _
"=SUMIFS(" & wsn & "!D:D," & wsn & "!A:A,A2," & wsn & "!B:B,B2," & wsn & "!C:C,C2)"
Columns("D:D").Copy
Columns("D:D").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Range("A1").Select
End Sub
No.3
- 回答日時:
No.1です。
元データに手を付けても良いのであれば・・・
別解です。
Sub Sample2()
Dim i As Long, lastRow As Long, c As Range
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
Application.ScreenUpdating = False
Range("E:E").Insert
Range(Cells(2, "E"), Cells(lastRow, "E")).Formula = "=A2&B2&C2"
For i = lastRow To 3 Step -1
Set c = Range("E:E").Find(what:=Cells(i, "E"), LookIn:=xlValues, lookat:=xlWhole)
If c.Row <> i Then
With Cells(c.Row, "D")
.Value = .Value + Cells(i, "D")
Rows(i).Delete
End With
End If
Next i
Range("E:E").Delete
Application.ScreenUpdating = True
MsgBox "完了"
End Sub
こんな感じでも同じ結果になると思います。m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- PHP 【スプレッドシート】順位のつけ方 2 2022/08/17 13:27
- その他(コンピューター・テクノロジー) ffmpeg 動画から複数の箇所を指定して、一度の作業で同時に切り出したい 1 2022/07/03 08:35
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
- ライブ・コンサート・クラブ B'zのライブチケットで味の素のSSが当たりました! 超デカ箱ですが本人確認はされるのでしょうか? 1 2023/04/28 23:46
- HTML・CSS 【HTML】【CSS】【Swiper】 元の画像は横1200×縦600なのですが、実際のサイト上に反 5 2022/07/16 13:57
- 文学・小説 いわゆる「仮想戦記」とよばれるSSを 1 2023/08/25 19:45
- その他(ペット) カエルになりたての子が2匹います。 しっぽがなくなり、4日経つのでコオロギを与えました。 1匹は、コ 1 2022/07/30 20:25
- 中途・キャリア さて、社会人になってから13年目。 今まで、機械設計、機械製品の品質管理、部門の経営企画をやってきま 4 2023/07/17 08:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
Excel・Word リサーチ機能を無...
-
ExcelのVBA。public変数の値が...
-
特定のPCだけ動作しないVBAマク...
-
メッセージボックスのOKボタ...
-
一つのTeratermのマクロで複数...
-
エクセルで別のセルにあるふり...
-
サクラエディタ・マクロ → VSCo...
-
ExcelVBAでPDFを閉じるソース
-
Excel VBAからAccessマクロを実...
-
EXCELのVBAでRange("A1:C4")を...
-
エクセルに張り付けた写真のフ...
-
エクセルのマクロについて教え...
-
ユーザーフォームを起動しなが...
-
エクセルのマクロについて教え...
-
VBA アドインについて お詳しい...
-
VBA初心者 Ctrl+での操作、ボタ...
-
特定文字のある行の前に空白行...
-
2つのマクロでチェックボックス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
特定のPCだけ動作しないVBAマク...
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
メッセージボックスのOKボタ...
-
一つのTeratermのマクロで複数...
-
エクセルで別のセルにあるふり...
-
ExcelのVBA。public変数の値が...
-
エクセルに張り付けた写真のフ...
-
ExcelVBAでPDFを閉じるソース
-
EXCELのVBAでRange("A1:C4")を...
-
Excel VBAからAccessマクロを実...
-
TERA TERMを隠す方法
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
マクロ実行時、ユーザーフォー...
-
Excelのマクロについて教えてく...
-
ソース内の行末に\\
おすすめ情報