Excel VBA(マクロ)を使ってシートをコピペすることができます。
今日は事例とともにそのやり方を紹介します。
1、事例:保険料控除申告書でシートのコピペを使う
Excel で作った保険料控除申告書を使っています。
1枚のシートは「入力部分」と「プリントアウト部分」に分かれています。
「入力部分」に入力した内容が「プリントアウト部分」に反映されるようになっています。
一般の生命保険料であればこんな感じで↓
そして、普通にシートの印刷を行えば「プリントアウト部分」が印刷されます。
さて、年末調整を行う従業員1人1人につき上記の Excel シートへの入力を行う必要があります。元のシートがあり、それを人数分コピペして使うことになります。
以下の設定画面で全従業員の生命保険料などの金額を集計するようになっていますが、まずは保険料控除申告書を作成する従業員を指定してその人数分のシートを作成できるようになっています。
保険料控除申告書を作成したい従業員の欄に「Y」を付けて、「Sheet Maiking」ボタンを押せばマクロが実行して、人数分のシートが作成されます。
マクロの処理は色々なことをやっていますが。その一部分で「サンプル30」シートをコピペしてから、各シート名を従業員の名前(先頭に番号を付けて)に変更する過程があり、これを従業員の人数分だけ繰り返します。
このシートのコピペは色々なケースで使えるので便利です。
2、Excel VBA(マクロ)でシートをコピペする方法
シートをコピペして指定した名前に変更する仕組み
さて、シートをコピペして指定した名前に変更する仕組みを紹介します。
題材として、「サンプル」という名前のシートに保険料控除申告書を入れておきます。
マクロを実行すると以下のように「シート名を入力して下さい」というメッセージが出てくるようにしてあります。
「test」と入力して「OK」を押します。
すると、「サンプル」シートの左側に「サンプル」シートをコピペしたものが作成され、シート名が「test」となります。
VBA コード
上記の仕組みを作るには、以下のような VBA コードとなります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Sub Sheet_Copy() Dim Sheet_Name As String '入力' Sheet_Name = InputBox("シート名を入力して下さい") '「キャンセルボタン」または「×ボタン」を押した場合' If Sheet_Name = "" Then Exit Sub Else End If 'シートのコピー' Worksheets("サンプル").Copy Before:=Worksheets("サンプル") 'シートの名前変更' ActiveSheet.Name = Sheet_Name End Sub |
コード説明
コードを説明します。
インプットボックスに入力した内容を変数に入れる
インプットボックスを表示するためには InputBox 関数を使います。
()の中に入れるメッセージは “” で囲う必要があります。
1 |
InputBox("シート名を入力して下さい") |
このように↑ すると以下のようにメッセージ付きのインプットボックスが出てきます。
今回以下のように記述することで、インプットボックスに入力した内容を変数「Sheet_Name」に入れています。
Sheet_Name = InputBox(“シート名を入力して下さい”)
インプットボックスに「test」と入力すると、変数「Sheet_Name」に「test」という文字が入ります。
キャンセルボタンまたは×ボタンを押した場合の処理
次に、インプットボックスでキャンセルまたは×ボタンを押した場合にコードを終了する処理を入れています。
1 2 3 4 |
If Sheet_Name = "" Then Exit Sub Else End If |
インプットボックスのキャンセルを押した場合、×ボタンを押した場合には
インプットボックスに “”(空白)が入力されたと認識されます(何も入力せずに「OK」を押した場合も同じように認識)。
そしてその場合に、コードを終了するために If 文を使っています。
変数「Sheet_Name」が空白(””)の場合、プロシージャから出よ!、つまりコードを終了せよ!
という命令を Exit Sub を使って行っています。
「サンプル」シートのコピペ
さて、次に今回お話ししたかったシートのコピペを行う部分です。
Copy メソッドを使っています。
シートをコピペする場合、Copy メソッドは以下のように使います。
「Worksheetオブジェクト1」を「Worksheetオブジェクト2」の左側(右側)にコピペせよ
という命令になります。
Copy のすぐ後に記述する Before、After はその後に記述する「Worksheetオブジェクト2」の左側、右側という意味になります。
・Before が左側
・After が右側
今回の以下
1 |
Worksheets("サンプル").Copy Before:=Worksheets("サンプル") |
これ↑ により、「サンプル」シートを「サンプル」シートの左側にコピペせよ
という意味になります。
「サンプル」シートの左側に同じ中身のシートを作るということですね。
シート名を変更
さて、上記でコピペした「サンプル」シートの名前を変更します。
以下のように記述します。
1 |
ActiveSheet.Name = Sheet_Name |
コピペした直後は、新しく作られたシートがアクティブ(操作対象)となっているので、その名前という意味で
ActiveSheet.Name
と記述します。
そして、「ActiveSheet.Name」を最初にインプットボックスに入力した名前にするために「ActiveSheet.Name = Sheet_Name」と記述します。
3、まとめ
以上で、Excel VBA(マクロ)を使ってシートをコピペする方法についてお話ししました。
シートのコピペは色々と便利なので、是非活用してみて下さい。
編集後記
昨日(1/3)は夕方から実家で食事会でした。
おせち料理、すき焼きなどたくさん食べすぎ今日はお腹が重いです。
もう間もなく始動なので、生活を元に戻さないといけないですね。