none
sheet1の内容をすべてコピーしsheet2に値貼り付けるマクロ RRS feed

すべての返信

  • s-koji7899さん、おはようございます。

    まさに「ファイルを開くと同時にsheet1の内容をすべてコピーしsheet2に値貼り付ける」及び「ファイルを保存する」でインターネットで検索すると色々出てくると思いますので、自力で十分目的のVBAの解答に到達できると思いますが…。

    ちなみに、自分自身を開くときなら、VBEで、ThisWorkbookの「Private Sub Workbook_Open()」にコードを作成する。別のエクセルファイルを開くときなら、VBEで標準モジュールを挿入して、そこに別のエクセルファイルを開くと同時にsheet1の内容をすべてコピーしsheet2に値貼り付け保存するコードを作成する。

    ご参考まで。

    • 編集済み KokemomoYamamomo 2019年7月3日 5:59 間違った返事を削除
    2019年7月2日 20:35
  • s-koji7899さん、おはようございます。

    参考までに、ブックを開くとそのブックのSheet1の内容をすべてコピーしてSheet2に値のみ張り付けてファイルを上書き保存するマクロをサンプルとして記しておきます。VBEのThisWorkbookに作成します。

    Private Sub Workbook_Open()
    'このブックのSheet1をSheet2に値のみコピーする
      With ThisWorkbook
        'Sheet1からSheet2へコピー
        .Worksheets("Sheet1").Cells.Copy
        .Worksheets("Sheet2").Range("A1").PasteSpecial xlPasteValues
        'SHeet2をアクティブにしてSheet2のシート全セルの選択を解除
        .Worksheets("Sheet2").Activate
        ActiveCell.Select
        'コピーモードを解除
        Application.CutCopyMode = False
        'このブックを上書き保存
        .Save
      End With
    End Sub

    2019年7月3日 1:21
  • なお、マクロを走らせておいて、別のファイルが開かれると同時にこれをキャッチしてそのsheet1の内容をすべてコピーしsheet2に値貼り付け保存する、というマクロは、マクロ実行中は、他のエクセルをいじることができないので無理、ではないかと思います。ご参考まで。

    よくわかりませんがほかのブックを開いたときにイベントを
    発生させることを言っているのでしょうか。
    それなら、Application.WorkbookOpen イベントを使えばいいです。

    クラスモジュールに以下のコードを書き、

    ' クラスモジュール: Class1 (モジュール名は適宜変更)
    ' 変数宣言を強制
    Option Explicit
    
    ' Application のイベントを取得するための変数
    Dim WithEvents xlApp As Application
    
    ' クラスのコンストラクタ
    Private Sub Class_Initialize()
        ' Application のイベントを受け取れるようにする
        Set xlApp = Application
    End Sub
    
    ' Application.WorkbookOpen イベント
    '   ワークブックを開いたとき
    Private Sub xlApp_WorkbookOpen(ByVal wb As Workbook)
        ' ワークブックを開いたときに行う処理
    End Sub

    標準モジュールあたりに

    Dim cl As Class1
    
    Sub test()
        Set cl = New Class1
    End Sub

    と書いて test プロシージャを 1 回実行しておけば、そのあとに
    クラスインスタンスが初期化されるまで Application のイベントを
    受け取ることができます。
    (Application.EnableEvents = False とするとイベントが
    発生しなくなるので注意)



    • 編集済み infade 2019年7月3日 4:40 書式が間違っていたので修正
    2019年7月3日 4:34
  • infadeさん、こんにちは。

    ご指摘、ありがとうございます。Classモジュールを使えばできるんですね。

    s-koji7899さん、間違った返事をして申し訳ありませんでした。

    2019年7月3日 5:56