- ベストアンサー
ExcelVBAで緯度と経度から距離を計測する方法
- ExcelVBAを使って2か所の緯度と経度から距離を計測したいけれど上手くいかない問題が発生しています。緯度と経度のデータはセルに入っており、VBAを使用して数値データからシリアル値に変換し、ヒュベニの計算式を利用して距離を求めたいです。
- ヒュベニの計算式では、距離=sqrt((M*dP)*(M*dP)+(N*cos(P)*dR)*(N*cos(P)*dR))という公式を使用します。ここで、Pは2点の平均緯度、dPは2点の緯度差、dRは2点の経度差、Mは子午線曲率半径、Nは卯酉線曲率半径です。
- 作成した関数では、緯度と経度の値を代入し、数値データからシリアル値に変換します。その後、ヒュベニの計算式で距離を計算し、結果を返します。しかし、実行するとシリアル値に変換するときにエラーが発生し、#VALUEが返されます。解決方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (2)
- mt2008
- ベストアンサー率52% (885/1701)
Date型変数に文字列を入れようとしてたり、かっこの数が合わなかったりして解りにくかったので、ざっくりと作り直してみました。 ちょっと自信がないですが大体こんな感じで良いんじゃないでしょうか。 Function kyori(X1, Y1, X2, Y2) Dim D As Double Dim P As Double Dim dP As Double Dim dR As Double Dim M As Double Dim N As Double With WorksheetFunction LatitXX1 = (X1 / 180) * .Pi LongiYY1 = (Y1 / 180) * .Pi LatitXX2 = (X2 / 180) * .Pi LongiYY2 = (Y2 / 180) * .Pi P = (LatitXX1 + LatitXX2) / 2 dP = (LatitXX1 - LatitXX2) dR = (LongiYY1 - LongiYY2) M = 6334834 / Sqr((1 - 0.006674 * Sin(P) * Sin(P)) ^ 3) N = 6377397 / Sqr((1 - 0.006674 * Sin(P) * Sin(P))) kyori = Sqr((M * dP) * (M * dP) + (N * Cos(P) * dR) * (N * Cos(P) * dR)) End With End Function
補足
mt2008さま ありがとうございます。 教えていただいた関数を実行してみました。 Excelでの結果は#NAME?が返されました。 またエディターでブレイクポイントを打っても止まりませんでした。 すいません。
- K Kazz(@JazzCorp)
- ベストアンサー率31% (549/1751)
テストプログラムとデータのサンプルを!
お礼
JazzCorpさま ありがとうございました。 原因はよくわかりませんでしたができました。
補足
JazzCorp様 ありがとうございます。 ExcelにはX1(緯度1)が35.658599、Y1(経度1)が139.745443。 X2(緯度2)35.71007,、Y2(経度2)139.80948となっております。 ちなみにテストデータで東京タワーとスカイツリーの緯度経度です。 よろしくお願いします。
お礼
mt2008さま ありがとうございます。 出来ました。 私の環境はExcel2010で標準モジュールにも書いておりましたが 先ほどまでできませんでしたが今、できました。 お騒がせしてすいませんでした。 ありがとうございます。