【Excel】”リストの上から順に入力して印刷する”のマクロのアレンジ方法紹介します!(画像付き)

【アフィリエイト広告を利用しています】

前回は、”リスト(名前一覧)を上から順にコピペして、スケジュールを印刷するマクロ”を作成する手順を紹介しました。なので、今回は、そのマクロを使って、自分好みにアレンジする方法をお伝えします。

前回のおさらい

前回は、「名前をコピーして印刷」という名前でマクロを作成しました。名前の一覧(J列)の上から順にデータをD1セルに入力して、1枚ずつ印刷していくマクロです。

【Excel】マクロ初心者口座

実際のマクロの中身はコチラ。

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

詳細は前回の記事をご参照ください。これから、このマクロをアレンジしていきます!

あのこ
あのこ

‘ J列の最終行をさがす」とか書いてあるのは、メモです
書いても書かなくても、マクロには関係ありませんが、今回は分かりやすいように書いておきます。
」を入れると、そこから後ろはマクロにかかわってこないので、何をしているか書いておくと後々わかりやすいです。

マクロのアレンジ内容

データを入力する場所(ペーストセル)の変え方

今回は名前一覧のデータを、D1セルに入力していますが、その入力先を変更する時は、下記の赤字部分を変更します。

      For i = 2 To LastRow ' 2行目から最終行まで
        Cells(1, 4) = Cells(i, 10) ' J列の、i行目の値をD1セルに入力する
        ActiveSheet.PrintOut ' 印刷する
     Next i

Cells(1, 4) は、列目の行目を指しています。(CellsR1C1参照形式で表されるセル指定の方法)
これをA1のセルに変更する時は、1列目の1行目になるので、Cells(1, 1) と変更します。
また、B5のセルに変更する時は、2列目の5行目になるので、Cells(2, 5) ですね。

R1C1参照形式とは?セルの列番号を簡単に調べる方法!

エクセルのマクロで、選択セルの列番号が何番目か調べる一番簡単な方法は、参照形式を変更することです。

まず、「Excelのオプション」を開きます。(「ファイルタブ-その他-オプション」の順に選択すると開けます)数式内の、R1C1参照形式を使用するにチェックを入れると、参照形式が変わります。

【Excel】マクロ初心者口座

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

【Excel】マクロ初心者口座

画像内では「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列の値を順番に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列にデータを入力して作成してみます。

【Excel】マクロ初心者口座

この場合のマクロの記述はこうなります。(変更した部分を赤色にしています)

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)」となります。

Sheets(“スケジュール”).」は左から1番目のシートにあるので「Sheets(1).」、
Sheets(“名簿”).」は2番目のシートにあるので「Sheets(2).」と記載することも可能です。

いのこ
いのこ

ワークシートの名前は英語でも日本語でも可能です。
ただ、名前で指定する場合は、”” で必ず囲ってください。

貼り付けたいデータが複数ある場合

貼り付けたいデータが複数ある場合、例えばJ列の右隣り、K列に部署名があり、それも入力したいとき。

【Excel】マクロ初心者口座

その場合は、こんな形になります。

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行目のデータを「()」で挟んで入力
 スケジュールシートをプリント

まとめ

今回は、「マクロを使っての連続印刷」の方法をアレンジしてみました!分かりにくいと感じた方、良ければご連絡ください!

また、簡単にできるマクロがあれば紹介しますので、良ければご覧ください!

タイトルとURLをコピーしました