|
ハト さん、みなさん。
こんにちは。
どうも、こういうクイズみたいな構造は苦手です。
こたつねこさんが回答されてるみたいですが、一応。
下記のコードでどうでしょう。速度は考慮してませんし、
合ってるのかわからないから、エラー処理もしてません。
間違っているような気もして恥ずかしいのですが。
Sub test2()
Dim rectA(1 To 4) As Double, rectB(1 To 4) As Double
Dim i As Integer, j As Integer
For i = 17 To 66
'rectA、rectBを四角形とし、それぞれの上下左右の座標値を格納
rectA(1) = Range("F" & i) + Range("I" & i) / 2 '右
rectA(2) = Range("F" & i) - Range("I" & i) / 2 '左
rectA(3) = Range("G" & i) + Range("J" & i) / 2 '上
rectA(4) = Range("G" & i) - Range("J" & i) / 2 '下
For j = i + 1 To 66
rectB(1) = Range("F" & j) + Range("I" & i) / 2 '右
rectB(2) = Range("F" & j) - Range("I" & i) / 2 '左
rectB(3) = Range("G" & j) + Range("J" & i) / 2 '上
rectB(4) = Range("G" & j) - Range("J" & i) / 2 '下
'rectAに対するrectBの位置を検査
'きれいなコードではないけれど、If文でひとつずつ精査していくこととする。
'Bの上がAの下よりも下にあるかBの下がAの上よりも上にあれば重ならない。
If rectB(3) <= rectA(4) Or rectB(4) >= rectA(3) Then
Else
If rectB(2) >= rectA(1) Or rectB(1) <= rectA(2) Then
Else
MsgBox ("交差します")
Exit Sub
End If
End If
Next j
Next i
End Sub
|
|