BizFAQ-ビズファック

仕事・ビジネスにおけるちょっと困ったこと、わからないことをズバリ解決お悩み解決サイトです。

  • TOP
  • 副業解禁時代の年収1000万円戦略
  • Excel
  • Word
  • PowerPoint
  • サイトマップ

VBAでFor文と親和性の高いCellsオブジェクトを使い倒す!

2015年4月5日 by Gen

VBA_Cells_4

VBAでセルを指定する時、Rangeオブジェクトを使うことが多いですが、For文と組み合わせて使いづらいという欠点があります。Rangeオブジェクトは文字列で、しかもアルファベットを含んでいるので結構大変です。

しかしVBAのCellsは行と列を両方とも数字で指定するので、For文との親和性がとても高いのです。Cellsは上位オブジェクトがなにかで挙動が変わりますのでそれについても解説します。



目次

  • VBAのCellsを使いこなす
    • 1.Cellsオブジェクトとは
    • 2.サンプルコードを書く
      • Sub sumple() Dim i As Integer Dim j As Integer For i = 1 To 9 For j = 1 To 9 Cells(i, j) = i * j Next j Next i End Sub
    • 3.Cellsの上位オブジェクトを指定する
      • Sub sumple() Dim i As Integer Dim j As Integer For i = 1 To 9 For j = 1 To 9 Range(“$B$2:$J$10”).Cells(i, j) = i * j Next j Next i End Sub

VBAのCellsを使いこなす

使い分けとして、Cellsは基本的に「1つの」セルを指定します。1つ以上のセルを指定するのがRangeです。Rangeの使い方はRangeの記事をご覧ください。いつもどおり九九のVBAを下敷きにしますのでわからない方はForの記事をどうぞ。

1.Cellsオブジェクトとは

CellsはWorksheetオブジェクトに用意されているオブジェクトです。Cellsをいきなり書いた場合Cellsの前には「Activesheet」を付加してVBAは解釈します。

省略して書いた場合、何が補完されるのかというのは大事な問題ですので不安な方は確認して下さい。

構文は基本的にCells(RowIndex, ColumnIndex)です。

2.サンプルコードを書く

今回のサンプルは九九のコードを下敷きにします。なんのことかわからない方は<こちら[25_Forへのリンク]> をどうぞ。

Sub sumple()
Dim i As Integer
Dim j As Integer

For i = 1 To 9
For j = 1 To 9
Cells(i, j) = i * j
Next j
Next i
End Sub

VBA_Cells_1

このコードで使用しているのがCellsオブジェクトです。CellsのRowIndexは普通のシートと同じですが、ColumnIndexはA列が1,B列が2というふうに対応しています。

3.Cellsの上位オブジェクトを指定する

上位オブジェクトに指定できるのはVBAのWorksheetオブジェクトか、Rangeオブジェクトです。
今回は「$B$2:$J$10」を指定します。余談ですが、このような時、「選択してイミディエイトウィンドウ」が便利だと思います。
イミディエイトウィンドウにSelection.Addressと打つとEnterでアドレスが取得できます。

VBA_Cells_2

VBA_Cells_3

取得したアドレスでマクロを修正します。

VBA_Cells_4

Sub sumple()
Dim i As Integer
Dim j As Integer

For i = 1 To 9
For j = 1 To 9
Range(“$B$2:$J$10”).Cells(i, j) = i * j
Next j
Next i
End Sub

実行した結果がこちらです。

VBA_Cells_5

上位オブジェクトを指定するということは「Cellsオブジェクトが見る領域」を指定するということです。

省略した場合はシート全体でしたのでCellsからみた1行目とワークシートの1行目が一致していましたが、上位オブジェクトを指定した場合、Cellsからみた1行目とワークシートの1行目が一致するとは限りません。


今回はCellsオブジェクトの解説をしました。上位オブジェクトを指定することでとても柔軟なVBAのコードが書けるようになります。

柔軟性をもたせる意味でなくてもデフォルトオブジェクトをまったく意識しないのはバグの温床になりますので、注意して記述してください。

Filed Under: Cells Tagged With: Cells, Excel, vba, マクロ




© Copyright 2015 BizFAQ · All Rights Reserved · Powered by WordPress · Admin