マクロ 87回
エクセルでは、利用したいデータが表として存在している場合がほとんどです。
シートにある支店名でシートを作成したいケースを考えてみましょう。
(サンプルファイルは、こちらです。 セル範囲を配列として取得して、使うにはどうするか、サンプル101回)
1. どのような作業をしたいのかというと、シートを支店名で作成し、そのシートの見出しとして、A1セルに支店名、隣のセルに支店長を入力するという作業です。

2.Alt + F11で Visual Basic Editorを開きます。

3. 配列として利用したい範囲にはbranchArr という変数名を使い、Variant型で宣言することにします。
また、シート名をshlistという名前に変更してあります。
Sub getrange_addsheet()
Dim branchArr As Variant
branchArr = shlist.Range("A1").CurrentRegion
End Sub

4. そしてそのbranchArrは、
シート名shlistのRange("A1")の
現在の範囲=CurrentRegionですよと、
指定します。
続いて、支店の数だけシートをFor文で追加していきます。変数として今回は行番号の意味でrを使うことにします。(もちろん i でもいいです。)

5. さらに変数を追加します。新しいブックを作成するので、newbook 、新規シートを追加するのでnewsh を変数として追加します。

6.あとは、 すでにプロシージャで配列を指定しているので、実行時にはエクセルが配列を持っていますから、
新しいシートの名前として newsh.Name = branchArr(r, 1)
さらに、A1セルに branchArr(r, 1)
つづいてB1セルに branchArr(r, 2)
と指定するだけで、支店名のシートを作成することができます。

7. コードは以下のようになります。
Sub getrange_addsheet()
Dim branchArr As Variant
branchArr = shlist.Range("A1").CurrentRegion
Dim r As Long, newbook As Workbook, newsh As Worksheet
Set newbook = Workbooks.Add
For r = 2 To 10
Set newsh = newbook.Worksheets.Add
newsh.Name = branchArr(r, 1)
newsh.Range("A1").Value = branchArr(r, 1)
newsh.Range("B1").Value = branchArr(r, 2)
Next r
End Sub

8. もしワークシートを右側に追加したい場合は、Addの引数にAfterを使い、コードを以下のように変更します。
Set newsh = newbook.Worksheets.Add After:=Worksheets(Worksheets.Count)
