電子書籍の厳選無料作品が豊富!

作業シートに下記のコードを設定しております。
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range("$C$5")) Is Nothing Then
If Range("$C$5").Value = "都市計画内" Then
Call 新築手続き必要
End If
End If
End Sub
コードは一つの指定セル値の指定文字が表示されるとマクロ「新築手続き必要」が実行されます、
複数の指定セル値に指定文字が表示された時にマクロ「新築手続き必要」が実行できる方法を教えてください。
例えば
C5="都市計画区域内"
且つ
G5="3月31日以前"
且つ
I5="4月01日以降"
以上の場合にマクロ「新築手続き必要」が実行できる方法を教えてください。
よろしくお願いいたします。

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

  • 先ほどは回答をありがとうございました。
    私の質問が不足しておりまして、
    先ほど教えて頂いたコードを
    同じ作業シートに各セル値を変更して、何個か設定したいのですが、例えば
    Dim checkRanges As Variant
    checkRanges = Array("C5", "E5", "G5", "I5")
    Dim isTargetChange As Boolean
    isTargetChange = False
    Dim checkRange As Variant
    For Each checkRange In checkRanges
    If Not Intersect(Target, Range(checkRange)) Is Nothing Then
    isTargetChange = True
    Exit For
    End If
    Next
    「文字数の関係で何回かに分けます」

    「エクセルのVBAコードについて教えてくだ」の補足画像1
    No.1の回答に寄せられた補足コメントです。 補足日時:2025/01/20 15:09
  • If Not isTargetChange Then Exit Sub
    If Range("C5").Value = "都市計画区域内" And _
    Range("E5").Value = "階数:2階以上・面積:200㎡を超" And _
    Range("G5").Value = "3月31日以前" And _
    Range("I5").Value = "4月01日以降" Then
    Call 新築手続き必要
    End If

      補足日時:2025/01/20 15:10
  • 二つ目のコード
    Dim checkRanges As Variant
    checkRanges = Array("C5", "E5", "G5")
    Dim isTargetChange As Boolean
    isTargetChange = False
    Dim checkRange As Variant
    For Each checkRange In checkRanges
    If Not Intersect(Target, Range(checkRange)) Is Nothing Then
    isTargetChange = True

    No.1の回答に寄せられた補足コメントです。 補足日時:2025/01/20 15:10
  • Exit For
    End If
    Next
    If Not isTargetChange Then Exit Sub
    If Range("C5").Value = "都市計画区域内" And _
    Range("E5").Value = "階数:2階以上・面積:200㎡を超" And _
    Range("G5").Value = "4月01日以降" Then
    Call 新築手続き必要
    End If
    を設定すると先ほど添付しました、エラーメッセージが表示されてしまいます。
    解決方法を教えて頂きたいのですが、
    別質問を行った方がよろしいでしょうか。
    よろしくお願いします。

      補足日時:2025/01/20 15:12
  • 申し訳ありません、
    自身で、解決できました。
    ありがとうございました。

      補足日時:2025/01/20 17:26

A 回答 (1件)

Private Sub Worksheet_Change(ByVal Target As Range)


On Error Resume Next

' チェックするセル範囲を配列で定義
Dim checkRanges As Variant
checkRanges = Array("C5", "G5", "I5")

' 変更されたセルがチェック対象のいずれかであるか確認
Dim isTargetChange As Boolean
isTargetChange = False
Dim checkRange As Variant
For Each checkRange In checkRanges
If Not Intersect(Target, Range(checkRange)) Is Nothing Then
isTargetChange = True
Exit For
End If
Next

' チェック対象のセルが変更されていない場合は、処理を終了
If Not isTargetChange Then Exit Sub

' 全ての条件を満たしているか確認
If Range("C5").Value = "都市計画区域内" And _
Range("G5").Value = "3月31日以前" And _
Range("I5").Value = "4月01日以降" Then

Call 新築手続き必要
End If
End Sub
この回答への補足あり
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
ご親切にコードを教えていただきまして、ありがとうございます。
上手くできました。
感謝いたします。

お礼日時:2025/01/20 09:03

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

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


おすすめ情報

このQ&Aを見た人がよく見るQ&A