『写真のGPS情報をエクセルに表示したい』(neruneru) エクセルを仕事で使い始めて1年のものです。 通常の操作などは、授業で習ったこともあり一通り出来ます。 今回教えて頂きたいことは、カメラ等で撮影したJPGファイルを、 PCに読み込みし、エクセルに貼り付けした際、別のセルに GPS情報を自動で表記する方法を教えて頂きたく、投稿致しました。 ネットで調べてみたものの、関連する記事を見つけることが出来ませんでした。 宜しければ、ご回答下さいますよう宜しくお願い致します。 < 使用 Excel:Excel2016、使用 OS:Windows10 > ---- JPGにGPS情報が格納されている部分のことをEXIF情報と呼びます。 一応VBAでの読み込み事例がいくつかネット上に公開されているので試してみては如何でしょうか。 例 http://www.btinc.jp/vba_labo/study1.html 補足しておくと、 エクセルに貼り付け→VBAで貼り付け済みの写真のパスを取得→EXIF取得の流れは無理なので VBAでエクセルに写真貼り付け→EXIF取得とする必要があります。 (名無し) 2018/09/28(金) 10:47 ---- ちんたら書いているうちに既に回答がついてますが、その ままアップします。 「EXIF GPS VBA」でネット検索したら参考情報が ヒットするかも。 (カリーニン) 2018/09/28(金) 10:51 ---- 写真の貼り付けを行なうVBAについては、本サイトでも非常によく質問があるので、 全文検索で「AddPicture」をキーワードに新しい順で参考にすると良いかと思います。 (名無し) 2018/09/28(金) 10:58 ---- GPS情報って、かなり面倒な情報なのですよ。 VBAで画像からGPS情報を抜き出すライブラリ?が、数年前は有料で販売されていたくらい。 Excelを使い始めて1年との事ですが、プログラム経験はどれくらいありますか? Excelと同時程度なら、止めておいた方が無難と思います。(ネット上に殆ど情報が無いのは、とても難しいからだと思います) VBAだけで頑張るなら、名無しさんが紹介された先のようなコーディングが必要です。しかし、GPS情報部分は対応していないようだったので、そのままでは目的を果たせません。 GPSのタグへの対応を追加コーディングするか、いっそGDI++を使った方が楽かもしれませんが、それでも茨の道です。 別案として、ファイルのプロパティを見ると、GPS情報が表示されますよね? こちらならもっと楽に実現できそうですが、GPS情報自体が複雑なため、素直に取り出せませんでした。 ファイルのExtendedPropertyの内、以下を得られれば表示できそうかな?、とは思うのですが。 System.GPS.LatitudeDenominator 緯度の分母 System.GPS.LatitudeNumerator 緯度の分子 System.GPS.LatitudeRef N:北緯、S:南緯 System.GPS.LongitudeDenominator 経度の分母 System.GPS.LongitudeNumerator 経度の分子 System.GPS.LongitudeRef E:東経、W:西経 緯度、経度って、12.34'56"78 みたいに表現しますよね。 これが分母・分子それぞれ2要素になって格納されているようなのですが、変数代入がうまくできなかったので、私は諦めました。(回答にあまり時間かけたくないもので…) (???) 2018/09/28(金) 13:56 ---- すいません。 先のHPにはGPS IFDタグを読み込む部分は記載されていなかったのですね。 中には下記のような、かなり完成されたエクセルも公開されていましたが、 私の所有している緯度経度付きJPGからは読み込めませんでしたが一応参考まで。 https://wisteriahill.sakura.ne.jp/CMS/WordPress/2016/09/01/jpg-exif-vba-google-maps/ WIAのPropertiesから取り出すサンプルも多数見つかりましたが、 これも私の環境では読み込めませんでした。 (名無し) 2018/09/28(金) 16:49 ---- 名無しさんの見つけた先を見てみると…、ほほぉ〜、Windows Image Acquisition (WIA) を使ってますね。 どうやらこのオブジェクトだと、サブのタグも含めて、一緒に返してくるのですか。 確かに、どちらも同じ形式ですが、混ぜてIDが重複しないのかな? まぁ、オブジェクト提供しているくらいだし、大丈夫なのでしょうね。 これを利用し、GPS座標以外は無視して書いてみたのが以下になります。 緯度、経度は何時何分が良いのか1つにまとめた方が良いのか判らなかったので、時分表記を残してみました。 Sub test() Dim WIA As Object Dim prop As Variant Dim cw As String Set WIA = CreateObject("Wia.ImageFile") WIA.LoadFile "c:\tmp\test.jpg" For Each prop In WIA.Properties Select Case prop.PropertyID Case 1 cw = cw & IIf(prop.Value = "N", "北緯", "南緯") Case 2 'cw = cw & prop.Value(1) + prop.Value(2) / 60 + prop.Value(3) / 3600 cw = cw & prop.Value(1) & "." & prop.Value(2) & "'" & Replace(prop.Value(3), ".", """") Case 3 cw = cw & vbLf & IIf(prop.Value = "E", "東経", "西経") Case 4 'cw = cw & prop.Value(1) + prop.Value(2) / 60 + prop.Value(3) / 3600 cw = cw & prop.Value(1) & "." & prop.Value(2) & "'" & Replace(prop.Value(3), ".", """") End Select Next prop Set WIA = Nothing If cw <> "" Then MsgBox cw, vbInformation Else MsgBox "GPS情報なし", vbCritical End If End Sub 本来なら、まず &H8825& のタグを探すと、これがGPS情報のオフセットなので、TIFFヘッダ位置にこれを足したアドレスを参照。 するとここもタグ情報になっているので、この個数分ループし、GPS関係のタグIDと一致したなら、データ形式に応じてデータを取り出す、という手間がかかるのですが、WIA使うとすごく簡単になるんですねぇ。 (???) 2018/09/28(金) 18:40