Excel(エクセル)にはたくさんの効率化機能がありますが、一番の機能はVBA(マクロ)でしょう。
ただ、マクロはさわったことがない人にとっては、「私には無理」となってしまうと思います。
そこで今回は、初めてマクロをさわってみるという人を対象に、「自動入力→印刷」までできるマクロの作り方を、画像付きでできる限り分かりやすくお伝えしたいと思います。(どんなデータにも対応できるようにアレンジ方法も含めてお伝えします!)

今回お伝えするのは、名前一覧(リスト)の上から順にスケジュール表に名前を入力して1枚ずつ印刷するマクロです。
どんなリストにも適応できるよう、お伝えできたらと思います。

40代の私の髪が、みるみる蘇ってきました!【アイマイナス】というイオンウォーターを使ったら、髪が芯から潤って、ツヤサラ髪が取り戻せます!
マクロとは?(読まなくても大丈夫!)
マクロとは、Excelやその他のアプリケーションで繰り返し行う操作を自動化するためのツールです。Visual Basic for Applications(VBA)というプログラミング言語を使用して、操作の手順を記録し、再生することができます。例えば、毎日行うデータの整列や特定の計算を自動化することができます。
マクロを使うための準備(開発タブの表示)
まずは、エクセルでマクロを使うための設定を行いましょう。
開発タブを表示する
マクロを使う為には、エクセルのリボンに「開発」タブを表示する必要があります。(すでに表示されている方はとばしてOK!)
- エクセルを開きます。
- 「ファイル」タブをクリックし、「オプション」を選択します。
- 「エクセルのオプション」ウィンドウが開いたら、「リボンのユーザー設定」を選びます。
- 右側の「主なタブ」のリストから「開発」にチェックを入れ、「OK」をクリックします。
ファイルのオプションはコチラ。ここが「その他」となっている方は、「その他」をクリックすると「オプション」を選択できると思います。

「開発」の右にあるチェックボックスに、チェックを入れてください。
(古いExcelをご使用の方は、左側のリストから「開発」を探していただいて、真ん中の「追加」を押していただく必要があると思います。)

これで、リボンに「開発」タブが表示され、マクロを使用する準備が整いました!
「自動入力→印刷」するマクロの作成手順
1.データの用意
エクセルのファイルであれば、どんな形式のファイルでもマクロを作成することは出来ますので、既存のファイルでも、新規の空白ブックでもいいので、用意します。

マクロを組んだファイルは、最終的に「.xlsm(マクロ有効ファイル)」という拡張子で保存することになります。
既存のファイルを使用した場合、既存のファイルは残って、新たに、マクロ有効ファイルとして保存することになります。
2. 印刷したいもの、入力元データ(リスト)の作成
まずは、印刷したいものと入力元のデータを作成します。(これは、別シートでも同シートでも可能です。今回は分かりやすいように、同じシート上に作成します。)
こんな形のスケジュール(印刷したいもの)を用意しました。
J列にある名前一覧(入力元のデータ)の名前を順に、D1セルに入力して印刷します。リストは9名分ですが、約100万人分は入力することができます。同シートに名前リストがあるとそこも印刷の範囲になってしまうので、マクロを組む前に印刷範囲の設定をしてください。

3. 「マクロの記録」で、データをコピーして印刷するマクロを作ってみる
次に、” リストの一つ目をコピーして印刷する ” をマクロを「マクロの記録」で作ってみます。

「マクロの記録」とは、Excelで行った操作を記録し、同じ作業を自動でおこなってくれる機能です。繰り返し行う作業を効率化することができるんです。
「マクロの記録」はVBAの知識が無くても、簡単に使うことができます。
- 「開発」タブをクリックし、「マクロの記録」を選択します。
- マクロ名を入力し、「OK」をクリックします。
- リストの名前(一人目)をコピー&ペーストします。
- 「印刷」をクリックします。(本当に印刷しなくても大丈夫)
(3と4は「マクロの記録」で保存する作業) - 「開発」タブに戻り、「記録終了」をクリックします。
開発タブの「マクロの記録」を選択します。

マクロ名を入力して「OK」を押すと、マクロの記録が開始します。
「記録終了」のボタンを押すまで、作業している内容をVBA言語でコードとして記録してくれるので、名前をコピーして、入力したいマスにペーストして、印刷します。(本当に印刷しなくても大丈夫です!)

「記録終了」を押すと、マクロの記録が完了します。
この状態で、「マクロ」を押すと、先ほど付けた名前のマクロが作成されています。

ここで、選択されているマクロを実行すると、「”北海道 一郎”をコピペして1枚印刷」をやってくれます。

マクロの記録なら私もできそう!
でも、印刷するだけなら、別にマクロ使わなくてもいいんだよな~。
ただ、今回はリストの一覧にある人全員のスケジュールを順番に印刷したいので、更にマクロを編集してみます。(コピーするだけでできるようにしてあるので、一度やってみてください!)
4. マクロの編集(コピペ)
記録したマクロを編集して、マクロを完成させます。
- 「開発」タブから「マクロ」をクリックし、記録したマクロ(名前をコピーして印刷)を選択して「編集」をクリックします。
- VBAエディター(Microsoft Visual Basic for Applications)が開きますので、マクロを編集(コードを記入)します。
- そのまま閉じます
先ほど作成したマクロを次は「編集」します。

英語ばかりで記載されたウインドウが表示されますね。初めて見る人はここで諦めてしまいがちですが、頑張って先に進みましょう。
赤枠の中が、実際に行った作業(「マクロの記録」で保存したマクロ)のコードです。
このコードを全て削除し、

下記のコードを入力します。
Sub 名前をコピーして印刷()
Dim i As Long
Dim LastRow As Long
LastRow = Cells(Rows.Count, 10).End(xlUp).Row
For i = 2 To LastRow ' 2行目から最終行まで
Cells(1, 4) = Cells(i, 10)
ActiveSheet.PrintOut
Next i
End Sub
コピーすると、こんな感じ。↓↓(もちろん、全部手入力してもOKです!)

マクロデータはExcelブックに保存されるので、この画面はそのまま閉じてください。
すると、元のExcelの開きます。マクロの編集はこれで完了です。
(エクセルのウインドウと、マクロのウインドウがそれぞれ開いている状態です。マクロのウインドウを開いたままエクセルをさわる事ももちろんできます。)
5. マクロの実行
編集が完了したら、マクロを実行してリストの名前を順番に印刷できるか確認します。
- 「開発」タブから「マクロ」をクリックし、編集したマクロを選択して「実行」をクリックします。

実行ボタンを押した瞬間に、マクロが起動して印刷が開始されます。
このマクロだと、名前リスト(J列)に記載のある人数分(私のデータだと、茨城十郎さんまで)のスケジュールが印刷されますので、心配だったらリストの人数を減らして、テストしてみることをおすすめします!
6.データの保存方法
マクロを組んだファイルは、保存形式が変わり、「.xlsm(マクロ有効ファイル)」という拡張子で保存することになります。
そのため、データを保存する場合は「名前をつけて保存」( F12キーでも可 )を選択し、ファイルの種類を「Excel マクロ有効ブック(*.xlsm)」に変更して保存してください。

また、マクロ有効ファイルを開いた時は、マクロが無効の状態で開きますので、それを有効にする必要があります。

マクロのコード説明
今回使用したコードがこちら。
上から簡単に説明すると、① 名前の列(J列)の最後が何行目なのか確認して、② 名前の列の2行目から最後の行まで、「名前をコピーして、スケジュールに入力して、印刷する」。
これをやっているだけです。
Sub 名前をコピーして印刷()
Dim i As Long
Dim LastRow As Long
① LastRow = Cells(Rows.Count, 10).End(xlUp).Row
② For i = 2 To LastRow
Cells(1, 4) = Cells(i, 10)
ActiveSheet.PrintOut
Next i
End Sub
上から順に詳細説明
Sub 名前をコピーして印刷() ・・・
ここから、”名前をコピーして印刷”という名前のマクロコードを記載しますね!
Dim i As Long ・・・
”i” っていう名前の物を使うよ。”i” にはいろんな数字が入るよ!
” LastRow ” も一緒だよ!と、宣誓しています。
プログラムの中で 「数字を入れる箱(変数)」を作る宣言 をしているのが、コレです。
LastRow = Cells(Rows.Count, 10).End(xlUp).Row・・・
J列の最終行を ” LastRow ” に入力するよ!
「cells」というのは、セルの位置を指定する命令です。
「cells( 行番号 , 列番号 )」を使うと、「表のどの位置のセルを指定するか」 を決められます。上記のコードでは、Cells(Rows.Count, 10)となっており、Rows.Countが行番号になります。Rows.Countは「一番最後の行」という意味で、10はJ列を表しています。
その後の、.End(xlUp).Rowで「今いるセルから上に向かってデータがある最後のセルまでジャンプ」をしているんです。
つまり、J列の最終行を探していることになります。

例えば、B4のセルは、cells(4,2) と記載されます。
LastRow = Cells(Rows.Count, 10).End(xlUp).RowではJ列に文字が入力されている最終行を検索しているのですが、これをB列にしたい場合は、10のところを2にすればいいんです。
For i = 2 To LastRow ~ Next i ・・・
まずはiに2を入れて、この先のコードを実行してね。Next i までいったら、iに+1するよ。
LastRow で最後だよ!
Cells(1, 4) = Cells(i, 10) ・・・
D1セルに、J列のi行目のセルの中身を入力してね!
Cells(1,4)がD1セル、Cells(i,10)がJ列のi行目を表しています。
J2→J3→J4と順にD1に入力していきます。
ActiveSheet.PrintOut ・・・
印刷しますよ!
End Sub ・・・
これで、マクロ終了です!

ちなみに、このマクロは、現在開いているブック・シート(Activebook、Activesheet)で実行するコードです。別のシートを印刷する場合は、シートを選ぶ記述が必要になります。
エラーが出たらどうすればいいの?
マクロの記述(コードの入力)を間違えると、こんな感じでエラーが表示されます。


コードの記載を間違えると、入力中にこんな表示がでて、間違ってるよ!と教えてくれます。
今回の記述では、「Row.」の「.」が不要なので、それを消せばエラー表示は解消されます。
また、コードの記述自体に間違いが無くても、プログラムとして間違っていると、マクロを実行した際にVBAが開き、こんな感じで表示されます。

できると思っていたマクロがエラーとなると、ショックですが、こうなったら順番に確認して修正していくしかありません。この記述では、「n」と「i」を間違えて記載しているので、そこを修正するだけです。

修正したら、「■」ボタンを押して、ウインドウを閉じます。

間違っている記述がはっきりしていると、間違っているところを教えてくれます。
ただ、すべての間違いを教えてくれる訳ではありません。
簡単な間違いならいいのですが、基本的には順番にコードを確認していく必要があります。
マクロのアレンジ方法
先ほど作成したマクロを、下記内容にアレンジする方法をまとめました。
データを入力する場所(ペーストセル)の変え方
今回は名前一覧のデータを、D1セルに入力していますが、その入力先を変更する時は、下記の赤字部分を変更します。
For i = 2 To LastRow ' 2行目から最終行まで
Cells(1, 4) = Cells(i, 10) ' J列の、i行目の値をD1セルに入力する
ActiveSheet.PrintOut ' 印刷する
Next i

「‘ 2行目から最終行まで」とか書いてあるのは、メモです
書いても書かなくても、マクロには関係ありませんが、今回は分かりやすいように書いておきます。
「‘ 」を入れると、そこから後ろはマクロにかかわってこないので、何をしているか書いておくと後々わかりやすいです。
Cells(1, 4) は、1列目の4行目を指しています。(CellsはR1C1参照形式で表されるセル指定の方法)
これをA1のセルに変更する時は、1列目の1行目になるので、Cells(1, 1) と変更します。
また、B5のセルに変更する時は、2列目の5行目になるので、Cells(2, 5) ですね。
R1C1参照形式とは?セルの列番号を簡単に調べる方法!
エクセルのマクロで、選択セルの列番号が何番目か調べる一番簡単な方法は、参照形式を変更することです。
まず、「Excelのオプション」を開きます。(「ファイルタブ-その他-オプション」の順に選択すると開けます)数式内の、R1C1参照形式を使用するにチェックを入れると、参照形式が変わります。

何が変わったかというと、下の画像の赤枠のところ。通常は、「D1」などセルの位置がA1形式で表示されますが、このチェックを入れると、セルの位置をR1C1参照形式で表示してくれています。

画像内では「J7セル」を選択しているので、枠内は「R7C10」と表示されています。
R1C1の「R」は行を表すRowの頭文字、「C」は列を表すColumnの頭文字です。
Cells( , ) のカッコ内は、R1C1参照形式の数値を入力するので、J7セルをCellsで指定したの場合は、Cells( 7, 10) と入力すればいいという事です。
参照する列(一覧データの列)の変え方
参照する列(名前データ)が他の場所にある場合は、下記の赤字部分(複数)を変更します。
Sub 名前をコピーして印刷()
Dim i As Long
Dim LastRow As Long
LastRow = Cells(Rows.Count, 10).End(xlUp).Row ' J列の最終行をさがす
For i = 2 To LastRow ' 2行目から最終行まで
Cells(1, 4) = Cells(i, 10) ' J列の、i行目の値をD1セルに入力する
ActiveSheet.PrintOut ' 印刷する
Next i
End Sub
LastRow = Cells(Rows.Count, 10).End(xlUp).Row
では、J列の最終行を探しています。Jは10番目なので、Cells(Rows.Count, 10)となっています。
Cells(1, 4) = Cells(i, 10)
では、J列i行目の値を順番にD1セルに入力しています。
例えば、となりのK列に値がある場合は、
LastRow = Cells(Rows.Count, 11).End(xlUp).Row
Cells(1, 4) = Cells(i, 11)
と、10の場所を11に変更することになります。
Z列にある場合は、26番目なので、上記の11の場所を26に変更すればOKです!
参照するデータが別のシートにある場合
参照するデータが別のシートにある場合、ちょっと追加するコードがあります。と、その前に、シートの説明が必要になります。
このマクロには、どのシート(Sheet)のデータを使うのかの記載はありません。シートについての記載がないマクロは、選択しているセルがあるシート(Activesheet)で実行することになっているので、今回のマクロでは記載しませんでした。
ひとつのシートのみで完結するマクロを作る場合は、シートについて記載する必要はありませんが、複数のシート、ブックを使用する場合は、その名前を記載する必要があります!
例えば、印刷したい物を「スケジュール」と言う名前のシートに、参照するデータを「名簿」と言う名前のシートに分け、名簿シートのA列にデータを入力して作成してみます。

この場合のマクロの記述はこうなります。(変更した部分を赤色にしています)
Sub 名前をコピーして印刷()
Dim i As Long
Dim LastRow As Long
LastRow = Sheets("名簿").Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To LastRow ' 2行目から最終行まで
Sheets("スケジュール").Cells(1, 4) = Sheets("名簿").Cells(i, 1)
Sheets("スケジュール").PrintOut
Next i
End Sub
「Sheets(“名簿”).」は「名簿シートの」という意味になります。
「Sheets(“スケジュール”).」は「スケジュールシートの」という意味です。
そして、データをA列に入力しているので、「Cells(Rows.Count, 1)」、「Cells(i, 1)」となります。
「Sheets(“スケジュール”).」は左から1番目のシートにあるので「Sheets(1).」、
「Sheets(“名簿”).」は2番目のシートにあるので「Sheets(2).」と記載することも可能です。

ワークシートの名前は英語でも日本語でも可能です。
ただ、シート名前で指定する場合は、”” で必ず囲ってください。
貼り付けたいデータが複数ある場合
貼り付けたいデータが複数ある場合、例えばJ列の右隣り、K列に部署名があり、それも入力したいとき。

その場合は、こんな形になります。
Sub 名前をコピーして印刷()
Dim i As Long
Dim LastRow As Long
LastRow = Cells(Rows.Count, 10).End(xlUp).Row ' J列の最終行をさがす
For i = 2 To LastRow ' 2行目から最終行まで
Cells(1, 4) = Cells(i, 10) ' J列の、i行目の値をD1セルに入力する
Cells(1, 6) = Cells(i, 11) ' K列の、i行目の値をF1セルに入力する
ActiveSheet.PrintOut ' 印刷する
Next i
End Sub
入力したいF1セルは「 Cells(1, 6) 」、K列は11番目なので「 Cells(i, 11) 」、
なので、上記の位置に「 Cells(1, 6) = Cells(i, 11)」を追加すればよし。
同様にすれば、3つでも4つでもデータを貼り付けることは可能です!
文字(記号)の追加も可能です!
「&」、「””」を使用すると、文字や記号を挿入することも可能です!
Cells(1, 4) = Cells(i, 10) & " 様"
こう入力すると、名前の後に「 様」と付けれます。(例えば、「北海道 一郎 様」となります。)

「&」は文字列を結合する為の記号、
「”文字列”」は文字列を指定する際に使用します。
「””」と入力すると、空白を意味します。
【まとめ】別シートにある複数のデータを貼り付けて印刷する
最後に、「別シートにある複数のデータを貼り付けて印刷する」場合のコードを記載します。
Sub 名前をコピーして印刷()
Dim i As Long
Dim LastRow As Long
① LastRow = Sheets("名簿").Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To LastRow
② Sheets("スケジュール").Cells(1, 4) = Sheets("名簿").Cells(i, 1)
③ Sheets("スケジュール").Cells(1, 6) = "( " & Sheets("名簿").Cells(i, 2) & " )"
④ Sheets("スケジュール").PrintOut
Next i
End Sub
① 名簿シートのA列の最後の行を調べる
② スケジュールシートのD1セルに、名簿シートのA列i行目のデータを入力
③ スケジュールシートのF1セルに、名簿シートのB列i行目のデータを「()」で挟んで入力
④ スケジュールシートをプリント
まとめ
今回は、「自動入力→印刷」の方法をマクロで簡単にできる方法をお伝えしました!分かりにくいと感じた方、良ければご連絡ください!
また、簡単にできるマクロがあれば紹介します!

このマクロを、ボタンを押すだけで実行できるようにする事もできます!
【Excel-VBA】マクロを実行するための、ボタンの作り方!画像付きで解説します! – いのこblog