• ベストアンサー

Worksheet_SelectionChangeについて

Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim GYO As Long ' 8列目のみを対象とする If Target.Column <> 8 Then Exit Sub Else GYO = Target.Row End If ' 8列目が空欄でなければ計算処理を呼び出す(引数は選択行) If Cells(GYO, 8).Value = "" Then Exit Sub Else: Call KEISAN(GYO) End If End Sub という方法で8列目のセルをクリックするとフォームが立ち上がるようにしているのですが、ドラッグによる範囲選択でも8列目が含まれているとフォームが立ち上がってしまいます。 単一セルの選択時のみにするにはどうしたらいいでしょうか。 それとすべてのシートにこのマクロを書いているのですがworkbook全体でやることはできないのでしょうか? Workbookのところにこのコードを入れてもうまくいきませんでした。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

#1のja7awuさん、失礼します。 '#' 8列目のみを対象とする '#If Target.Column <> 8 Then この部分を、 If Target.Column <> 8 Or Target.Count > 1 Then 「Or」とすればよいと思います。排他的条件ですから、And ではないはずですね。 つまり、どこの列でも、Target.Count = 1 の時は、Exit Sub にならないのですから。

nanasupra
質問者

お礼

ありがとうございます。 単一セルの選択時のみになりました。

その他の回答 (2)

  • taocat
  • ベストアンサー率61% (191/310)
回答No.3

こんにちは。 既に回答は出てますが・・・。(^^;;; ワークブックのSheetSelectionChangeイベントに -------------------------------------------- Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)  Dim Gyo As Long  With Target    If .Count > 1 Then Exit Sub    If .Column <> 8 Or .Value = "" Then Exit Sub      Gyo = .Row      Call KEISAN(Gyo)  End With End Sub ------------------------------------------------ 変数Gyoがこれだけしか使用しないのであれば、変数Gyoは入りませんね。    Call KEISAN(.Row) また、KEISANの方でシート名も必要なら    Call KEISAN(Sh, Gyo) とかでしょうか。 以上です。

nanasupra
質問者

お礼

ありがとうございます。 ずいぶんシンプルにできるんですね。 GYOはモジュールで使いますのでこのままです。

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.1

If Target.Count > 1 And Target.Column <> 8 Then のようにすればよいと思います。 > workbook全体でやることはできないのでしょうか? ThisWorkbookクラスのSheetSelectionChangeイベントに記述すればいいと思います。 つまり、 Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) に記述します。 なお、どのシートからのイベントからは、引数 Sh で認識できます。 あと余分なことですが・・・ > Else: Call KEISAN(GYO) ここだけマルチステートメントですか。チョット体裁良くないのでは? Else   Call KEISAN(GYO) とした方が、読みやすいですよ。

nanasupra
質問者

お礼

ありがとございます。 体裁も重要ですね。 workbook単位でできました。

関連するQ&A

専門家に質問してみよう