ここから本文です

エクセルのVBAで教えてください。 自分がしたいことは、1つのシート内のある2つ...

a90********さん

2019/6/2117:53:09

エクセルのVBAで教えてください。

自分がしたいことは、1つのシート内のある2つのセルの範囲内で、ダブルクリックで1つ目のセルの範囲内では、「□→■→空白」と変化させたい。

2つ目のセルの範囲内では、「●→空白」としたいのですが、いろいろなところを参照しながら以下のようにVBAを書いてみました。

しかし、1つ目の範囲は、反応しているのですが、2つ目の範囲では、反応しません。

VBAの知識がまだまだ未熟で、どこをどう変えればよいかがわかりません。
ご教授いただければと思います。よろしくお願いいたします。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
If Intersect(Target, Range("D6:D300")) Is Nothing Then Exit Sub
Select Case Target.Value
Case ""
Target.Value = "□"
Case "□"
Target.Value = "■"
Case "■"
Target.Value = ""
End Select
If Not Application.Intersect(Target, Range("F6:J300")) Is Nothing Then
If Target.Value = "" Then
Target.Value = ""
Cancel = True
Else
Target.Value = "●"
Cancel = True
End If
End If
End Sub

閲覧数:
35
回答数:
3
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

msk********さん

2019/6/2119:23:15

こんな感じでしょうか。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Range("D6:D300,F6:J300")) Is Nothing Then Exit Sub
Cancel = True
If Target.Column = 4 Then
Select Case Target
Case "": Target = "□"
Case "□": Target = "■"
Case "■": Target = ""
End Select
Else
If Target = "●" Then Target = ""
End If
End Sub

  • 質問者

    a90********さん

    2019/6/2220:27:42

    ありがとうございます。

    2つ目の範囲では「●→空白」だけではなく、空白の時は「●」が入り、「●」の時は空白になるとしたいのです。

    大変申し訳ないのですが、この場合どういうコードを変更または追加をすればよろしいですか。

  • その他の返信(2件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2019/6/24 12:46:57

思っていたことができるようになりました。

早くに回答いただきありがとうございました。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

プロフィール画像

カテゴリマスター

tai********さん

2019/6/2119:42:56

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Range("D6:D300,F6:J300")) Is Nothing Then Exit Sub
Cancel = True
If Not Intersect(Target, Range("D6:D300")) Is Nothing Then
Select Case Target.Value
Case ""
Target.Value = "□"
Case "□"
Target.Value = "■"
Case "■"
Target.Value = ""
End Select
ElseIf Not Intersect(Target, Range("F6:J300")) Is Nothing Then
If Target.Value = "●" Then
Target.Value = ""
End If
End If
End Sub


ただし、 Range("D6:D300,F6:J300")に結合セルがあるとエラーになるので注意が必要です。その場合はコードを書きかえる必要があります。

それと、質問文のコードは2番目の範囲では
空白なら空白
それ以外は●
となっているのが
「●→空白」としたいのですが、と違うのが気になります。上のコードは「●→空白」としたいのですが、に従っています。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

mn1********さん

2019/6/2118:47:47

最初のD6:D300以外をExitSubしているからではないでしょうか?
D6:D300以外のなかにF6:J300は丸々含まれていますのでExitSubdで処理が終了しているのだと思われます。

論理の整理して提示いただければコードは書けますので
整理して見てください。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる