• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ExcelVBAでi緯度と経度から距離を測りたい)

ExcelVBAで緯度と経度から距離を計測する方法

このQ&Aのポイント
  • 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が返されます。解決方法を教えてください。

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

ANo.2です。 > Excelでの結果は#NAME?が返されました。 > > またエディターでブレイクポイントを打っても止まりませんでした。 こちらの環境(Excel2010)では、正常に値を返しますしブレイクポイントも効きます。 コードは標準モジュールに入れていますか?あと、Excelのバージョンは何でしょう?

koba28
質問者

お礼

mt2008さま ありがとうございます。 出来ました。 私の環境はExcel2010で標準モジュールにも書いておりましたが 先ほどまでできませんでしたが今、できました。 お騒がせしてすいませんでした。 ありがとうございます。

その他の回答 (2)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

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

koba28
質問者

補足

mt2008さま ありがとうございます。 教えていただいた関数を実行してみました。 Excelでの結果は#NAME?が返されました。 またエディターでブレイクポイントを打っても止まりませんでした。 すいません。

回答No.1

テストプログラムとデータのサンプルを!

koba28
質問者

お礼

JazzCorpさま ありがとうございました。 原因はよくわかりませんでしたができました。

koba28
質問者

補足

JazzCorp様 ありがとうございます。 ExcelにはX1(緯度1)が35.658599、Y1(経度1)が139.745443。 X2(緯度2)35.71007,、Y2(経度2)139.80948となっております。 ちなみにテストデータで東京タワーとスカイツリーの緯度経度です。 よろしくお願いします。

関連するQ&A

専門家に質問してみよう