点が多角形の内部にあるか
Sub in_out_check(bs, xx, yy, x1, y1, x2, y2, in_out)
in_out = False
sub_row = bs.Cells(Rows.Count, 1).End(xlUp).Row
For check_row = 2 To sub_row 
    x1 = bs.Cells(check_row, 1) - xx
    y1 = bs.Cells(check_row, 2) - yy
    x2 = bs.Cells(check_row, 3) - xx
    y2 = bs.Cells(check_row, 4) - yy
    If y1 * y2 > 0 Then GoTo bottom
    If x1 < 0 And x2 < 0 Then GoTo bottom
    If x1 + y1 * (x2 - x1) / (y1 - y2) >= 0 Then
        check_count = check_count + 1
    End If
bottom:
Next check_row
If check_count Mod 2 = 1 Then in_out = True
End Sub

■ 説明 ■
 callで呼び出します
  bs 多角形座標が転記されているシート名
  xx 対象点X座標
  yy 対象点Y座標
  x1,y1,x2,y2 線分の端部座標
  check_count 交差回数(奇数ならば多角形内部にある)
  in_out     内部ならtrue 外部ならfalseを返します

  多角形座標をシートに転記した場合で記述してあります。
  メイン部分は代入が終わった後のif文以降ですので
  必要に応じて書き換えてください


■ 追記 ■
 十分な長さを持つ線分と、多角形の各辺が交わる回数が
 ・奇数であれば多角形内
 ・偶数ならば多角形外
 という定理を使用しています。

 点1を原点として、各辺がX軸と交差するかどうかを全ての辺に対して判定し、
 交差した回数を観察して判定させています。
Hino 23:56 2007.01.24 Wed
 署名 
 内容 
      
新しい記事
 題名 
 署名   File
 本文