Home » ExcelVBA Rangeオブジェクト » For Each~Next文で処理しようとしているセルの行番号・列番号を確認する

For Each~Next文で処理しようとしているセルの行番号・列番号を確認する

対象:Excel2007, Excel2010, Excel2013

「for each 文で現在の列と行の番号を知る」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

For Each~Nextループを使うと、選択されているすべてのセルに処理を行ったり、指定したセル範囲の全セルに対して処理を行ったりができます。

このFor Each~Next文の中で、現在どのセルを処理しようとしているのかを調べる方法を探している方による検索でしょうか。

マクロが期待したような動きをしないためにデバッグを行うときに、上手く動かない原因を探る中で、処理しようとしているセルの行番号・列番号を調べたいというニーズはありそうです。

参考になりそうなマクロを2つご紹介しておきます。

[スポンサードリンク]

For Each~Nextループ中に処理するセルの行番号・列番号をDebug.Printするサンプルマクロ

一つ目は、処理しているセルの行番号・列番号をイミディエイトウィンドウに出力するマクロです。

Sub For_Each_Nextループ中に行番号と列番号をDebug_Printする()

 Dim rng As Range

 For Each rng In Selection
  Debug.Print _
   "行: "; rng.Row; vbTab; _
   "列: "; rng.Column
  Stop
 Next rng

End Sub

ワークシート上でセルを選択しておいて上記のマクロを実行すると、Stop文の箇所でステップ実行モードになります。(Stop文はブレークポイントを設定するのと同じ効果が得られます)

その状態で、ショートカットキー[Ctrl]+[G]や、メニュー[表示]-[イミディエイトウィンドウ]からイミディエイトウィンドウを表示すると、下図のように行番号・列番号が出力されていることを確認できます。

For Each~Nextループ中に処理しようとしているセルの行番号・列番号を確認する

セルの行番号を取得するには、RangeオブジェクトのRowプロパティ、行番号を取得するには、RangeオブジェクトのColumnプロパティです。

For Each~Nextループ中に処理するセルの行番号・列番号をローカルウィンドウで確認するサンプルマクロ

もう一つは、ローカルウィンドウで、行番号・列番号を確認する方法です。

そもそも作成しているプロシージャの中に、セルの行番号・列番号を変数に格納するような処理があるのなら、Debug.Prit文をわざわざ書かなくてもOKです。

Sub For_Each_Nextループ中に行番号と列番号をローカルウィンドウで確認する()

 Dim rng As Range
 Dim r As Long
 Dim c As Long

 For Each rng In Selection
  r = rng.Row
  c = rng.Column
  Stop
 Next rng

End Sub

上記のマクロを実行すると、やはりStop文の箇所でステップ実行モードになりますから、メニュー[表示]-[ローカルウィンドウ]からローカルウィンドウを表示すると、下図のように行番号・列番号を確認できます。

For Each~Nextループ中に処理しようとしているセルの行番号・列番号を確認する

[スポンサードリンク]

Home » ExcelVBA Rangeオブジェクト » For Each~Next文で処理しようとしているセルの行番号・列番号を確認する

「ExcelVBA Rangeオブジェクト」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.