今回は、条件に応じてシートを作成するマクロを紹介します。
その1例として、試験合格者だけに合格証を発行するマクロを作りましたのでで良かったら参考にしてください。
この記事を真似するだけで簡単に作ることができます。
実行イメージ
関連記事【ExcelVBA】入力した文字列をシート名にする簡単マクロ
関連記事【ExcelVBA】一覧表からシート名をまとめて作成する方法
関連記事【ExcelVBA】案内文書をまとめて編集・シート作成するマクロ
今回の記事に関してご不明な点があれば、問合せフォームからご連絡ください。
<動作確認環境>
- Windows 10 Home(バージョン22H2)
- Microsoft Office Professional Plus 2019
▼この記事を書いたひと
筆者のRYO。MOSマスター資格者。Excel操作テクニックやマクロVBA知識が豊富。本業で日々Excelを使い倒しており、現場に近いExcelの悩み解決が得意。
今回やりたいこと
「受講者一覧」シートには、受講者と点数の一覧があります。そして、点数が80点以上なら合格証を作成するというシーンです。
合格証は「合格証書」シートにひな形があり、中央部分に合格者の名前が入るようになっています。
合格証書を人数分作ろうと思うと、とても大変です。今回は、この作業を自動化します。
マクロコード
▼マクロコード(コピペ用)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Sub 合格証発行() Dim ws1 As Worksheet Dim ws2 As Worksheet Set ws1 = Worksheets("受講者一覧") Set ws2 = Worksheets("合格証書") Dim LastRow As Long LastRow = ws1.Cells(Rows.Count, "B").End(xlUp).Row Dim i As Long For i = 3 To LastRow If ws1.Cells(i, "D") >= 80 Then ws2.Copy after:=Worksheets(Worksheets.Count) With Worksheets(Worksheets.Count) .Name = ws1.Cells(i, "C").Value .Range("B5") = ws1.Cells(i, "C").Value & " 殿" End With End If Next i End Sub |
コード解説
変数の定義
今回登場する2種類のシートをそれぞれ変数に格納します。
変数の名前は何でもいいですが、ws(ワークシートの略)としました。型はワークシート型で。
カッコの中のワークシート名は間違えないように。
また、送付先一覧シートのデータが何行あるか不明確な場合を考慮し、B列の最終行を取得します。(B列のIDが必ず入力されていること前提)
取得した最終行番号は、のちほど使うため、変数に格納しておきます。
ちなみに、今回B列の最終行番号は 「26」になります。
「For Next」ステートメントで繰り返し処理
For Nextステートメントは、繰り返し処理を行うステートメントの1つです。
For から next i までの中に記述されたコードが指定回数だけ実行され、指定回数を過ぎるとFor Nextから抜けることになります。
指定回数は「3 TO LastRow」の部分です。
今回、LastRowの変数には22が格納されているので、2から22までの数字が変数 i の中に格納されながら処理が行われ、22になったときにFor文から抜けます。
IF Then ~End If で条件分岐
IF分で80点以上の場合だけ、合格証を発行するようにします。
『If ws1.Cells(i, "D") >= 80 Then』 で80点以上の場合 という意味になります。
Copyメソッドでシート追加
シートをコピーする時は、Copyメソッドを使います。
『ws2.Copy after:=Worksheets(Worksheets.Count) 』で、一番最後のシートにコピーするという意味になります。
Withステートメント
Withで1度だけ書いたオブジェクトは、End With と書かれているところまでは省略して書くことができます。
今回の場合 With の後ろに書かれている「Worksheets(Worksheets.Count)」 の記述が省略できます。
Name プロパティ
Excel VBAでシート名取得するには、 「Name プロパティ」を使用します。
.Name = ws1.Cells(i, "B").Value の部分で、受講者一覧シートのB列の2行目から22行目までの文字列をシート名にしています。
シート名に使えない文字があるので注意ください。
使えない文字を使用した場合は、マクロがエラーになります。
シート名に使用できない文字一覧
- コロン (:)
- バックスラッシュ ()
- スラッシュ (/)
- クエスチョンマーク (?)
- アスタリスク (*)
- ブラケット ([], {})
- シングルクォート (')
- ダブルクォート (")
- グレーターサイン (>)
- レスサイン (<)
- ピリオド (.)
- セミコロン (;)
- バーティカルバー (|)
実行時エラーが表示された場合は、「終了」ボタンをクリックしてから、 これらの使えない文字を含まないセルを選ぶか、使えない文字を削除後、マクロを再実行しましょう。
合格証に名前入力
最後に、ws2(合格証書シート)のA5セルに、ws1(受講者一覧シート)を転記する処理を書いたら完了です!
完成実行イメージ
今回の解説は以上です!
条件に応じてシートを追加したり、本文を編集する業務には、今回のマクロを応用できるかと思います。ぜひ参考にしてみてください。
記事に関する質問やお問い合わせがあれば、問い合わせフォームからご連絡ください。