• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル VBA 同じ内容のセルの行を合わせたい)

VBAを使用してエクセルの同じ内容のセルの行を合わせる方法

このQ&Aのポイント
  • エクセルで売上集計表を作成しており、同じ内容のセルの行を合わせる作業を毎日手動で行っています。VBAを使用してこの作業を自動化したいのですが、方法がわかりません。
  • 売上データをエクセルで集計した後、商品コード別に数量を入力し、同じ内容のセルの行を合わせる作業が必要です。現在は毎日手動で行っていますが、VBAを使ってこの作業を効率化したいです。
  • 売上集計表には商品コードが入力されており、毎日の売上データを商品コード別に入力しています。同じ商品コードの行の位置を合わせるために、空白のセルを挿入する作業が必要です。この作業をVBAで処理したいですが、方法が分かりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • ki-aaa
  • ベストアンサー率49% (105/213)
回答No.1

こんにちわ 試してみて Sub 商品コード配置() Dim Dic商品コードと行 As Object Dim 配列商品コード数量, 編集前商品コード数量 Dim 最終行 As Long Dim i As Long, j As Long, k As Long Dim 商品コード As String Sheets("Sheet3").Activate '実際のシート名に変更 最終行 = Cells(Rows.Count, "A").End(xlUp).Row 配列商品コード数量 = Cells(3, "A").Resize(最終行 - 2, 1).Value Set Dic商品コードと行 = CreateObject("Scripting.Dictionary") For i = 1 To 最終行 - 2 Dic商品コードと行.Add 配列商品コード数量(i, 1), i Next i For i = (31 * 2) To 2 Step -2 '最大31日 一日二列 ReDim 配列商品コード数量(1 To 最終行 - 2, 1 To 2) k = Cells(Rows.Count, i).End(xlUp).Row If k > 2 Then 編集前商品コード数量 = Cells(3, i).Resize(k - 2, 2).Value For j = 1 To k - 2 商品コード = 編集前商品コード数量(j, 1) If 商品コード <> "" Then If Dic商品コードと行.exists(商品コード) Then 配列商品コード数量(Dic商品コードと行.Item(商品コード), 1) = 商品コード 配列商品コード数量(Dic商品コードと行.Item(商品コード), 2) = 編集前商品コード数量(j, 2) Else MsgBox "商品コード " & 商品コード & " に間違いがあります。" End If End If Next j Cells(3, i).Resize(最終行 - 2, 2).Value = 配列商品コード数量 End If Next i Set Dic商品コードと行 = Nothing End Sub

ryuu2101
質問者

お礼

すぐに回答いただきまして有難うございます。 やりたいことにも、コード違いの対処まで 考えていただき、大変助かりました。(^▽^)♪

その他の回答 (1)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

3行の一番右に値がある列とその1つ左の列を対象に並び替えます。 あくまでもサンプルですのでエラー処理等は入れていません。あしからず。 Sub Sample()   Dim nData(), nPos()   Dim nRight, nDown, i      '3行目一番右の列を対象   nRight = Cells(3, Columns.Count).End(xlToLeft).Column   nDown = Cells(Rows.Count, nRight).End(xlUp).Row   ReDim nData(nDown - 3)   ReDim nPos(nDown - 3)   For i = 0 To (nDown - 3)     '移動先の行をワークシート関数のMatchで調べる     nPos(i) = WorksheetFunction.Match(Cells(i + 3, nRight - 1), Range("A:A"), 0)     nData(i) = Cells(i + 3, nRight)   Next i   '元のデータを消す   Range(Cells(3, nRight - 1), Cells(nDown, nRight)).ClearContents   For i = 0 To (nDown - 3)     '移動先に代入     Cells(nPos(i), nRight - 1) = Cells(nPos(i), 1)     Cells(nPos(i), nRight) = nData(i)   Next i End Sub

ryuu2101
質問者

お礼

ご回答いただき有難うございます。 やりたいことが、とても簡単に出来るようになりました。 大変、とっても助かりました。(^▽^)♪

関連するQ&A