重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

チェックボックスではなく、□と■をダブルクリックで交互に表示したいのですが、よく方法が分かりません。※Excel初心者です。

自分なりに調べて下記を試してみてうまくいったのですが、セルの結合した箇所をダブルクリックすると実行時エラーがでてしまいます。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Range("A1:AO300")) Is Nothing Then Exit Sub
Cancel = True
If Target.Value = "□" Then
Target.Value = "■"
ElseIf Target.Value = "■" Then
Target.Value = "□"
End If
End Sub

なにか良い方法はあるでしょうか?

A 回答 (6件)

「If Target.Count <> 1 Then Exit Sub」あたりを最初のほうへ加えればよいと思います。

    • good
    • 0

こんばんは。



マクロコードを書こうか思いましたが、#1さんの解答で間違いはないと思います。どう書いても、似たようなマクロになりますから、それで解決しない場合は、別の要素が含まれている可能性が高いと思います。

うまくいかないのなら、その要件を出していただかないと、解決には至らないと思います。

結合セルというのは、If Target.Value = "□" Then のようには書けないということだけです。簡単に、直したいのでしたら、その質問のコードのプロシージャ部分(Private Sub )の行を除いて、

Target を ActiveCell
に置換すれば、それでマクロは通るはずでする

なお、チェックボックスの代わりにするということになれば、もう少し細かなお話が必要になってくるのではないかと思います。
    • good
    • 0

No.4です。



投稿後気づきました。
セルが結合してあるかどうかの判断は不要だと思います。
前回のコードは消去し↓のコードに変更してください。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Range("A1:AO300")) Is Nothing Then Exit Sub
Cancel = True
With Target(1)
If .Value = "□" Then
.Value = "■"
Else
.Value = "□"
End If
End With
End Sub

どうも失礼しました。m(_ _)m
    • good
    • 0

こんばんは!



結合セルの選択は複数セルを選択しているコトになると思いますので
その複数セルの最初のセルをTargetにしてみてはどうでしょうか?

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim c As Range
Cancel = True
If Target.MergeCells Then '//Targetが結合セルの場合//
Set c = Target(1) '//結合セルの最初のセルを「c」に格納//
Else
Set c = Target
End If
If c = "□" Then
c = "■"
Else
c = "□"
End If
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

細かくご指導ありがとうございました。

無事に解決できました。
お手数おかけいたしました。

精進いたします。

お礼日時:2017/03/17 10:32

ANo1です。



>結合したセルというのは、選択しようとしている□ではない箇所になります。
>選択したい□は単体のセルになっています。
意味がいまひとつわかりません。

ご提示のコードはダブルクリックの際に実行されるようになっていますので、関係ないセルに結合があっても、単体セルをクリックする限りは問題は起きないはずです。
一方で、結合したセルは見掛け上はひとつのセルのように扱われますので、結合セルの範囲内のどこをダブルクリックしてもご提示のコードが実行されます。その際には、ANo1で回答した様なことが起こり得ます。

>そのままCopy and Pasteできる状態での回答だと大変助かります
問題の発生の状況がよくわからなくなってきたので、回答が正しいかどうか確信が持てなくなりましたが、ANo1の回答はそのままご提示のコードの(一部)を差し替えればよいように記したつもりです。
 If Target.Value = "□" Then
  ~~~~
 End If
の内容に1行追加した形となっていますが、その部分を差し替えれば動作すると思うのですが…?


お礼の文を読むと、『単独セルをダブルクリックしても、シート内に結合セルが存在するとエラーになる』という意味に取れますが、そういうことなのでしょうか?
・・・てか、ひょっとして「□」「■」を入れ替えたいのは、ダブルクリックしたセルではなくて、どこかの固定のセルの値を変えたいということなのでしょうか?
あるいは、シート内の(どこにあるかわからない)□か■の値を持つセルを反転させたいということなのか…
その場合、きっかけ(処理をするトリガー)となるのはシートのダブルクリックだけれど、それは単なるきっかけで、クリックする場所(セル位置)は処理する内容とは無関係ということなのでしょうか。


いろいろ、妄想をめぐらせすぎて、わけがわからなくなってきてしまいました。
コードとは関係なく、まず、『なさりたいこと』を明確にしていただければ、もう少しは判断ができるのではないかと思います。
    • good
    • 0
この回答へのお礼

細かくご指導ありがとうございました。
無事に解決できました。
お手数おかけいたしました。

精進いたします。

お礼日時:2017/03/17 10:31

こんにちは



>セルの結合した箇所をダブルクリックすると実行時エラーがでてしまいます。
結合されたセル範囲の場合、Targetに渡されるのは1つのセル範囲ではなく複数のセル範囲になります。
その場合に、
 Target.Value
を参照しようとするとエラーになります。

結合セルの値はその範囲の最初のセルに入っていますので、一旦、単体のセル(Range)に置き換えておいて、以降はそちらを用いるのがわかりやすいのではないでしょうか。
(ダブルクリックしたのが単独セルの場合は、同じセルの参照になります)

例えば、
 Set t = Target.Cells(1, 1) ' 変数tに最初のセルを再取得

 If t.Value = "□" Then
  t.Value = "■"
 ElseIf t.Value = "■" Then
  t.Value = "□"
 End If
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。

ですが、申し訳ありません。
理解出来ません。低レベルですいません。

ちなみに、追記ですが・・・
結合したセルというのは、選択しようとしている□ではない箇所になります。選択したい□は単体のセルになっています。

出来れば、そのままCopy and Pasteできる状態での回答だと大変助かります。不可能なのでしょうか?

初心者で本当に申し訳ないです。
宜しくお願い申し上げます。

お礼日時:2017/03/16 17:15

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