• ベストアンサー

マクロの疑問

Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address <> "A2" Then Range("A2").Select End If End Sub とすると、どのセルを選んでもA2に飛ぶのに、 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "A3" Then Range("A2").Select End If End Sub とすると、A3を選んでも全く移動しないのはなぜでしょうか。 なにか落とし穴がありそうで。。。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

Range.Addressで返ってくるのは絶対参照文字列なので If Target.Address = "$A$3" Then として下さい あるいは、 If Target.Address(False, False) = "A3" Then とします

nanasupra
質問者

お礼

できました。ありがとうございます。 できたら後者の方の意味を教えて頂けませんか。

nanasupra
質問者

補足

もし、cellで行う場合 If Target.Address = ????? Then Cells(2,1).Select End If となり、?????の部分はどうなるのですか?

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

#2補> >?????の部分はどうなるのですか? (?_?) Addressの結果と比較する部分と、後でcellsによる指定をすることは、関係ないように思いますが・・ #2礼> >後者の方の意味を教えて頂けませんか。 Addressプロパティに引数を渡すことで、返させる結果の形式を替えることができます。 Address(行の絶対参照の指定, 列の絶対参照の指定) です。 Address(False, False) は、 行・列とも相対参照で値を返すことを指定しています。 CELLSの指定のように、行・列インデックスで返すようにするには Address(ReferenceStyle:=xlR1C1) のように指定すると A3の場合"R3C1" の様に値が返ってきます。 (そこからMID等を使って数値を取り出すこともできると思いますが、別の方法もあるので、そういうやり方をするかは微妙) 詳しくはヘルプを参照下さい。

nanasupra
質問者

お礼

丁寧にありがとうございます。 引数を勉強すれば応用が増えそうですね。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

#2の補足質問の回答 素直に Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = Cells(2, "A").Address Then MsgBox "A2" Else MsgBox "xxx" End If End Sub でどうですか。

nanasupra
質問者

お礼

なるほど。 素直に考えていいんですね。 ありがとうございました。

noname#123709
noname#123709
回答No.1

ADDRESSで返ってくる値は$A&3ですので、"A3"の部分を修正すれば 良いかと思いますよ。 前者の方は内容はどうあれ該当無しで動いているだけです。

nanasupra
質問者

お礼

できました。ありがとうございます。 $A&3は$A$3と解釈させて頂きました。

関連するQ&A