Excel VBA 質問スレッド №2152 (解決済)

セル位置の縦/横の値の取得について

投稿者 : agalinman     投稿日時 : 2025/10/07(Tue) 18:15:04     OS : 未指定     EXCEL : 未指定
シートの内容が書き換えられたときに動作する Worksheet_change() での記述について質問です。
引数に ByVal Target As Range と設定されています。

変化対象のセルが単独の場合、変化対象のセルの縦位置/横位置の値(何行目/何列目)は
TargetRow
Target.Column
で取得できるのですが、
変化対象のセルが複数の場合、変化対象セルの縦位置/横位置を取得するには
どのように記述したら良いのでしょうか?

例えば具体的な操作例として、
複数セル(A1~E2)を選択し、キーボードの「Del」キーにより値をクリアしたときの
縦位置(1~2)および横位置(A~E)の値を取得する方法は
どのようなマクロの記述になるのでしょうか?

助言いただけると助かります。
よろしくお願いいたします。

スポンサーリンク
[返信 1] Re : セル位置の縦/横の値の取得について
投稿者 : てらてら     投稿日時 : 2025/10/07(Tue) 20:57:00
こんにちは。

>変化対象のセルが複数の場合、変化対象セルの縦位置/横位置を取得するには
>どのように記述したら良いのでしょうか

そもそもTargetには、セルのコレクション(配列)が入っていると考えた方が良いです。
以下のように、Targetを For Each in で受けてやると、個々のセルが取り出せます。

列の配列、行の配列を取得したければ、以下のようにリストアップして必要なら重複を削除する処理を加えて仕上げます。
(重複の削除は面倒なので省略しました,,,)

それと、Ctrを押しながら選択すると歯抜けの範囲も選択できるので1つのブロックだけとは限りません。
参考にしてみてください。


Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range
    Dim sRow As String
    Dim sCol As String
    
    For Each rng In Target
        Debug.Print rng.Address
        sRow = sRow & "," & rng.Row
        sCol = sCol & "," & rng.Column
        
    Next rng
    
    Debug.Print sRow
    Debug.Print sCol
    
End Sub

[返信 2] Re : セル位置の縦/横の値の取得について
投稿者 : agalinman     投稿日時 : 2025/10/08(Wed) 08:22:43
てらてらさん

ご回答、感謝いたします。
For Each inで該当セルの位置を全て引っ張り出すということで、理解できました。
この方法で解決できそうです。

ありがとうございました。

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2025-10-11 05:50:10 )
タイトルとURLをコピーしました