これだけはおさえるセル操作(2)−Resizeで自由自在
【基礎編】

セル操作の重要基本テクニックの1つにResizeがあります。その名のととおり、リサイズ
(セル範囲のサイズ変更)を行うテクニックです。

	使い方 ⇒ Resize(変更後の行数、変更後の列数)

1.選択範囲を行、列ともに1ずつ拡張リサイズする場合には・・・

	Selection.Resize(Selection.Rows.Count + 1, Selection.Columns.Count + 1).Select

となります。この例では選択範囲を拡張していますが、縮小する場合には現在の選択範囲の
行列を上記のようにカウントしたうえで縮小したい行数、列数をマイナスすればOKです。
ただ、この例のように、Resizeを使用するときは1行のコードが長く複雑なものになりがちです。
なるべくみてわかりやすいようなコーディングをこころがけるために、変更後の列数、行数は一端
変数に格納しておいてからリサイズを行うのも1つのテクニックです。

つまり・・・

2.	Dim cntRow As Integer
	Dim cntCol As Integer

	cntRow = Selection.Rows.Count + 1
	cntCol = Selection.Columns.Count + 1

	Selection.Resize(cntRow, cntCol).Select

ということです。

※選択範囲の拡張、縮小はOffsetを使うことでも可能でした。テクニック集の
 ”これだけはおさえるセル操作(1) − Offsetで自由自在”を確認してください。


【応用編】

3.ワークシート上のデータ入力範囲(A列−E列)をリサイズしてE列を除いたデータをコピー
したい、というような場合・・・

	Dim cntRow As Integer
	Dim cntCol As Integer
	Dim Rng As Range

	Set Rng = ActiveSheet.Range("A1").CurrentRegion

	cntRow = Rng.Rows.Count
	cntCol = Rng.Columns.Count - 1

	Rng.Resize(cntRow, cntCol).Copy Destination:=Sheets("sheet2").Range("A1")

	With ActiveSheet.Range("A1").CurrentRegion
		.Resize(.Rows.Count, .Columns.Count - 1).Copy _
			Destination:=Sheets("Sheet2").Range("A1")
	End With

4.Offsetとの組み合わせでさらに複雑な操作を行うことができます。よく用いられるテクニック
としては、1行目が項目行である場合のデータ範囲のみの取得、があげられます。データシート上
では多くの場合一行目が項目行であるため、この1行をのぞいて処理をしたいというケースです。

考え方は上の3の例とほとんど変わりません。データ範囲をCurrentRegionで取得します。そのあと
にOffsetでまず対象セル範囲を一列下にずらし、Resizeで一行削るのです。

	Dim cntRow As Integer
	Dim cntCol As Integer
	Dim Rng As Range
	Set Rng = ActiveSheet.Range("A1").CurrentRegion
	cntRow = Rng.Rows.Count - 1
	cntCol = Rng.Columns.Count
	Set Rng = Rng.Offset(1) '※一行ずらす
	Set Rng = Rng.Resize(cntRow, cntCol) '※一行削る
	Rng.Copy Destination:=Sheets("sheet2").Range("A1")

また、※印を付した部分はOffset, Resizeを2行に分けましたが、1行でまとめて書くと

	Set Rng = Rng.Offset(1).Resize(cntRow, cntCol)・・・

となります。
	

Excel97/2000



戻る


Excel Word Access VBA! モーグ