「for each 文で現在の列と行の番号を知る」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
For Each~Nextループを使うと、選択されているすべてのセルに処理を行ったり、指定したセル範囲の全セルに対して処理を行ったりができます。
このFor Each~Next文の中で、現在どのセルを処理しようとしているのかを調べる方法を探している方による検索でしょうか。
マクロが期待したような動きをしないためにデバッグを行うときに、上手く動かない原因を探る中で、処理しようとしているセルの行番号・列番号を調べたいというニーズはありそうです。
参考になりそうなマクロを2つご紹介しておきます。
For Each~Nextループ中に処理するセルの行番号・列番号をDebug.Printするサンプルマクロ
一つ目は、処理しているセルの行番号・列番号をイミディエイトウィンドウに出力するマクロです。
Dim rng As Range
For Each rng In Selection
Debug.Print _
"行: "; rng.Row; vbTab; _
"列: "; rng.Column
Stop
Next rng
ワークシート上でセルを選択しておいて上記のマクロを実行すると、Stop文の箇所でステップ実行モードになります。(Stop文はブレークポイントを設定するのと同じ効果が得られます)
その状態で、ショートカットキー[Ctrl]+[G]や、メニュー[表示]-[イミディエイトウィンドウ]からイミディエイトウィンドウを表示すると、下図のように行番号・列番号が出力されていることを確認できます。
セルの行番号を取得するには、RangeオブジェクトのRowプロパティ、行番号を取得するには、RangeオブジェクトのColumnプロパティです。
For Each~Nextループ中に処理するセルの行番号・列番号をローカルウィンドウで確認するサンプルマクロ
もう一つは、ローカルウィンドウで、行番号・列番号を確認する方法です。
そもそも作成しているプロシージャの中に、セルの行番号・列番号を変数に格納するような処理があるのなら、Debug.Prit文をわざわざ書かなくてもOKです。
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
上記のマクロを実行すると、やはりStop文の箇所でステップ実行モードになりますから、メニュー[表示]-[ローカルウィンドウ]からローカルウィンドウを表示すると、下図のように行番号・列番号を確認できます。
- Newer:これからの学習効率が格段に良くなったと思う
- Older:Googleスプレッドシートで文字列を結合するには
Home » Excel VBA Rangeオブジェクト » For Each~Next文で処理しようとしているセルの行番号・列番号を確認する