|
確かにクイズですね。
ご参考までに
>ハト さん、みなさん。
>こんにちは。
>
>どうも、こういうクイズみたいな構造は苦手です。
>こたつねこさんが回答されてるみたいですが、一応。
>下記のコードでどうでしょう。速度は考慮してませんし、
>合ってるのかわからないから、エラー処理もしてません。
>間違っているような気もして恥ずかしいのですが。
>
>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
ここは以下の方がいいですね
66行目が最後ですので次の比較対象がありません
For i = 17 To 65
>
> '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
比較に=がありますが、このケースは線が重なります。
線が重なるのはOK?
> Else
> If rectB(2) >= rectA(1) Or rectB(1) <= rectA(2) Then
> Else
> MsgBox ("交差します")
> Exit Sub
このケースだと
Exit Sub
ではありません。プログラムが終了してしまいます
For文の場合は
Exit For
です
もっともこの場合は後続の処理がないので省略可能です
> End If
> End If
>
> Next j
> Next i
>
>End Sub
|
|