シートの名前データを動的配列変数に格納しよう
まず、動的配列変数を宣言します。ここでは、文字列型のデータであるワークシートの名前を格納するので、「Dim SheetName() As String」と記述します。
「入力データの行数を取得するテクニック」したとおり、シートの数は「SheetCount」に格納されているので、これとReDimステートメントを使用して要素数を設定します。このとき、配列変数のインデックス番号は「0」から始まるので、「1」を引いておきます。
そして、マクロのブックがアクティブなうちに、シートの名前データを動的配列変数SheetNameに格納します。繰り返し処理になるので、For...Nextステートメントを使用し、ループカウンタ「i」を上手に活用します。インデックス番号は「0」から始まるので、インデックス番号とCellsプロパティの行位置の数値のズレに注意してください。
シート名を設定しよう
あとは、動的配列変数に格納したデータをシート名に設定するだけです。冗長だったステートメントを下図のように書き換えます。ここでも、インデックス番号が「0」から始まることによる数値のズレに注意してください。
書き換えたマクロを読み直してみると、ステートメントがスッキリしたことが実感できるハズです。また、おおまかにですが、「データを取得」→「新規ブック作成」→「取得したデータを設定」といったようにマクロの流れもスッキリしました。
これで、新規ブックを作成する前にシート名を取得する仕様に修正できました。もちろん、これはひとつの修正例なので、考え方によっては違う修正方法もあります。続く「画面更新を抑止してスピードを上げよう」では、改善点3について解説します。