人生最悪の忘れ物

excelでカレンダーコントロールを設定しました。
ターゲットとしているセルが、結合セルなのですが、うまく表示されません。セルの結合を解除すればうまくいきます。
しかし、ターゲットのセルは結合させておきたいので、何か解決策はありますでしょうか?


以下、コードの内容です。
■フォームコード
Private Sub Calendar1_DblClick()
ActiveCell.Value = Me.Calendar1.Value
End Sub

■シートコード
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address <> "$A$6" And Target.Address <> "$A$13" And Target.Address <> "$A$20" And Target.Address <> "$A$27" Then Exit Sub
UserForm1.Show
End Sub

A 回答 (2件)

これでいけるのではないかという案を。



どのセルが結合しているのかわかりませんが
仮に「A6とB6」が結合されているのでしたら

Target.Address <> "$A$6" を
Target.Address <> "$A$6:$B$6" ←と、

このように変えてみてはいかがでしょうか?
ワイルドカードを使う方法も考えてみましたが
ターゲットが「AA67」などの場合にも
誤作動してしまいそうなのでこの方法を提案します。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
結合しているセルはA6~A8でした。
ご回答を参考に$A$6:$A$8でやってみたところ、うまくいきました!
ありがとうございましたm(_ _)m

お礼日時:2010/02/19 15:54

>ターゲットとしているセルが、結合セルなのですが、うまく表示されません



うまく表示されないとは、UserFormが表示されないということですよね?

例えば、セルA6:A9 が結合されていたら、
Target.Addressは、$A$6:$A$9と結合セルの3セルのアドレスになります。
で、If Target.Address <> "$A$6"
この結果は、常にTRUEになり質問のような結果になります。
結合セルありの場合でもうまくいくようにする方法を2つ提示しておきます。

'●(1)選択したセルの先頭セルのアドレスを比較------- 

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Cells(1).Address <> "$A$6" And _
    Target.Cells(1).Address <> "$A$13" And _
    Target.Cells(1).Address <> "$A$20" And _
    Target.Cells(1).Address <> "$A$27" Then Exit Sub

  UserForm1.Show
End Sub


'●(1)Intersecメソッドを使う方法---------------- 

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

 If Intersect(Target, Range("A6,A13,A20,A27")) Is Nothing Then Exit Sub

 UserForm1.Show
End Sub
'-----------------------------------------

以上です。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
>うまく表示されないとは、UserFormが表示されないということですよね?
→はい、その通りです。
基本的な用語も使えず、お恥ずかしい限りです(><;)
間違っていた理由も分かりやすいご説明のおかげで、理解できました!

>●(1)Intersecメソッドを使う方法
他サイトで参考させていただいたなかに、ご提示のコード表示がありましたが、いまいち理解できず、If Target.Address <> "$A$6"にしていました。
今後も勉強していきます。ありがとうございましたm(_ _)m

お礼日時:2010/02/19 16:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報