• ベストアンサー

Excel データコピーのマクロ

ExcelでAというファイルのデータをBというファイルにコピー&ペーストするマクロを組みたいと考えています。 本当はAファイルを開かずにできるとベストなのですが、 マクロを実行する(マクロ登録したオートシェイプを押す)とAファイルを開き、 Bファイルにコピペが終わればAファイルを閉じるという動作を行うマクロは組めるでしょうか? どなたか、ご存知の方が居られればお教え願います。 よろしくお願いいたします。

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

  • ベストアンサー
  • x0000x
  • ベストアンサー率52% (67/127)
回答No.4

こんにちは。 こんな感じで如何ですか? ファイルBを開いている状態でファイルAの編集シートをファイルBに追加します。 不要なファイルBのシートは削除しています。 (ただし、ファイルBにはシート1枚の場合です。) また、コピー後の参照シートは保護しています。 PATH名、ファイル名、シート名、パスワードなど 適当に変更ください。 Sub copySheetA() Application.ScreenUpdating = False '画面表示の停止 '参照シートを保存 Dim 参照ST As Worksheet Dim 新参照ST As Worksheet Set 参照ST = ActiveSheet Dim 編集BK As Workbook Dim 編集ST As Worksheet '編集シートAを開く Set 編集BK = Application.Workbooks.Open(ActiveWorkbook.path & "\FileA.xls") Set 編集ST = 編集BK.Sheets(1) '開いたシートを現在シートの後ろにコピー(追加) 編集ST.Copy after:=参照ST '編集シートを閉じる 編集BK.Close (False) '新参照シートを保護する Set 新参照ST = ActiveSheet '不要となった参照シートを削除 Application.DisplayAlerts = False 参照ST.Delete Application.DisplayAlerts = True '新参照シートの属性設定 新参照ST.Name = "xxxxx" 新参照ST.Protect ("PASS-WORD") Set 編集BK = Nothing Set 編集ST = Nothing Set 参照ST = Nothing Set 新参照ST = Nothing Application.ScreenUpdating = True '画面表示の停止 End Sub

その他の回答 (5)

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.6

Workbooks.Add "C:\Sample\ExcelData.xls" みたいなのはどうでしょうか?

naranosaru
質問者

お礼

ありがとうございます。 参考にするとこんなのが出来ました。 Sub auto_open() 'AのファイルをA1という名前のファイルとして追加 Workbooks.add "C:\Sample\ExcelData.xls" 'ペースト先の"Sheet1"のシートをアクティブにしておく Windows("B.xls").Activate Sheets("Sheet1").Select 'コピー元からSheet1をコピー Windows("A1").Activate Sheets("Sheet1").Select Columns("B:I").Select Selection.copy 'ペースト先のSheet1をペースト Windows("B.xls").Activate Columns("B:B").Select ActiveSheet.Paste 'コピー元のSheet2をコピー Windows("A1").Activate Sheets("07Sheet2").Select Columns("B:I").Select Application.CutCopyMode = False Selection.copy 'ペースト先のSheet2にペースト Windows("B.xls").Activate Sheets("07Sheet2").Select Columns("B:B").Select ActiveSheet.Paste '終了処理(クリップボードの情報を削除してコピー元を終了させる。) Windows("A1").Activate Range("A1").Select Application.CutCopyMode = False ActiveWindow.Close End Sub No.4/5の方の方法と比べて、使い勝手の良いほうを利用させていただきます。

  • x0000x
  • ベストアンサー率52% (67/127)
回答No.5

#4です。 以下のコメントが違ってました。無視してください。 >新参照シートを保護する

naranosaru
質問者

お礼

いい感じに思っていた動作と同じ結果を得られました。 これで不本意なロールバックを心配せずに済みます。 ありがとうございました。

  • SRitchie
  • ベストアンサー率21% (103/470)
回答No.3

No.1です、 解釈が間違っていたらごめんなさい。 その程度なら、「ツール」メニューの「ブックの共有」と「シートの保護」を組み合わせて実現できる気がするんですが…

naranosaru
質問者

補足

度々ありがとうございます。 その方法も考えたのですが、閉じる際に「上書きしますか?」のコメントが出て「はい」を選択すると上書きできてしまいました。 編集は保護解除のコメントが出て編集できないのでOKなのですが・・・。 上書きできてしまうと都合が悪く、別のファイルを作成して開く度に更新するようなイメージのものを作成したほうが安全かと考えた次第です。 やり方が悪いのでしょうか???

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

記録マクロでも可能かと思いますよ。 >本当はAファイルを開かずにできるとベストなのですが、 これは不可能です。 値しかコピー出来ませんが、マクロでセルに参照式を記入してリンクを更新する方法なら可能でしょう。

naranosaru
質問者

補足

実はハイパーリンクを張ってあるセルがありまして、 値のみのコピーでは不十分なのです。 そこで、このようなマクロを組むしかないかと考えた次第です。 ハイパーリンクもコピペできる方法があればマクロを組まなくてもいいのですが・・・。

  • SRitchie
  • ベストアンサー率21% (103/470)
回答No.1

結論から言うと出来ます。 んで、 AとBはまったく同じでいいのでしょうか? もし、そうならブリーフケースを使うとか、汎用のバックアップソフトの方が楽だと思うのですが…

naranosaru
質問者

補足

AとBはまったく同じで、Aを編集用、Bを閲覧用として使用したいと考えています。 現在Aを共有フォルダに置いており、編集するのは自分だけなのですが、 誰かが開いていると自分が編集・保存できないので作業が停まります。 また、不特定多数の人がネットワーク上のPCで閲覧しますので 見る側の人に今までと違う操作をさせたくないのです。 これらの理由から、Excelのみで実現する方法を探しています。 自分なりにマクロを調べてみたのですが、 どのようにすれば良いのかわからないのでお教え願います。

関連するQ&A