• ベストアンサー
  • 困ってます

マクロの疑問

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を選んでも全く移動しないのはなぜでしょうか。 なにか落とし穴がありそうで。。。 よろしくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数4
  • 閲覧数147
  • ありがとう数4

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

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

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

質問者からの補足

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

関連するQ&A

  • エクセルvba  (ByVal Target As Range)について

    シートのイベントプロシージャーが Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub となりますが (ByVal Target As Range)部分は何なのでしょうか? 何のためにあるのかわかりません。 Private Sub Worksheet_SelectionChange() End Sub としたらエラーが返ってきました。 理由を教えてください。 よろしくお願いします。

  • エクセル マクロを利用して繰り返して入力する方法

    マクロでA1B1C1D1E1F1セルに入力しF1入力後A2B2C2D2E2F2と 下方向へ繰り返し800行くらいまで入力し、それとB列はスキップしたいのですが下記の方法で別々のシートでは うまくいくのですが同じシ-ト内ではエラ-になってしまいます 次の行への移動 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 7 Then Cells(Target.Row + 1, 1).Select End If End Sub B列のスキップ Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Range("G1") <> "" Then If Target.Column = 2 Then Target.Offset(0, 1).Select End If End If End Sub どなたかご存じの方教えて下さい

  • Excel VBA 他のシートに演算結果を入れたい

    例えば、A&#65374;Dというシートのいずれかのo1セルに数値を入力すると、演算結果がp1に入る場合。 A&#65374;Dのどのシートでもo1に入力したら、Z!p1にp1の値を放り込みたいのです。 で、以下のようなコードを書いたのですが、上手くいきません。 因みに、セルの移動方向はオプションで「右方向」に設定してあります。 ※結果としてセルの移動を認識していないのか、まったく無反応です。 ※Range("Z!$P$1") =… の行にブレークポイントを設定しても、引っかかりません。 何が悪いのかお教え頂ければ幸甚です。 >違うシートには代入できない… ってことでしょうか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$P$1" Then Range("Z!$P$1") = Range("$P$1") End If End Sub ※なお、出典元のSubは以下の様なもので、正常に動作していました。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$A$1" Then Range("B1") = Range("B1")+1 End If End Sub

その他の回答 (3)

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

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

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

#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 でどうですか。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

  • 回答No.1
noname#123709

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • 複数のセルを選択しているかを取得するプロパティは?

    SelectionChangeイベントで 複数のセルを選択しているかを取得するプロパティってないのでしょうか? 今は、 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Len(Target.Address) > 5 Then MsgBox "複数のセルが選択されています" End If End Sub こうしていますが、行数が多くなると文字も多くなってしまうので、このコードでは対応できません。 Rangeオブジェクトに何個セルが入ってるかを知る方法はありますか? ウォッチのTargetのcellsを見ても、どう見ればいいのかわかりません

  • VBAでエラートラップがうまくいきません。

    VBAで次のようなプロシージャを実行してみました。 Private Sub Worksheet_SelectionChange(ByVal Target As Range)   If Target.Value = " " Then          ~コード~   END IF END SUB すると複数のセルが選択されるとエラーがでます。そこで次のようにしてみました。 Private Sub Worksheet_SelectionChange(ByVal Target As Range)   On Error GoTo エラー処理   If Target.Value = " " Then     On Error GoTo 0           ~コード~   END IF   EXIT SUB エラー処理:   EXIT SUB END SUB ところがこれでもやっぱりIF文のところでエラーがでます。 当方初心者でなぜエラーがでるのかわかりません。 わかりやすくご教授ください。 よろしくお願いします。

  • エクセル マクロ 追加したいのですが・・

    Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$A$2" Or Target.Address = "$A$3" Or Target.Address = "$A$5" _ Or Target.Address = "$A$6" Or Target.Address = "$A$8" Or Target.Address = "$A$9" _ Or Target.Address = "$A$11" Or Target.Address = "$A$12" Or Target.Address = "$A$13" Then Worksheets(Target.Value).Visible = True Worksheets(Target.Value).Select Else End If End Sub これで選択するとシートに飛ぶようにしているのですが 記載がまだのところもあり、空白の時 押してしまうとエラーが出てしまいます 空白の時は反応しないようにしたいのですが どうすればいいでしょうか?

  • エクセルのカーソル移動 横スクロールを最後の入力列まで

    エクセルのカーソル移動について エクセルシートのコードはどこから貼り付け出来るのですか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Taget.Column=11 Then ActiveCell.Offset(1,-10).Select End If End Sub

  • カーソルを動かしたときは発動させたくありません

    エクセルの Worksheet_SelectionChangeイベントで --------------------------------------------------------- Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$A$1" Then MsgBox "$A$1です" End If End Sub --------------------------------------------------------- のコードを標準モジュールに書いて、A1セルをクリックすると、MsgBoxが表示させますが、 B1セルから、キーボードの「→」キーを押してA1に移動してもMsgboxが表示されてしまいます。 クリックした時はマクロを発動させたいのですが、カーソルを動かしたときは発動させたくありません。 そんな事は可能でしょうか?

  • マクロについて

    マクロ初心者です。 エクセルのマクロで下記は何を示しているのでしょうか。 困っているのでもなんでもないのですが、周りにマクロが判る人がまったく居ないので質問させてもらいます。 Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) End Sub

  • エクセル マクロ

    C15に="田中"&TEXT(A15,"m.d") C15に田中8.31と表示されてます 別のシート作成し 田中8.31 と名前を付けておきます C15を押した時に飛ぶように設定しようとしたのですが うまくいかないのですが どうしたらいいでしょうか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$C$14" Or Target.Address = "$C$15" Then Worksheets(Target.Value).Visible = True Worksheets(Target.Value).Select Else End If End Sub Worksheets(Target.Value).Visible = True ここの部分でうまくいかなくなります

  • VBA マクロの削除について教えてください

    VBEのWorksheet上にある、下記のコードが消えません。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub 全選択して、Deleteするのですが、消しても復活しています。 これ以上方法が思いつかないので、ご教示をおねがいします。

  • エクセルVBAで Cancel=Trueの使い方

    Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub Cancel = True MsgBox "キャンセルしました" End Sub Private Sub Worksheet_Deactivate() Cancel = True MsgBox "キャンセルしました" End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) Cancel = True MsgBox "キャンセルしました" End Sub 以上のように使ってみましたが、どれも「キャンセルしました」とメッセージは出るものの、直前の操作(入力、シート切替、セル移動)はキャンセルされませんでした。 どこが間違っているのでしょうか?

  • SelectionChangeイベント 文字列エラ

    エクセルvbaなのですが セルをクリックしたときに、該当する値ならメッセージを表示させる際に Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Value = 1Then MsgBox "" End If End Sub ならエラーにならずに動くのに Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Value = "運賃" Then MsgBox "" End If End Sub のように文字列にすると、型が一致しません。 と言うエラーになります。 If Target.Value = "運賃" Then の時でも、空白セルや数値が入ったセルをクリックした際はエラーになりません。 どのような型にすればいいのでしょうか? 実際、「運賃」と言う値が入ってるセルをクリックしても同じエラーが発生します。