今回は、Excelシートに入力している文字列(一覧)から一発でシートを作るマクロを解説します。
シート名を作る時って、シートに入力している一覧から作成することが多いかと思います。その場合、イチからシート名を1つ1つ入力してくのはとても面倒です。
せっかく、一覧に文字列があるなら、その文字列をシート名に設定できるようにしましょう。
この記事を真似するだけで簡単に作ることができます。
実行イメージ
関連記事【ExcelVBA】入力した文字列をシート名にする簡単マクロ
今回の記事に関してご不明な点があれば、問合せフォームからご連絡ください。
<動作確認環境>
- Windows 10 Home(バージョン22H2)
- Microsoft Office Professional Plus 2019
▼この記事を書いたひと
筆者のRYO。MOSマスター資格者。Excel操作テクニックやマクロVBA知識が豊富。本業で日々Excelを使い倒しており、現場に近いExcelの悩み解決が得意。
マクロコード
▼マクロコード(コピペ用)
1 2 3 4 5 6 7 8 9 10 |
Sub シート作成() Dim Sh As Range For Each Sh In Selection Sheets.Add after:=Worksheets(Worksheets.Count) ActiveSheet.Name = Sh.Value Next Sh End Sub |
コード解説
今回のプログラムは、あらかじめセル範囲を選択し、その中のデータをもとにシート名を作成する想定です。
選択範囲のデータは「SelecTion」で、取得することができます。
Selecionで取得したデータをFor Eachステートメントを使用し、繰り返し処理を実行します。
操作対象を固定したい場合は、Range("B3:B20")のように対象となるセル範囲を指定しても構いません。
「For Each」ステートメントで繰り返し処理
For Eachステートメントは、繰り返し処理を行うステートメントの1つです。
繰り返し処理を行うステートメントは、For~nextや、Do Loopなどもありますが、For Eachステートメントの場合、操作対象がコレクションや配列など複数の要素が含まれる場合に使用します。コレクション内の各要素に対して繰り返し処理を行うことができるのです。
操作対象(複数要素を持つオブジェジェクト)を変数に入れて→処理実行。入れて→処理実行 を操作対象が無くなるまで繰り返します。
以下のようなイメージです。(表現が下手くそで申し訳ない。。)
Addメソッドでシート追加
シートを追加するコードは、Addメソッドを使います。Addメソッドはオブジェクトを追加するメソッドです。
Sheets.Add after:=Worksheets(Worksheets.Count)で、一番最後のシートにシートを追加するという意味になります。
最後にActiveSheet.Name = Sh.Value でシート名を変更します。
Name プロパティ
Excel VBAでシート名取得するには、 「Name プロパティ」を使用します。
現在アクティブなシートは「ActiveSheet 」ですから、 ActiveSheet.Name = ActiveCell.Value で、「アクティブシート名にアクティブセルの文字を代入する」 という意味になります。
シート名に使えない文字があるので注意ください。
使えない文字を使用した場合は、マクロがエラーになります。
シート名に使用できない文字一覧
- コロン (:)
- バックスラッシュ ()
- スラッシュ (/)
- クエスチョンマーク (?)
- アスタリスク (*)
- ブラケット ([], {})
- シングルクォート (')
- ダブルクォート (")
- グレーターサイン (>)
- レスサイン (<)
- ピリオド (.)
- セミコロン (;)
- バーティカルバー (|)
実行時エラーが表示された場合は、「終了」ボタンをクリックしてから、 これらの使えない文字を含まないセルを選ぶか、使えない文字を削除後、マクロを再実行しましょう。
このマクロを個人用マクロブックや、Excel2007以降なら、クイックアクセスツールバーにボタンを登録しておくと便利です。
今回の解説は以上です!
記事に関する質問やお問い合わせがあれば、問い合わせフォームからご連絡ください。