Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


483 / 13645 ツリー ←次へ | 前へ→

【80106】特定セル範囲のダブルクリックマクロ 猫の毛だらけ 18/8/16(木) 10:28 質問[未読]
【80107】Re:特定セル範囲のダブルクリックマクロ γ 18/8/16(木) 11:31 回答[未読]
【80108】Re:特定セル範囲のダブルクリックマクロ 猫の毛だらけ 18/8/16(木) 11:49 お礼[未読]
【80109】Re:特定セル範囲のダブルクリックマクロ マナ 18/8/16(木) 13:05 発言[未読]
【80110】Re:特定セル範囲のダブルクリックマクロ 猫の毛だらけ 18/8/16(木) 13:56 発言[未読]
【80112】Re:特定セル範囲のダブルクリックマクロ マナ 18/8/16(木) 18:31 発言[未読]
【80113】Re:特定セル範囲のダブルクリックマクロ 猫の毛だらけ 18/8/16(木) 23:20 お礼[未読]
【80114】Re:特定セル範囲のダブルクリックマクロ マナ 18/8/17(金) 19:02 発言[未読]
【80119】Re:特定セル範囲のダブルクリックマクロ 猫の毛だらけ 18/8/19(日) 21:20 お礼[未読]

【80106】特定セル範囲のダブルクリックマクロ
質問  猫の毛だらけ  - 18/8/16(木) 10:28 -

引用なし
パスワード
   いつも拝見させていただいています。
セルA1、B1、C1のどれかをダブルクリックすると
goodのメッセージが表示されるようにコードを書いたつもりですが
errorしか表示されません。
どこがいけないのかお教えください。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim myTarget As Range
Dim myC As String, myR As String
myC = Selection.Column '列選択
myR = 1

Set myTarget = Application.Intersect(Target, Range("A1:C1"))
 If myTarget Is Nothing Then
   Exit Sub
 End If
 
 If Target.Address = "$" & myC & "$" & myR Then
   MsgBox "good"
  Else: MsgBox "error"
 End If
 
End Sub

【80107】Re:特定セル範囲のダブルクリックマクロ
回答  γ  - 18/8/16(木) 11:31 -

引用なし
パスワード
   冒頭にブレークポイントを置いてステップ実行してみてください。
myCは数値ですよ。("A"とか"C"が返るわけではありません)
"$" & myC & "$" & myR ではマッチしませんね。

Target.Row と Target.Columnで判定してはどうですか?

【80108】Re:特定セル範囲のダブルクリックマクロ
お礼  猫の毛だらけ  - 18/8/16(木) 11:49 -

引用なし
パスワード
   ああ,なるほど。

ブレークポイントを置いて
If Target.Address =
にカーソルを持っていくと"$A$1"とか表示されても
実際には対応していないのですね。

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

【80109】Re:特定セル範囲のダブルクリックマクロ
発言  マナ  - 18/8/16(木) 13:05 -

引用なし
パスワード
   ▼猫の毛だらけ さん:

それで納得できたのですか?

>ブレークポイントを置いて
> If Target.Address =
>にカーソルを持っていくと"$A$1"とか表示されても
>実際には対応していないのですね。

そうではなくて、カーソルは、右辺のmyCにあてて確認してください。

>Dim myC As String, myR As String
>myC = Selection.Column

Stringではなく Longです

>セルA1、B1、C1のどれかをダブルクリックすると
>goodのメッセージが表示されるようにコードを書いたつもりですが

そういうことであれば、

>If myTarget Is Nothing Then

Nothingでなければ goodでよいのでは?

【80110】Re:特定セル範囲のダブルクリックマクロ
発言  猫の毛だらけ  - 18/8/16(木) 13:56 -

引用なし
パスワード
   マナ様
ご指摘ありがとうございます。
下記のように書き換えてみました。

矛盾点があればお教えください。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim myTarget As Range
Dim myC As String, myR As Long
myC = Split(Selection.Address, "$")(1) '列アルファベット選択
myR = 1

Set myTarget = Application.Intersect(Target, Range("A1:C1"))
 If myTarget Is Nothing Then
   MsgBox "error"
 Else:
   MsgBox "good"
 End If
End Sub

【80112】Re:特定セル範囲のダブルクリックマクロ
発言  マナ  - 18/8/16(木) 18:31 -

引用なし
パスワード
   ▼猫の毛だらけ さん:

> myC = Split(Selection.Address, "$")(1) '列アルファベット選択

間違いではありませんが、Targetを使えばよいと思います。
myC = Split(Target.Address, "$")(1)

ただ、myC も myR も必要ないのに、なぜ?
myTargetについても、

If Application.Intersect(Target, Range("A1:C1")) Is Nothing Then

とすれば変数を使わなくてもよいです。

あと、必要に応じて
Cancel=True
を追加するとよいと思いました。


 

【80113】Re:特定セル範囲のダブルクリックマクロ
お礼  猫の毛だらけ  - 18/8/16(木) 23:20 -

引用なし
パスワード
   マナ様
ご指摘ありがとうございました。

下記のように修正しました。
Cancel = Trueの意味が分からず、記述場所も?でしたが
イベントのキャンセル(=今回はダブルクリック後のセルの編集状態解除)
と考えてよろしいでしょうか?

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim myTarget As Range

 If Not Application.Intersect(Target, Range("A1:C1")) Is Nothing Then
   MsgBox "good"
   Cancel = True
  
 Else:
   MsgBox "error"
   Cancel = True
 End If
 
End Sub

【80114】Re:特定セル範囲のダブルクリックマクロ
発言  マナ  - 18/8/17(金) 19:02 -

引用なし
パスワード
   ▼猫の毛だらけ さん:

>Dim myTarget As Range

↑は不要です。

'-----

"good"でも"error"でも、Cancelするなら
最後または最初に、Cancel = True を記述すればよいです。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

 If Not Application.Intersect(Target, Range("A1:C1")) Is Nothing Then
   MsgBox "good"
 Else
   MsgBox "error" 
 End If

 Cancel = True

End Sub

'-----


>Set myTarget = Application.Intersect(Target, Range("A1:C1"))
> If myTarget Is Nothing Then
   Exit Sub
> End If

↑最初の質問文のコードのように、
A1:A3以外のときは、なにもしないで終了し
通常のダブルクリック処理をしたいなら、


Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

 If Application.Intersect(Target, Range("A1:C1")) Is Nothing Then
  Exit Sub
 End If
 
 Cancel = True
 'A1:C3をダブルクリックで実行することを以下に記述
 MsgBox "good"

End Sub

'-----
 
> Else:

↑の:は不要です。

>Else: MsgBox "error"

↑は、1行で記述しているので必要だっただけです。

【80119】Re:特定セル範囲のダブルクリックマクロ
お礼  猫の毛だらけ  - 18/8/19(日) 21:20 -

引用なし
パスワード
   マナ様
校正、添削ありがとうございました。
お手数おかけしました。

過去に書いてきたコードの半分ほども無用な文字の羅列だった気がします。
これからは、動作するコードでも文法を練りなおしてスマートに記述できるよう勉強します。

483 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free