プロが教えるわが家の防犯対策術!

マクロ初心者で詰まってしまっています。バージョンは2016です。

コードを利用して二種類のおなじようなマクロを実行したいです。
①1つの範囲内のセルをダブルクリックで2通→1通→ブランク
②(①とは別の)1つの範囲内のセルをダブルクリックで〇→ブランク

2つめのElseIfに対応するIfがないとのエラーが出てしまうのですが、①②をするにはどこを直せばよいのでしょうか。
なお、同様のことを③(別範囲)として行いたいです。

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

Cancel = True
If Intersect(Target, Range("D5:D50")) Is Nothing Then Exit Sub

Select Case Target.Value
Case ""
Target.Value = "2通"
Case "2通"
Target.Value = "1通"
Case "1通"
Target.Value = ""

Cancel = True

ElseIf Not Application.Intersect(Target, Range("E5:E50")) Is Nothing Then Exit Sub

Select Case Target.Value
Case ""
Target.Value = "〇"
Case "〇"
Target.Value = ""

End Select
End Sub

よろしくお願いいたします。

質問者からの補足コメント

  • つらい・・・

    ありがとうございます!
    Elself をご指摘どおり、If Intersect〜に修正してみたところ、今度は最終のところでselect caseに対応するend selectがありませんとのエラーが出てしまいました…。根本的になにかちがうでしょうか。。

    No.1の回答に寄せられた補足コメントです。 補足日時:2019/01/20 16:48

A 回答 (4件)

こんばんは。



インデンティング(indenting-行下げ)をきちんとしていないから、エラーが見つからないのでしょうね。縦で揃えるようにして並べ直しますと、間違っていれば、Select --- End, Select, If ---End if が 揃わなくなります。
アドイン・ツールもあるのですが、今、サイトが開かないようです。
Smart Indenter という名前です。

なるべく、オリジナルを生かしています。
'//
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 If Intersect(Target, Range("D5:E50")) Is Nothing Then Exit Sub
 If Not Intersect(Target, Range("D5:D50")) Is Nothing Then
  Cancel = True
  Select Case Target.Value
   Case ""
    Target.Value = "2通"
   Case "2通"
    Target.Value = "1通"
   Case "1通"
    Target.Value = ""
  End Select
 ElseIf Not Intersect(Target, Range("E5:E50")) Is Nothing Then
  Cancel = True
  Select Case Target.Value
   Case ""
    Target.Value = "〇"
   Case "〇"
    Target.Value = ""
  End Select
 End If
End Sub
    • good
    • 0
この回答へのお礼

助かりました

2文目を足してくださったのですね。
確かに位置がよくわからない状況でした。
使用させて頂きました!

お礼日時:2019/01/20 22:21

最初の、2通1通ブランクを切り替えるSelectに対応するEnd Selectが抜けてますよね。

    • good
    • 0

こんにちは!



Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 If Intersect(Target, Range("D5:E50")) Is Nothing Then Exit Sub
  Cancel = True
   With Target
    If .Column = 4 Then
     Select Case .Value
      Case ""
       .Value = "2通"
      Case "2通"
       .Value = "1通"
      Case "1通"
       .Value = ""
      End Select
    Else
     If .Value = "" Then
      .Value = "○"
     Else
      .Value = ""
     End If
    End If
   End With
End Sub

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

助かりました

有り難うございます。こちらでも出来そうでした!

お礼日時:2019/01/20 22:18

>2つめのElseIfに対応するIfがないとのエラーが出てしまうのですが


単に
If Not Application.Intersect(Target, Range("E5:E50")) Is Nothing Then Exit Sub
で良いはずです。
ひょっとしてやりたいことは
If Intersect(Target, Range("E5:E50")) Is Nothing Then Exit Sub
かもしれませんが。

最初の IF
If Intersect(Target, Range("D5:D50")) Is Nothing Then Exit Sub
の一行で完了していますので
ElseIf にする必要はありません。
この回答への補足あり
    • good
    • 0

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