• 締切済み

緯度経度をエクセルで一括自動変換

例えば以下のように文字数がバラバラの 60進法で表された緯度経度の情報があったとします。 N34'17'31.03 E135'16'32.96 N34'17'44.06 E135'31'18.5 N35'20'44.67 E135'7'3.66 N34'57'25.71 E135'57'41.48 N34'57'25.71 E135'57'41.48 N35'4'59.77 E135'3'2.91 N34'48'55.77 E134'43'41.06 これを一括で変換し、10進法で表したいのです。 文字数がバラバラなので、条件としては区切り文字である 'を利用して変換するしかないと思っています。 (例)10進法にする計算~手動ならば~ N35'4'59.77 E135'3'2.91 ならば、手動でするには N35'4'59.77=35+(4/60)+(59.77/3600) E135'3'2.91=135+(3/60)+(2.91/3600) で導かれます。手動では文字数関係なく '区切りで計算できるので、このような簡単なエクセル計算で 成り立ちます。が、大量にある場合はそれも時間がかかり 厳しい状況です。完全自動化のためには良い関数が浮かびません・・。 どうかご教授くださいませ。 'がPointである事はわかっているのですが。。

みんなの回答

noname#52504
noname#52504
回答No.4

順に処理していけば、さほど難しい部分はありませんが、 手順がやたらと多くなってしまうのが難点ですね。 まず作業列を用いた解決を示します。 ●緯度と経度が同一のセルに入っている場合  ※緯度と経度があらかじめ別のセルに分かれている場合は3から。 元のデータがA列に入っているものとすると、 0.緯度と経度の区切(" ")の位置を探す  B1セル:=FIND(" ",A1) 1.緯度を取り出す  C1セル:=LEFT(A1,B1-1) 2.経度を取り出す  D1セル:=RIGHT(A1,LEN(A1)-B1) ●緯度について 緯度のデータがC列に入っているものとすると、 3.最初の"'"の位置を探す  E1セル:=FIND("'",C1) 4.2番目の"'"の位置を探す  F1セル:=FIND("'",C1,E1+1) 5.度の値を取り出す  G1セル:=MID(C1,2,E1-2) 6.分の値を取り出す  H1セル:=MID(C1,E1+1,F1-E1-1) 7.秒の値を取り出す  I1セル:=MID(C1,F1+1,LEN(C1)-F1) 8.十進法に直す  J1セル:=G1+H1/60+I1/3600  ※経度についても同様です。 ●一発でやってみる 8の数式に7~3の数式を順に代入していけば、 一つの数式にまとめることもできます。 ただし、同じ計算を何度も繰り返すことになりますから、 データの量によっては処理速度に問題が出るかもしれませんし、 保守性も悪くなります。 緯度または経度のデータがC列に入っているものとすると、  =MID(C1,2,FIND("'",C1)-2)+MID(C1,FIND("'",C1)+1,FIND("'",C1,FIND("'",C1)+1)-FIND("'",C1)-1)/60+MID(C1,FIND("'",C1,FIND("'",C1)+1)+1,LEN(C1)-FIND("'",C1,FIND("'",C1)+1))/3600 (Excel2003で動作確認済)

  • age_momo
  • ベストアンサー率52% (327/622)
回答No.3

>完全自動化のためには良い関数が浮かびません・・。 作るのが一番でしょうね。 下に例を書いておきます。(かなり手抜きですが) 使い方は『ツール』⇒『マクロ』⇒『Visual Basic Editer』 editerで『挿入』⇒『標準モジュール』 で出てきた画面に貼り付けてください。 後は普通に関数として呼び出せます。(分類はユーザー定義) 最初のidoには文字列を、次のnewsに0を入れると北緯を、1を入れると東経を返します。 Function 緯度経度(ido As String, news As Boolean) As Double Dim ct As Integer Dim ct1 As Integer For ct = 1 To Len(ido) If Mid(ido, ct, 1) = "E" Or Mid(ido, ct, 1) = "W" Then Exit For Next If news Then ido = Right(ido, Len(ido) - ct + 1) Else ido = Left(ido, ct - 1) End If For ct = 2 To Len(ido) If Asc(Mid(ido, ct, 1)) < 46 Or Asc(Mid(ido, ct, 1)) > 57 Then Exit For Next 緯度経度 = Val(Mid(ido, 2, ct - 1)) For ct1 = ct + 1 To Len(ido) If Asc(Mid(ido, ct1, 1)) < 46 Or Asc(Mid(ido, ct1, 1)) > 57 Then Exit For Next 緯度経度 = 緯度経度 + Val(Mid(ido, ct + 1, ct1 - ct - 1)) / 60 + Val(Right(ido, Len(ido) - ct1)) / 3600 End Function

  • Meowth
  • ベストアンサー率35% (130/362)
回答No.2

VBでSUBを作ればすぐできますよ。

回答No.1

データを選んで、 メニュー「データ」→「区切り位置」で、区切り位置指定ウィザードが立ち上がります。 (1/3)元のデータの形式を「カンマやタブなどの区切り文字によって~」として、 (2/3)区切り文字で「その他」を選び、「'」としてみれば、いかがでしょうか? とりあえず、一括で処理することができます。

関連するQ&A

  • Excelの自動計算で緯度・経度を60進法⇔10進法で相互変換したい

    Excelの自動計算で60進法の緯度・経度を10進法に、 10進法の緯度・経度を60進法に相互変換したいのですが、 計算式をご存知の方はいらっしゃいますでしょうか。 具体的には、 経度139453.5 ⇔ 経度139.759774 といった感じです。 地理の項目で質問して計算方法はわかったのですが、 これをExcelの計算式にしようとしたところ行き詰まりました… http://okwave.jp/qa3217137.html よろしくお願いします。

  • 緯度・経度の値をエクセルで変換したい

    60進法で度(゜)分(')秒(")表記された緯度・経度があります(例えば35゜41'46.23"と130゜22'06"など。ただし秒の小数点以下の数値は10進法)。 これをエクセル関数で10進法(35.69617500と130.36833333)に変換したいのですが,どのようにすればよいでしょうか。また,これを逆に変換するにはどうすればよいでしょうか。 詳しい方,ご教示頂けましたら幸いです。

  • EXCELで、60進法の緯度経度を10進法に変換

    EXCELで、60進法の緯度経度を10進法に変換する計算式を 教えて頂けませんでしょうか? A列には60進法の数値(43.03.41.13)が入っております。 これを10進法に変換してB列に(43.061425)というように自動で 算出されるようにしたいのですが どのような計算式を入れれば求められるのでしょうか? よろしくお願い致します。

  • 桁数の違う緯度・経度を変換するための計算式を知りたい

    例えば、「西新宿1-1」の緯度・経度が、 経度1394206.6、緯度354106.6と書かれていたり、 経度139.702712、緯度35.687415と書かれていたりするのですが、 どのような計算式で変換できるでしょうか。 ちなみにどちらも日本測地系で、 それぞれ別の方法で「西新宿1-1」を検索した結果です。 計算式がわかる方、どうぞよろしくお願いいたします。

  • 経度緯度の小数点表記への変換方法を教えて下さい。

    経度緯度で(E140°43′56.9 N41°45′58.0)という表記を Google MAPSで使えるような小数点表記に変換したいのですが 計算式が分かりません。 また、逆に小数点表記から上記のような表記に戻す式も 分かりましたらご教授下さい。 さらに、小数点表記の経度緯度2地点間の距離を算出する計算式も 分かりましたら合わせてお教え下さいませ。 (計算式が複雑になる場合は、2点間を平面で考えるおおよその 距離でお願い致します。)

  • 緯度、経度から標高を知りたいです。

    多くの地点の緯度、経度のデータがあります。 それぞれの地点の標高を知りたいのですが、何かよい方法はありませんか? 地点の数が多すぎて、GoogleMapや国土地理院のウォッちずを利用して手動で調べるには手間と時間がかかりすぎます。 テキストファイル、csv等にまとめることはできるので、そこから標高を出してくれるソフトがあれば良いのですが。 少しですが、プログラミングができるので、「緯度と経度を指定すると標高が取得できる関数」や、それが入ったdllがあればそちらでも良いです。 どなたかよろしくお願いいたします。 *ソフトはフリーソフトでお願いします

  • 緯度と経度をgeometry型に変換

    位置参照情報ダウンロードサービス http://nlftp.mlit.go.jp/isj/ ダウンロードしたデータを利用して、SQLServerで地図データ(緯度経度)を検索しようと思ってます。 中身は、 都道府県コード,都道府県名,市区町村コード,市区町村名,大字町丁目コード,大字町丁目名,緯度,経度,原典資料コード,大字・字・丁目区分コードとなってます。 以下のURLを参考にして、 http://linyi-zatta.blogspot.jp/2014/02/sqlserver.html geometry型のデータを作成しようとしているのですが、作成できません。 手順は ダウンロードしたCSVファイルを取込テーブルへbulk insert 緯度と経度2つにわかれているfloat型のデータをgeometry型に変換し、別テーブルへ移行 43.041403(カラム名:緯度) 141.31998(カラム名:経度) といった具合に分かれてます。 こちらをgeometry型に変換、取込テーブルからselectしたものを 別のテーブルに移行したいのですが、geometry型でselectできません。 select geography::STGeomFromText('POINT(緯度 経度)',4326)) from 取込テーブル というイメージでできるかなと思ってたのですが、上手く行かず。 直接、値を書くやり方は以下で問題ないのですが。 geography::STGeomFromText('POINT(134.993299 34.647755)',4326)) どう、SQL文を作成すればよいのか、ご教示どうかお願いします。

  • 数百個のhtmlファイルの任意の位置に緯度経度が、

    数百個のhtmlファイルの任意の位置に緯度経度が、 (000.0000000,00.0000000); の形式(経度緯度の順番)で(実際にはそれぞれのファイルに別々の緯度経度が入力されています)記入されているファイルがあります。 この経度と緯度の順番を (00.0000000,000.0000000); と緯度経度の順番に直したいのですが、秀丸エディタを利用して一括で変換させることは可能でしょうか? よろしくお願い致します。

  • 緯度経度 Degree形式の表記について

    緯度経度の表し方としてDMS形式,Degree形式等ありますが、 Degree形式の表記方法について質問させて頂きます。 DMS形式であれば、 (1)緯度:N33 35 42.374 経度:E130 24 21.035 (2)緯度:+33 35 42.374 経度:+130 24 21.035 という表記方法があるかと思います。 Degree形式でも同じような表記の仕方があるのでしょうか? 例えば、 (1)緯度:N33.595103888889  経度:E130.40584305556 (2)緯度:+33.595103888889  経度:E130.40584305556  等です。 Degree形式では+,-,N,S,E,W等をつけずに表すものだと思っているのですが・・・。 疑問に感じましたので、質問させて頂きました。 また、その他表記の形式があれば、それも知りたいです。 ご存知の方いらっしゃいましたら、教えてください。 よろしくお願い致します。

  • 緯度・経度の値が10進数で 35.68952904

    緯度・経度の値が10進数で 35.68952904385192 139.6917324140688 を示しています。 手元のコンパスが60度の方向を示していて、 この方向に1m進んだ場合、緯度・経度の値はどのようになりますか?できれば計算過程なども教えていただきたいです よろしくお願いします