• ベストアンサー

Excelである点に一番近い座標を求めたいのですが

Excelである点に一番近い座標を求めたいのですが 今A列のx座標、B列のy座標で表される点(A1,B1)に距離が一番近い点を C列のx座標、D列のy座標で表される点の集合(C1,D1)~(C1000,D1000)のなかから探して (Cn,Dn)の値をE1、F1に表示させたいのですがどのようにすれば良いか教えてください。 引き続き(A2,B2)に近い点を(C1,D1)~(C1000,D1000)の中から探してE2,F2に表示するつもりです。 それを1000まで繰り返します。 比較する数が多すぎるため私の力ではどうにもなりません。すいませんがご協力お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

(A1,B1)を処理して離れた(E1,F1)に答が出てくるのは見づらくて嫌 なので、あなたの「点の集合(C1,D1)~(C1000,D1000)」はF列とG列 に引っ越してもらいます。(A1,B1)に対応する点は(C1,D1)にだしま しょう。 座標(A1,B1)と、座標の配列(F1:F1000,G1:G1000)の各要素までの距 離の二乗は、index((A1-$F$1:$F$1000)^2+(B1-$G$1:$G$1000)^2,0) という配列で表せます。この配列の中から最小値が何番目にあるの かを見つけて、元の配列(F1:F1000,G1:G1000)から該当する順番の 座標を取り出せばいいわけですね。 最小値はmin関数、何番目にあるのかを見つけるのはmatch関数、配 列から該当する順番のものを取り出すのはindex関数なので、C1は =index(F$1:F$1000,match(min(index(($A1-$F$1:$F$1000)^2+($B1- $G$1:$G$1000)^2,0)),index(($A1-$F$1:$F$1000)^2+($B1-$G$1:$G $1000)^2,0),0)) という感じになるはず。D1はドラッグするだけ。座標が増えたら下 にドラッグしてください。

Fron29
質問者

お礼

ご回答いただきありがとうございます。 丁寧なアドバイス助かります。 早速使わせていただきます。

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

E1に =INDEX(C:C,MIN(IF(($A1-$C$1:$C$1000)^2+($B1-$D$1:$D$1000)^2=MIN(($A1-$C$1:$C$1000)^2+($B1-$D$1:$D$1000)^2),ROW($C$1:$C$1000)))) と記入してコントロールキーとシフトキーを押しながらEnterして入力 右のF1にコピー 下にコピー。

Fron29
質問者

お礼

ご回答いただきありがとうございます。 早速使わせていただきます。

関連するQ&A