「オブジェクト」部分の書き換え
シート名を設定するステートメントの「オブジェクト」部分にあたる「ActiveWorkbook.Sheets("Sheet1")」。Sheetsプロパティでは、カッコ内にシート名を記述してワークシートを指定しています。実は、このカッコ内を数値で指定すると、シート名に関わらず、左から順番に指定できます。このように、左のワークシートから、「Sheets(1)、Sheets(2)、Sheets(3)、・・・」と参照させたいわけですが、繰り返し処理の中で「1、2、3、・・・」とカウントアップされる要素がありました。ループカウンタですね。ということで、Sheetsプロパティのカッコ内にループカウンタを記述します。
これで、「オブジェクト」部分が、繰り返し処理の中で、左からワークシートを指定するように書き換えることができました。
設定する「値」の書き換え
続いて、Nameプロパティに設定する「値」の書き換えです。この部分で、シート名が入力されているセルの値を使用します。たとえば、「セルA8の値」は「Range("A8").Value」と記述できますが、ワークシートが左から順番に参照されるのに合わせて、シート名が入力されているセルを上から順番に参照したいですね。つまり、ワークシートを順番に指定したように、セルもループカウンタを利用して指定したい、というわけです。セルを参照するもうひとつのプロパティ
セルを参照するには、Rangeプロパティ以外にもうひとつ、セルを参照するためのプロパティがあります。今回の強力な助っ人、Cellsプロパティです。これは、マクロの記録では記述されないプロパティで、行番号と列番号を指定してセルを参照することができます。たとえば、セルA8を参照する場合は、「Cells(8, 1)」と記述できます。そこで、列位置にシート名が入力されている列番号「1」に指定し、行位置にループカウンタを利用した計算式を記述します。シート名が入力される一番上の行が8行目なので「i+7」とします。入力されている値を参照するプロパティは「Valueプロパティ」です。また、ここでも、参照しようとしているセルがどちらのブックのセルなのかを記述しておく必要があります。このセルは、マクロを作成している方のブック上のセルなので、下図のように「ブック.シート.」の内容を追記します。
これで、シート名を設定する繰り返し処理が完成しました。
※「Workbooks("Book1.xls").Sheets("Sheet1")」部分をWithステートメントでまとめると、より読みやすいプロシージャになります。 |
完成したマクロを実行してみよう
それでは、実際に実行してみましょう。ブック名を「売上管理」、ワークシートの枚数を「5」枚に設定し、設定するシート名を「東京支店」「大阪支店」「名古屋支店」「北海道支店」「福岡支店」として、「作成」ボタンをクリックします。指定したとおり、シート名が設定されたワークシートが作成されました!
ひとまず、ここでひと区切りとしますが、今回作成したマクロには、まだ課題が残っています。変数を使ったプログラムに書き換えることや、指定したワークシートの枚数とシート名の行数が合っていない場合の処理をどうするか、といったような問題です。この点については、「入力データの行数を取得するテクニック」「配列変数を使用したデータ取得テクニック」の記事で紹介しています。