• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:excellVBAで、シートからデータを移す方法)

excellVBAで、シートからデータを移す方法

このQ&Aのポイント
  • excellVBAを使用して、複数のシートからデータが被らないようにしてコピーする方法を探しています。
  • 現在の方法では効率が悪く感じており、より良い方法を教えていただきたいです。
  • データの入っている列は共通で5列で固定されており、行数はシートによって異なります。

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

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

シートDに全てのシートのデータを結合した表(重複を含む)を作成した後、フィルタで重複を非表示すると効率が良いように思えます。 非表示でも重複データが存在する事がNGなら表示データだけコピーして別なシートに貼り付ければ良いでしょう。 #以下のコードはサンプルですのでエラー処理を行っていません。 Sub Sample()   Dim nLast   With Sheets("SheetD")     'SheetDの項目名     .Range("A1:C1") = Sheets("SheetA").Range("A1:C1").Value        '各シートからデータをコピー     Call fCopyData("SheetA")     Call fCopyData("SheetB")     Call fCopyData("SheetC")        '重複を非表示     nLast = .Cells(Rows.Count, 1).End(xlUp).Row + 1     .Range("A1:C" & nLast).AdvancedFilter Action:=xlFilterInPlace, Unique:=True   End With End Sub    Sub fCopyData(aSheetName As String)   Dim vData, nLast   '指定シートのデータをコピー   With Sheets(aSheetName)     If .Range("A2") = "" Then Exit Sub     .Range(.Range("A2"), .Range("C2").End(xlDown)).Copy   End With   'SheetDの最終行に貼り付け   With Sheets("SheetD")     nLast = .Cells(Rows.Count, 1).End(xlUp).Row + 1     .Cells(nLast, 1).PasteSpecial Paste:=xlPasteValues     .Cells(nLast, 1).PasteSpecial Paste:=xlPasteFormats   End With End Sub

その他の回答 (4)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

一例です。 作業シートにすべて貼り付ける。 エクセルのフィルタオプションを利用して重複を非表示に。 可視セルのみをシートDに貼り付け。 作業シートを削除。 というコードです。 Sub test01()   Dim ws(2) As Worksheet '変数宣言   Set ws(0) = Worksheets.Add '作業シート追加   Set ws(1) = Sheets("D")   For Each ws(2) In Sheets(Array("A", "B", "C")) '各シートコピー     ws(2).Range("A1", ws(2).Cells(Rows.Count, "C").End(xlUp)).Copy ws(0).Cells(Rows.Count, 1).End(xlUp).Offset(1)   Next ws(1)   With ws(0) '作業シートに貼り付けし重複削除してシートDに貼り付け     .Range("A2").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, Unique:=True     .Range("A2").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy ws(1).Range("A1")     Application.DisplayAlerts = False     .Delete '作業シート削除     Application.DisplayAlerts = True   End With End Sub

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.4

EXCEL2007ならデータの中に、重複の削除機能があるから、 シートAからシートCまで全部シートDへコピーして、 重複の削除1回で終わりです。 (マクロの記録しておけば、VBAの記述も分かると思います。) ただし、EXCEL2003にはこの機能がありません。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

一案です。 (1)行データを連結(区切り文字あり)、それをキーに連想配列を作成(重複分を吸収) (2)連想配列からキーを取り出し、Splitで再配列してDシートにコピー

noname#159900
noname#159900
回答No.1

シートAで配列を作る、「りんご=A1」「バナナ=A2」・・・ シートBをその配列の中を巡回する、あれば捨てて、無ければ新規にA6とかつくる。 最後にシートDに入れて、終わり。

関連するQ&A

専門家に質問してみよう