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
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:E5とB3:F10) -
重複している “実際の交差範囲” のアドレス(例:
B3:E5)
ありがとう! なるほど、If Not inter Is Nothing でチェックするのですね、
助かりました。
助かりました。
再度 Copilot 回答
どういたしまして!😊\ お役に立ててよかったです。
そうですね、
Intersect の戻り値が Nothing かどうかを見るのがポイントになります。ーーーーーーー 以下 続く ------------------
感想:思ったより、コードが綺麗で読みやすい、カッコいい!
Copilot を利用することで、綺麗なコードが作れて、
結果、納品する依頼者様への良きサービスとなりますね。
結果、納品する依頼者様への良きサービスとなりますね。