Mikeは、Excelワークシートで緯度と経度の値を追跡します。これらは基本的にグリッド上のポイントであるため、マイクは任意の2つの緯度/経度ポイント間の距離を計算したいと考えています。

緯度と経度のペアが実際にはグリッド上の単なるポイントである場合、それらの間の距離を計算するのは簡単です。問題は、それらが実際には球上の点であるということです。つまり、フラットグリッド計算を使用して距離を決定することはできません。さらに、距離を計算する方法はたくさんあります。最短の表面距離、最適な飛行経路(「カラスが飛ぶとき」)、地球を通過する距離、走行距離などです。

明らかに、これは複雑な質問になる可能性があります。利用可能なスペースで、大円距離(「カラスが飛ぶとき」)を決定するためのいくつかの方法を調べてから、他のタイプの計算に関する追加情報の参照を提供します。

最初に理解する必要があるのは、各ポイントの緯度と経度がExcelでどのように表されるかです。それを表現する方法はいくつかあります。たとえば、個々のセルに度、分、秒を入力できます。または、DD:MM:SSのように単一のセルに含めることもできます。どちらの方法でもかまいませんが、数式では異なる方法で処理する必要があります。どうして?緯度と経度をDD:MM:SSとして入力すると、Excelはそれらを内部的に時間値に変換し、その変換を考慮する必要があるためです。

何があっても、緯度と経度をラジアン単位の10進値に変換する必要があります。 3つの別々のセル(度、分、秒)に座標がある場合は、次の数式を使用して、ラジアン単位の10進値に変換できます。

=RADIANS((Degrees3600+Minutes60+Seconds)/3600)

数式では、度、分、秒に名前付きの範囲が使用されます。これらの3つの値を合計度を表す単一の値に変換し、RADIANS関数を使用してこれをラジアンに変換します。

32度、48分、0秒の値で開始すると、数式は次のようになります。

=RADIANS((323600+4860+0)/3600)

=RADIANS((115200+2880+0)/3600)

=RADIANS(118080/3600)

=RADIANS(32.8)

=0.572467995

座標をDD:MM:SSの形式で単一のセル(この例ではセルE12)に格納している場合は、次の数式を使用してラジアン単位の10進値に変換できます。

=RADIANS((DAY(E12)86400+HOUR(E12)3600+MINUTE(E12)*60+SECOND(E12))/3600)

セルE12に32:48:00が含まれているとすると、式は次のようになります。

=RADIANS((186400+83600+48*60+0)/3600)

=RADIANS((86400+28800+2880+0)/3600)

=RADIANS(118080/3600)

=RADIANS(32.8)

=0.572467995

ラジアン単位の座標を使用して、三角関数の式を使用して、球の表面に沿った距離を計算できます。使用できるそのような式はたくさんあります。次の式で十分です。

=ACOS(SIN(Lat1)SIN(Lat2)+COS(Lat1)COS(Lat2)COS(Lon2-Lon1))180/PI()*60

この式では、緯度(Lat1とLat2)と経度(Lon1とLon2)の各座標は、すでに説明したように、ラジアン単位の10進値である必要があります。数式は海里単位の値を返します。この値にさまざまな数式を適用して、必要に応じて他の測定単位に変換できます。

球の表面の距離を計算する式を使用して思いついた値は、わずかに誤った結果をもたらすことを理解する必要があります。どうして?地球は完全な球体ではないからです。したがって、距離は概算と見なす必要があります。もう少し正確にしたい場合は、次の式を使用して海里を決定できます。

=ACOS(SIN(Lat1)SIN(Lat2)+COS(Lat1)COS(Lat2)COS(Lon2-Lon1))3443.89849

この式は、球の半径(180 / PI()* 60、つまり3437.746771)を地球の半径(3443.89849海里)に置き換えます。いずれにせよ、答えは依然としておおよそのものと見なされるべきです。

お分かりのように、距離を計算する式はかなり長いです。計算を行う独自のユーザー定義関数を開発する方が簡単な場合があります。次の関数は、4つの値(度単位の緯度と経度の2つのペア)を取り、結果を海里で返します。

Function CrowFlies(dlat1, dlon1, dlat2, dlon2)

Pi = Application.Pi()

earthradius = 3443.89849  'nautical miles

lat1 = dlat1  Pi / 180     lat2 = dlat2  Pi / 180     lon1 = dlon1  Pi / 180     lon2 = dlon2  Pi / 180

cosX = Sin(lat1)  Sin(lat2) + Cos(lat1) _        Cos(lat2) * Cos(lon1 - lon2)

CrowFlies = earthradius * Application.Acos(cosX)

End Function

緯度と経度、および関連する数学についてのより詳細な議論をご覧になりたい場合は、このサイトで記事の適切な選択を見つけることができます:

http://mathforum.org/library/drmath/sets/select/dm_lat_long.html

あなたのベルトの下で数学を使って、あなたはあなたが使うことができる様々な公式を見始めることができます。このWebページのVBAには興味深いものがあります:

http://www.freevbcode.com/ShowCode.asp?ID=5532

優れた汎用的な議論は、Chip Pearsonのサイト(

)にもあります。

http://www.cpearson.com/excel/LatLong.aspx

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

link:/ excelribbon-ExcelTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます]

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(9512)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice 365のExcelに適用されます。Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります。

link:/ excel-Calculating_the_Distance_between_Points [ポイント間の距離の計算]