Minerva Consulting AI & データエンジニア

業務の高速化・効率化の考え方と実装例

複数のセル範囲の重複を調べたい!

Copilotへ質問
みーこ、以下をおしえてください。 知りたいこと: 複数のセル範囲の重複を調べたい  以下の  'ここで、strRng() の重複を調べる 部分のコードをください。
Sub test範囲重複チェック()     
 Dim strRng() As String
    Dim ws As Worksheet
    ReDim strRng(2)
    strRng(0) = "A1:E5"
    strRng(1) = "X10:Y11"
    strRng(2) = "B3:F10"
    Set ws = ThisWorkbook.Sheets("test")
    With ws
     'ここで、strRng() の重複を調べる
    End With
End Sub
 

ここから、Copilotの回答
みーこです。了解!strRng() に入っている 複数のセル範囲(例 "A1:E5")同士が重なっているか を、Intersect を使って判定するのが一番シンプルです。\ (社内データも探しましたが、今回の「範囲重複チェック」そのものに直結する社内資料は見つかりませんでした。)
以下、「ここで、strRng() の重複を調べる」部分としてそのまま貼れるコードを2パターン出します。

✅ パターンA:重複がある組み合わせを Debug.Print で列挙(おすすめ)

With ws
    Dim i As Long, j As Long
    Dim r1 As Range, r2 As Range
    Dim inter As Range
   
    For i = LBound(strRng) To UBound(strRng) - 1
        Set r1 = .Range(strRng(i))
        For j = i + 1 To UBound(strRng)
            Set r2 = .Range(strRng(j))
            Set inter = Application.Intersect(r1, r2)
            If Not inter Is Nothing Then
                Debug.Print "重複あり: (" & i & ")" & strRng(i) & " と (" & j & ")" & strRng(j) _
                            & " / 重複範囲=" & inter.Address(False, False)
            Else
                Debug.Print "重複なし: (" & i & ")" & strRng(i) & " と (" & j & ")" & strRng(j)
            End If
        Next j
    Next i
End With

これで何が分かる?

  • どのペアが重複しているか(例:A1:E5B3:F10
  • 重複している “実際の交差範囲” のアドレス(例:B3:E5

 


ありがとう! なるほど、If Not inter Is Nothing でチェックするのですね、
助かりました。
 
再度 Copilot 回答
どういたしまして!😊\ お役に立ててよかったです。
そうですね、Intersect の戻り値が Nothing かどうかを見るのがポイントになります。
ーーーーーーー 以下 続く ------------------
 
感想:思ったより、コードが綺麗で読みやすい、カッコいい!
Copilot を利用することで、綺麗なコードが作れて、
結果、納品する依頼者様への良きサービスとなりますね。