セル範囲を配列として取得して、使うにはどうするか
動画でExcel セル範囲を配列として取得して、使うにはどうするか
セル範囲を配列として取得して、使うにはどうするか
動画版「マクロ講座」の解説記事です。
配列を1つずつ手作業で指定するのは面倒です。
もし既に表があるのであればそれを、配列として取得するという方法が考えられます。
今回はすでにある表形式のデータを入れとして取り込む方法そしてそれを活用する方法を紹介します。
(サンプルファイルは、こちらです。 セル範囲を配列として取得して、使うにはどうするか、サンプル101回)
マクロ動画 セル範囲を配列として取得して、使うにはどうするか
中級以外の人にもわかるように丁寧に解説しています。
シートの表を配列として利用する
セル範囲A1からB10を指定する方法は複数あります。
範囲指定方法: A1:B10、左上セルと右下セルの指定
A1.CurrentRegion、ActiveSheet.UsedRangeなどです。今回はA1.CurrentRegionを使用して範囲を指定します。
表には、支店名と店長名が記載されていて、支店名でブックを作成して、シート名には支店名、セルのA1には支店名、B1には店長名を記入するというマクロを作成します。コードを書いていきましょう。Alt + F11でVisual Basic Editorを開きます。変数の宣言: branchArrは支店の配列を表すVariant型の変数です。
配列は後で代入するため、最初は変数名のみ指定します。"Variant"を使用することで、変数に後で配列を格納できます。
シート名とオブジェクト名を"shlist"に変更しています。
配列からデータをFor文を使って取得する
Sheets("shlist")のオブジェクト名をshlistに変更してあるので、変数として宣言しなくても、Excelが理解してくれるので、このような記述のしかたができます。
shlistのA1.CurrentRegionを取得してbranchArrに代入します。これでセル範囲から配列を取得できました。
"r"をLong型の変数として宣言します。ループ変数"r"を使用して指定された名前を繰り返し処理します。
2から10までの範囲をループ処理します(1は見出し行なので除く)。
newbookを設定します。そのあと、For文を利用して、シートを追加するループ処理をするわけです。
配列からデータを取得する
新規シートを追加したら、そのシートに名前をつけてやります。このとき取得済みの配列を利用します。
シートの名前をbranchArr(r, 1)(支店名)で設定します。また、シートのセルA1に支店名ranchArr(r, 1)を入力します。セルB1にマネージャー名(branchArr(r, 2))を入力します。
この例により、シートに記入されたデータが、そもそも指定してやれば配列なのだということがおわかりいただけると思います。
実行すると、新規ブックが作成され、支店名ごとのシートが作成されています。またシートのシートのセルA1に支店名、セルB1に店長名が入力されています。
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
シートのオブジェクト名を変更しているのはなぜか。その利点は?
- 名前の意味を明確にする: "shlist"という名前は、シートが支店リストを表していることを明示しています。そのため、コードを読む他の人や自分自身が後で見返した時に、シートの目的や役割がすぐに理解できます。
- コードの可読性を向上させる: "shlist"という具体的な名前は、コード内でシートに関連する処理を行う際に直感的に理解できます。シートを追加、編集、削除する場合に、オブジェクト名が明確であれば、コードの意図が明確になり、他の人がコードを理解しやすくなります。
- コードの保守性を向上させる: オブジェクト名を適切に設定することにより、将来的な変更や修正が容易になります。例えば、シートのオブジェクト名を変更する必要がある場合でも、"shlist"という名前はシートの機能を表しているため、関連するコードを探しやすくなります。
- オブジェクト名=コード名が、上記サンプルでは"shlist"なので、変数の宣言やセットをせずに直接コードに記載できるという利点があります。