■ 行・列に対する操作をマスターしよう!
数回にわたってワークシート上のセルを操作するExcel VBAについて解説を行います。
今回はシートの行・列を操作する様々な方法について解説していきます。
行・列に対する操作
操作の対象となるセルの行番号や列番号を取得したり、行や列を削除したり挿入したいケースがExcelでは、頻繁に発生します。ここでは、行・列に対する操作をまとめて解説します。
■Rowsプロパティ、Columnsプロパティ
ワークシートの指定した、行や列を取得することができます。「1〜3」行目というように連続した行、または「5」行目というように単一の行を取得することができます。列に関しても同様です。
[書式]
オブジェクト.Rows(行番号)
オブジェクト.Columns(列番号)
オブジェクトには、Applicationオブジェクト、Worksheetオブジェクト、Rangeオブジェクトを指定します。省略すると、アクティブシートが対象になります。
行番号には操作の対象となる行番号を、列番号には操作の対象となる列番号、または列を表すアルファベットを、それぞれ指定します。省略すると、すべての行、またはすべての列を対象にします。
例:
Sub Test()
Rows(1).Value = "R_1"
Rows("3:5").Value = "R_2"
Columns(2).Value = "C_1"
Columns("E:G").Value = "C_2"
End Sub
このプロシージャを実行すると、アクティブシートの1行目に「R_1」の文字列を、3〜5行目に「R_2」の文字列を、B列に「C_1」の文字列を、E〜G列に「C_2」の文字列を、それぞれ設定します。 |
※ 参照する行または列が連続していないケースでは、Rangeオブジェクトを使用します。例えば「Range("3:3,5:5")」ならば3行目と5行目を、「Range("E:E,G:G")」ならばE列とG列を、それぞれ参照します。
■Rowプロパティ、Columnプロパティ、Countプロパティ
Rowプロパティ、Columnプロパティは参照先セルの行番号、列番号を返します。Countプロパティはセル領域の行数や列数を取得します。
例:
Sub Test()
Debug.Print Range("A65536").End(xlUp).Row
Debug.Print Range("A1").CurrentRegion.Rows.Count
Debug.Print Range("IV1").End(xlToLeft).Column
Debug.Print Range("A1").CurrentRegion.Columns.Count
End Sub
このプロシージャを実行すると、アクティブシートの「A1〜C10」のセル範囲にデータがある場合、「10」「10」「3」「3」が出力されます。 |
■EntireRowプロパティ、EntireColumnプロパティ
EntireRowプロパティは指定したセルやセル範囲を含む行を、EntireColumnプロパティは指定したセルやセル範囲を含む列を、それぞれ参照します。
Sub Test()
Range("合計").EntireRow.Insert
Range("合計").Offset(0, 1).EntireColumn.Delete
End Sub
このプロシージャを実行すると、アクティブシートの「合計」という名前の付いたセルの前に1行挿入し、右隣の列を1列削除します。例えば「合計」のセルが「A10」の場所にある場合、10行目に1行挿入され、「合計」のセルは「A11」の場所になります。さらにB列が1列削除され、C列以降のデータが左に1列移動します。 |
■Hiddenプロパティ
行や列の表示、非表示を切り替えます。
[書式]
オブジェクト.Hidden
オブジェクト.Hidden = 値
オブジェクトには、表示・非表示を切り替えたい行または列を指定します。
値には、TrueまたはFalseを指定します。Trueを指定すると非表示に、Falseを指定すると表示に切り替わります。
例:
Sub Test()
Rows(3).Hidden = True
If Columns("E:G").Hidden Then
Columns("E:G").Hidden = False
End If
End Sub
このプロシージャを実行すると、アクティブシートの3行目を非表示にします。さらにE〜G列が非表示になっている場合、再表示します。 |
■RowHeightプロパティ、ColumnWidthプロパティ、
Heightプロパティ、Widthプロパティ、AutoFitプロパティ
RowHeightプロパティ、ColumnWidthプロパティは、セル範囲の行の高さや列の幅を取得・設定することができます。
Heightプロパティ、Widthプロパティは、セル範囲の行の高さや列の幅の合計を取得することができます。
AutoFitプロパティは、行の高さや列の幅を自動調節します。
[書式]
オブジェクト.RowHeight
オブジェクト.RowHeight = 値
オブジェクト.ColumnWidth
オブジェクト.ColumnWidth = 値
オブジェクト.Height
オブジェクト.Width
オブジェクト.AutoFit
オブジェクトには、操作の対象となる行または列を指定します。
RowHeightに設定する値は、行の高さをポイント単位で指定します。ColumnWidthに設定する値は、標準フォントの半角文字の幅を1とする単位で指定します。
Heightプロパティ、Widthプロパティから取得できる値は、どちらもポイント単位になります。なおHeightプロパティ、Widthプロパティは値の設定ができません。
(注意)RowHeightプロパティ、ColumnWidthプロパティでセル範囲を指定した場合、すべての行が同じ高さ、またはすべての列が同じ幅でない場合、戻り値は「Null」になるので注意が必要です。
例:
Sub Test1()
Debug.Print Rows(1).RowHeight
Rows("3:5").RowHeight = Rows(1).RowHeight + 6
End Sub
Sub Test2()
Debug.Print Rows("3:5").Height
Rows("3:5").AutoFit
Debug.Print Rows("3:5").Height
End Sub
「Test1」プロシージャを実行すると、RowHeightプロパティを使用してアクティブシートの1行目の高さをポイント単位でイミディエイトウィンドウに出力します。ここでは仮に「21」が出力されたものとします。次に3〜5行めの高さを、同じくRowHeightプロパティを使用して1行目の高さに「6」を加算した値「27」に設定します。
「Test2」プロシージャを実行すると、Heightプロパティを使用して3〜5行めの高さの合計値である「81」をイミディエイトウィンドウに出力します。次に、AutoFitプロパティで3〜5行めの高さを自動調節します。次にHeightプロパティで取得する3〜5行めの高さの合計値は、自動調節後の値になります。 |
以上、行・列を操作するいろいろな方法について解説しました。
VBAからシートの行・列を自由に操作することで、様々な変化に対応するワークシートを活用することができます。今回の解説を役立ててください。
|