• ベストアンサー

Excel マクロ 他ブックのシートの範囲選択した内容を別ブックのシートにコピーする方法

他ブックのシートの範囲を選択しコピーした内容を、別ブックのシート に貼り付けするマクロを作成しています。 現在の情報であれば、下記のマクロで解決できます。 Sub Test1() Dim myCellall As Range Dim myCellsom As Range Dim myCelluri As Range   Set myCellall = Sheets("すべて").Range("A1") Set myCellsom = Sheets("総務").Range("A1") Set myCelluri = Sheets("売上").Range("A1") With Workbooks.Open("\") .Worksheets("すべて").Range("A1:K17").Copy myCellall .Worksheets("総務").Range("A1:K88").Copy myCellsom .Worksheets("売上").Range("A1:K81").Copy myCelluri .Close False End With End Sub ただ、他ブックのシートのデータは変動するため、行と列の変更を行わなければいけません。行と列の増減があっても、自動的に対応できるマクロを書きたいと思います。 どのようなマクロを追加すればよろしいでしょうか。 よろしくお願いいたします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

A1から始まる範囲をA1から始まる範囲にコピーするだけなら, ケース1) workbooks("元.xls").worksheets("すべて").cells.copy thisworkbook.worksheets("すべて").range("A1") でも十分です。 ケース2) application.displayalerts = false thisworkbook.worksheets("すべて").delete workbooks("元.xls").worksheets("すべて").copy before:=thisworkbook.worksheets(1) とか, あるいは所定のシートをひっくるめにしてコピーしてしまっても良いかもしれません。 workbooks("元.xls").worksheets(array("すべて","総務","売上")).copy before:=thisworkbook.worksheets(1) ケース3) セル番地をちゃんと指定しないとどうしてもキモチワルイなら with workbooks.open("~") with .worksheets("全て") .range(.range("A1"), .cells.specialcells(xlcelltypelastcell)).copy mycellall end with end with などのような手もありますね。

hyogara777
質問者

お礼

ご回答ありがとうございました。ケース3)を活用させていただきました。知らないメソッドでもあり勉強になりました。

その他の回答 (1)

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.1

>ただ、他ブックのシートのデータは変動するため、行と列の変更を行わなければいけません。 行列の変更の条件は何でしょう? 条件が分らなければ回答が出来ませんよ 例えば 値のあるすべてのセルを選択するなら 次のようになります Sub Test1() Dim myCellall As Range Dim myCellsom As Range Dim myCelluri As Range Set myCellall = Sheets("すべて").Range("A1") Set myCellsom = Sheets("総務").Range("A1") Set myCelluri = Sheets("売上").Range("A1") With Workbooks.Open("\") .Worksheets("すべて").UsedRange.Copy myCellall .Worksheets("総務").UsedRange.Copy myCellsom .Worksheets("売上").UsedRange.Copy myCelluri .Close False End With End Sub 参考まで

hyogara777
質問者

お礼

ご回答ありがとうございました。詳細な条件を記載せず、申し訳ございませんでした。UsedRangeプロパティは知らなかったので勉強になりました。

関連するQ&A

専門家に質問してみよう