[ HOME ] [ BACK ] [ NEXT ]

犬でもわかるExcelVBA講座

§6 Cell と Range

ここでは「Cell」と「Range」について説明します。
自動記録で、セルA5を選択すると
Range("A5").Select ← こうなります。
これはCellsプロパティーを使用して書くと
Cells(5,1).Selectとなります。
つまり、Cellsは
(行番号,列番号)と書き換えることができます。
「せっかくわかりやすいRangeプロパティがあるのになぜCellsなんかあるの」と思う方いるかもしれないので
ここで、Cellsのメリットを説明します。

行列が数字で指定できるため、変数を使った処理に対して非常に有利。
たとえば、行方向になにかを入力する処理は↓
Sub Cellバージョン()
   Dim i

  For i = 1 To 100
     '↑iの値を1ずつ増やして100までNextまでの中を繰り返す。

        Cells(i, 1).Value = "犬" & i
                                   '↑全部犬では面白くないので「i」の値も表示
                                       'この「&」の使い方は要チェック
        '↑i は1ずつ増えていくのでセルの行が下方向へ進む。

  Next i
End Sub

Sub Rangeバージョン()
   Dim i

  For i = 1 To 100
     '↑iの値を1ずつ増やして100までNextまでの中を繰り返す。

        Range("A" & i).Value = "犬" & i
                                   '↑全部犬では面白くないので「i」の値も表示
                                       'この「&」の使い方は要チェック
        '↑i は1ずつ増えていくのでセルの行が下方向へ進む。

  Next i
End Sub

行方向はどちらのバージョンでもできますが
列方向はどうでしょう?
Sub Cellバージョン()
   Dim i

  For i = 1 To 100
     '↑i の値を1ずつ増やして100までNextまでの中を繰り返す。

        Cells(1, i).Value = "犬" & i

        '↑i は1ずつ増えていくのでセルの列が右方向へ進む。

  Next i
End Sub

Sub Rangeバージョン()
    For i% = 65 To 90
      Range(Chr(i%) & 1).Value = "テスト"
   Next i%
    For j% = 65 To 73
      For k% = 65 To 90
        If j% = 73 And k% = 87 Then
          Exit For
        Else
          Range(Chr(j%) & Chr(k%) & 1).Value = "テスト"
      End If
   Next k%
  Next j%
End Sub


協力:ケインさん

Rangeプロパティーは、列の表記が「A,B,C,D・・・」なので
数字でのループ処理には適していません。

上記のように直接文字コードを指定してやる方法があるのですが
@処理が上記のようにややこしくなる。
A処理スピードも遅い。
以上の理由によりお勧めできません。

自動記録ではRangeで記録されてしまうので、Cellsに書き換えなくてはいけません。
ここで、Cellsの表記方法をすこし紹介しておきます。
Cells Range
Cells(3,2).select Range("B3").Select
Range(Cells(1,1),Cells(3,2)).Select Range("A1:B3").Select
Cells.Select'←全部選択 Range("A1:IV65536").Select
Cells(1).Select Range("A1").Select
Cells(257).Select Range("B1").Select
Cells(10,"D").Select'←ひねくれた例 Range("D10").Select


最後に九九の一覧を例にとってに
「For Next 」の使い方を説明します。
Sub 九九の一覧表()
Dim i, p

  For i = 1 To 10
      '↑iの値を1ずつ増やして10までNextまでの中を繰り返す。

     For p = 1 To 10
        '↑pの値を1ずつ増やして10までNextまでの中を繰り返す。

           Cells(i, p).Value = i * p
              '↑行がi、列がpのセルに「i*p」の値を入れる。

     Next p
  Next i
End Sub

これを実行すると一瞬で終わってしまってなにがなんだかわからないと思うので
ステップ実行でやってみましょう。
VBEのウィンドウを画面の半分くらいにして、シートが見えるようにします。
ツール-マクロでステップインを押します。
そうすると、九九の一覧表の部分で黄色くなってるはずです。
「F8」を押すと一行ずつ実行していきます。
その結果が、リアルタイムに、ワークシートに現れていきます。
ゆっくり実行していくと、なんとなくわかってくると思います。

「For Next 」は、連続処理の基本で、今後もしつこいくらいでてきますので
今回は、ステップ実行で感覚をつかむ程度で大丈夫です。

☆☆☆☆☆☆☆☆   まとめ   ☆☆☆☆☆☆☆☆

1 セル操作には、Cells表記とRange表記がある。
2 Cells表記は、Range表記と、行列が逆になる。例:Range("C1")⇒Cells(1,3)
3 Cells.Selectはシートのセル全部を選択する。
4 ステップ実行は、F8で一行ずつ実行できる。


エクセルは、セルを選択・操作しないとなにもできません(少し語幣が・・)

という訳で次回はRangeおよびCellsの操作について説明します。


■このページはリンクフリーです。どんどんはってください。特に連絡する必要もありません。
■ご連絡いただければ、こちらからもリンクします。出来れば下のバナーを使ってください。
■ご意見・ご要望はこちら
からお願いします。