Excel VBAを使って別シートの値をコピペする方法

## Excel VBAを使って特定の範囲の値を別の範囲に貼り付ける方法

ExcelのVBA（Visual Basic for Applications）を利用すると、特定の条件やイベントに応じて自動的に操作を行うことができます。例えば、特定のシートがアクティブになった際に、別のシートのデータを自動的にコピーして貼り付けたい場合などに役立ちます。ここでは、特定の範囲の値を別の範囲に貼り付ける方法を解説します。

### 具体例
Sheet2の性別と飲み物の表(混同行列のような表)のみを、Sheet1に反映する。
Sheet2に修正が入った場合、自動でSheet1にも反映される資料を作る。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821969/37ff85d1-9600-1d59-7081-83771da36ac3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821969/7e65ac00-4d48-d996-c569-54bd93993e7d.png)



### 手順

1. **Excelファイルを開く**

   Excelを開き、新しいブックを作成します。または既存のブックを開いてください。

2. **VBAエディタを開く**

   ExcelのVBAエディタを開くために、`Alt + F11` キーを押します。これにより、VBAプロジェクトが表示されます。
   ※`Alt + fn + F11`の場合もあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821969/053e27bc-c26c-35f0-e0b6-b625205ba9fa.png)


3. **新しいマクロを作成**

   VBAエディタで、左側のプロジェクトエクスプローラから、操作したいExcelファイル（例: `Book1.xlsm`）を選択し、`ThisWorkbook`をダブルクリックします。これにより、`ThisWorkbook`に関連するVBAコードを記述する画面が開きます。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821969/da1e071d-bbdc-0f85-70c0-4bfa4c3146fa.png)


4. **VBAコードの記述**

   次のVBAコードを`ThisWorkbook`に記述します。このコードは、特定のシートがアクティブになった際に、Sheet2のF3:H6の値をSheet1のB2から始まるセルに貼り付けるものです。

   ```vba
   Private Sub Workbook_SheetActivate(ByVal Sh As Object)
       Dim ws1 As Worksheet
       Dim ws2 As Worksheet
       Dim sourceRange As Range
       Dim destinationCell As Range

       ' シート1(コピー先)とシート2(コピー元)を設定
       Set ws1 = ThisWorkbook.Sheets("Sheet1")
       Set ws2 = ThisWorkbook.Sheets("Sheet2")

       ' シート1(コピー先)のB2から始まるセルを設定
       Set destinationCell = ws1.Range("B2")

       ' シート2(コピー元)のF3:H6の範囲を設定
       Set sourceRange = ws2.Range("F3:H6")

       ' シート1(コピー先)の指定されたセルに値を貼り付ける（式ではなく値のみ）
       destinationCell.Resize(sourceRange.Rows.Count, sourceRange.Columns.Count).Value = sourceRange.Value
   End Sub
   ```

   このVBAコードは、Excelファイルがアクティブになったときに自動的に動作します。Sheet2のF3からH6の範囲で計算された値をSheet1のB2から始まるセルに貼り付けます。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821969/3cf550bc-2c43-44b2-07c2-ad6954f98acd.png)


5. **保存と実行**

   VBAコードを保存するには、`Ctrl + S` を押して保存します。保存する際は、`ファイルの種類`を「Excel マクロ有効ブック (*.xlsm)」に設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821969/bf31745c-5592-74d9-85df-b5941f41cd40.png)


   Excelファイルを閉じ、再度開くと、VBAコードが有効になります。Sheet2の値を更新したり、シートを切り替えると、Sheet1に値が自動的に反映されることを確認してください。

### 動作確認
一覧の先頭行の山田さんを「コーヒー」から「お茶」に変更する。

#### 変更前
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821969/37ff85d1-9600-1d59-7081-83771da36ac3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821969/7e65ac00-4d48-d996-c569-54bd93993e7d.png)


#### 変更後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821969/cd675bf9-ac5c-4ce2-b748-a0cb43085200.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821969/0ab0836c-1958-4139-c555-7697b5437364.png)

##### Sheet2の変更が、自動で、Sheet1に反映されていることが確認取れました！

### おまけ
`F2` キーを押すと数式の確認ができます。※画像はG4のセルを選択
F3：H6の表はB～D列の一覧を参照し、一致した件数をセットする式が書かれています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3821969/40b61803-a3cd-0ece-336b-128c857075c3.png)



### まとめ

ExcelのVBAを使用することで、特定のイベントに応じて自動的に操作を行うことが可能です。この記事では、特定の範囲の値を別の範囲に貼り付ける方法を例示しました。是非、自分の業務やプロジェクトに応用してみてください。