dポイントプレゼントキャンペーン実施中!

Excelで複数ある点と複数ある点のうちの2点間距離の中で最小距離を求めたいです。

A列にx座標、B列にy座標で表される点(A1,B1)〜(A1000,A1000)とC列にx座標、D列にy座標で表される点(C1,D1)~(C1000,D1000)の
中で(点と点の組み合わせは1000点×1000点の1000000通り)距離が最小になるときのその最小距離を別のセルに表示させたいのですがどのようにすれば良いか教えてください。お願い致します。

A 回答 (2件)

VBAマクロでやるとこんな感じですね



<以下VBAコード>
Sub minlen()
  Dim Testsheet1 As Worksheet
  Set Testsheet1 = ThisWorkbook.Worksheets(1)
  Dim ans As Double
  Dim buf As Double
  With Testsheet1
    ans = 1000000
    For i = 1 To 10
      For j = 1 To 10
        buf = VBA.Sqr((.Cells(i, 1) - .Cells(j, 3)) ^ 2 + (.Cells(i, 2) - .Cells(j, 4)) ^ 2)
        If ans > buf Then
          .Cells(1, 5) = .Cells(i, 1)
          .Cells(1, 6) = .Cells(i, 2)
          .Cells(1, 7) = .Cells(j, 3)
          .Cells(1, 8) = .Cells(j, 4)
        End If
      Next
    Next
  End With
End Sub
    • good
    • 1

まず、前提として、2点間の距離を求めることはできますか?



できるのであれば、配列数式にして返る値から最小値を拾えばよい。
 A1:A10+B1:B10
のように配列の計算をするやり方です。
(この場合、A1+B1からA10+B10までの結果を返す)
ただしこのままでは配列の一番初めの値の計算結果しか表示されない。

配列数式はちょいと特殊な確定方法が必要になる。
普通は ”Enter” キーを押したり ”Tab” キーを押したりしてアクティブなセルを変えることで確定しますが
(”Ctrl+Enter”でアクティブセルを変えない方法もある)、
配列数式は必ず "Ctrl+Shift+Enter” という操作で確定する必要がある。
すると、数式は
 {=A1:A10+B1:B10}
のように大括弧で囲まれる。
なお、この大括弧を手で入力しても配列数式にはならないので注意が必要。

ただし、このままでは配列の中の一番初めの値だけが表示される。
そこで最小値をMIN関数で求める
 =MIN(A1:A10+B1:B10)
こんな感じ。
あとは ”Ctrl+Shift+Enter” で確定すれば良い。



・・・
まあ、質問者さんはこんな能書きはいいから、とにかく答えだけ教えろと言いたいのでしょう。
 =MIN(SQRT(POWER(ABS(A1:A1000-C1:C1000),2)+POWER(ABS(B1:B1000-D1:D1000),2)))
どうぞ。
不要な関数も混ぜてますが、このままでもちゃんとした結果が返りますよ。
(数式の説明用に混ぜています。意味を読み取ってくれると嬉しいな……でも不要なんだよね)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!