• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マクロを使って、抽出したデータを別のファイルにコピーしたい)

VBAマクロでデータを抽出し別ファイルにコピーする方法

このQ&Aのポイント
  • VBAマクロを使用して、自動記録で抽出したデータを別のファイルにまとめる方法について質問です。データの更新時に範囲の指定をやり直さず、シンプルで応用の効くコードを作成したいと考えています。
  • 集約するシートは「テスト用 sheet1(集約)」と「sheet2(条件)」で、元のデータは「金額一覧表(01~03)」、「金額一覧表(04~06)」、「金額一覧表(07~10)」です。
  • データ転記のためのVBAマクロを作成している最中に、エラーが発生しました。エラーメッセージは「コピー領域と貼り付け領域の形が異なるため、情報を貼り付けることができません」というものです。原因や解決策について教えてください。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 >Range("A1").Select  ←ここの部分を >ActiveSheet.Paste Range("A65536").End(xlUp).Offset(1).Select のように変えればよいです。 > A106:R211 ← 金額一覧表(04~06)〃 こういうように、貼り付け範囲を指定すると、コピーした範囲と大きさが違うのでエラーが出ますから、左上端を設定させればよいです。後は、範囲を自動的に指定してくれます。 >Range("A1:R16824").AdvancedFilter こういう場合、地続きになっていれば、Range("A1").AdvancedFilter だけでよいです。 その範囲を他に転用する場合は、 With Range("A1").CurrentRegion   .AdvancedFilter   ' ここに、With ステートメントの範囲を省略して書けます。 End With とします。 明示的に取りたい場合は、 >Range("A1:R16824").AdvancedFilter Range("A1",Range("R65536").End(xlUp)).AdvancedFilter となります。つまり、Rの右、S,T,.. 列にデータがある場合ですね。

nekonote19
質問者

お礼

返事が遅くなってすみません。 何回も教えて頂いて、恐縮です。 おかげさまで、なんとかうまくいきました! ありがとうございました。

nekonote19
質問者

補足

こんにちは。 丁寧な説明、ありがとうございます。 抽出の部分は、ご提示頂いたコードで上手くいきました。 ただ、コピーの時に、タイトル行まで貼り付けてしまいました。 Sub データを転記_1() Windows("金額一覧表(01~03).xls").Activate Sheets("金額一覧表(01~03)").Select Application.CutCopyMode = False Selection.SpecialCells(xlCellTypeVisible).Select Selection.Copy Windows("テスト用.xls").Activate Sheets("集約").Select Range("A65536").End(xlUp).Offset(1).Select ActiveSheet.Paste Application.CutCopyMode = False End Sub Selection.SpecialCells(xlCellTypeVisible).Select ↑  この辺りでコピー元を指定しているのだと思いますが… Range("A2",Range("R65536").End(xlUp) と入てみたのですが、「コンバイルエラー」 と出てしまいました。 すみません。自分ではどこにどのような指定すればよいのか、 よくわからないので、教えて頂ければ大変助かります。 よろしくお願いします。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 もしかして、こう書きませんでしたか?  Range("A2", Range("R65536").End(xlUp).SpecialCells(xlCellTypeVisible).Select  それは、   Range("A2", Range("R65536").End(xlUp)).SpecialCells(xlCellTypeVisible).Select   と書いてください。End(xlUp) の後の「)」が抜けていますが、これは私も良くやるミスです。他は今は分かりません。 なお、これとは直接関係ない話ですが、私は、 VBE のツール-オプション-編集 の自動構文チェックは、オフにしています。 間違いは間違いで赤い字になるので、「コンパイルエラー」のメッセージボックスの立ち上がりはうるさいのです。

nekonote19
質問者

お礼

遅くなってすみません。 投稿したつもりが、送信されていませんでした。 なんとか上手くいきました。ありがとうございます!!

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 Selection.SpecialCells(xlCellTypeVisible).Select  '~~~~~~~~~ Selection.Copy Selection そのものが、コードを見る限りは、読み取れませんね。 それと、SpecialCellsで、可視セルをコピーしても、貼り付けは利きませんね。 こんな風にして、 Range("A1:R16824").Copy Windows("テスト用.xls").Activate Sheets("集約").Select Range("A1").Select ActiveSheet.Paste 通常はこのような書き方はしませんが、元のコードを使ってみました。 SpecialCells を使わなくても出来るはずです。ただし、バージョンなのか、何が原因かは分かりませんが、間の部分も全部コピーする、というトラブルを受けたことがあります。うまくいくか試してみてください。

nekonote19
質問者

補足

ご回答ありがとうございます。 え~っと、説明が悪くてすみません。 金額一覧表(01~03)のSheets("集約")への貼り付けはできています。 その後、金額一覧表(04~06)で抽出したデータを、 先に貼り付けたデータの最後行の次へコピーしたいのですが、 コードの入れ方や挿入場所がわからなのです。 Sheets("集約") A2:R105 ←金額一覧表(01~03)の抽出データ         A106:R211 ← 金額一覧表(04~06)〃         A212:R355 ← 金額一覧表(07~10)〃         ↑ コピー位置を自動取得したい それから、最初のフィルターをかける範囲ですが、 Range("A1:R16824").AdvancedFilter        ↑ データの入っている最後のセルを自動的に取得したいのです。 Range("A1:("R65536").End(xlUp).Row) のような書き方で良いのでしょうか? お手数かけますが、よろしくお願い致します。

関連するQ&A