- ベストアンサー
Excel-VBAでExif情報を取得する方法
- Excel-VBAを使用してExif情報を取得する方法について説明します。
- Exifタグ IDの略称、日本語名称、英語名称一覧を紹介します。
- サンプルコードを使用してExif情報を取得する方法を学びます。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 当方、ギブアップ組である事をお忘れ無く。 提供させていただいた情報を参考に、ご自分で作成するか、紹介したブログの作者にお願いしてみるか、clGDIplusに頼ってください。 誤解がある様ですが、clGDIplusはDLLやActiveXではなく、VBAのコードですので、エクセルのブックに含まれるものです。インストールの必要はありません。(高機能過ぎて大きいのが難ですが) GDI+自体は、MicrosoftがWindowsに組み込んであって、アプリケーションが利用しているものですので、よほど古いPCでない限りWindowsに含まれています。 clDGIplusで、ご希望の情報の内、最後に変更した日時以外は取得できます。普通はデジカメ内の画像をデジカメで編集する事はないと思いますので、問題にならないかと思います。 Sub readData() Dim clGdip As ClGdiPlus Set clGdip = New ClGdiPlus With clGdip .OpenFile "C:\CIMG0001.JPG" Debug.Print .GetExifData(TagImageWidth), .GetExifData(TagImageHeight) Debug.Print .GetExifData(TagEquipMake) Debug.Print .GetExifData(TagEquipModel) Debug.Print .GetExifData(TagDateTimeOriginal) Debug.Print .GetExifData(TagDateTimeDigitized) End With Set clGdip = Nothing End Sub
その他の回答 (4)
- mitarashi
- ベストアンサー率59% (574/965)
#1~3です。 お示しの情報だけでは、Exif情報は読めない様に思います。 詳細なExifの構造はこちら http://park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif.html#AboutExif 撮影日時をVBAで読み取る例 http://blog.livedoor.jp/hamu1962/archives/50978551.html ご参考まで。
補足
お世話になっております。 ・「VBAで撮影日時を取得する」は「clGdi32/clGdiPlus」無しのコードでした。 非力な私にも内容を理解する事ができ感謝しています。 ・「詳細なExifの構造」…紹介有難うございました。 お世話になっておきながらあつかましい質問なのですが、 次の様なExif内容をVBAでリストアップするコードを御紹介いただければ有難いのですが ----------------------------------------- TagNo TagName Format CompoNo Desc. 0x010e ImageDescription ascii string この画像についての説明が入ります… 0x010f Make ascii string カメラのメーカー名を示します… 0x0110 Model ascii string カメラの機種名を示します… 0x0132 DateTime ascii string 20 この画像が最後に変更された日時… 0x9003 DateTimeOriginal ascii string 20 オリジナル画像が撮影された日時… 0x9004 DateTimeDigitized ascii string 20 画像が撮影後にデジタル化された日時… ----------------------------------------- 宜しくお願いいたします。
- mitarashi
- ベストアンサー率59% (574/965)
#1です。何度も済みません。URLがおかしくなっていますので、参考URLに再掲させていただきます。
- mitarashi
- ベストアンサー率59% (574/965)
#1です。 関数名が変でしたね。もともと、撮影日時を「秒」まで読んで、エクセルシートに写真とセットで貼り付けたくて始めたものです。 当時のコードをちょこっといじったもので、その名残です。ご笑納下さい。
- mitarashi
- ベストアンサー率59% (574/965)
直接の回答ではありません。直に読むのを断念したら(昔の自分です...)ご参考になさってください。 GDI+を用いると、Exif情報が取得できます。 これはWindowsXP頃から標準で備わっている機能ですので、たいていの環境で使用できます。 APIをVBAから使う日本語の情報は乏しいですが、下記で紹介されているクラスを用いると簡単です。 ソースは自由に読めます(但し、コメントは仏語)ので、必要な部分だけ自分で構築する参考にもなります。 http://www.f3.dion.ne.jp/~element/msaccess/AcTipsFrmGdiClass.htm 下記のようなコードで、画像サイズその他の情報が容易に取得できます。 Sub readDate() Dim clGdip As ClGdiPlus Set clGdip = New ClGdiPlus With clGdip .OpenFile "C:\CIMG0001.JPG" Debug.Print .GetExifData(TagImageWidth), .GetExifData(TagImageHeight) End With Set clGdip = Nothing End Sub エクセルで使うには、 1.VBEからインポートします。 2.クラスの最初の方の、#Const Access = TrueをFalseに変更します。 3.Microsoft Forms 2.0 Object Libraryに参照設定します。 4.下記定数を足してやる必要がありました。 Private Const fmPictureSizeModeClip = 0 Private Const fmPictureSizeModeStretch = 1 Private Const fmPictureSizeModeZoom = 2 なお、当方xl2000で試しています。ご参考まで。
補足
お世話になっております。 VBAで試みたのですが「ClGdiPlus」が、 ----------------------------------- Dim clGdip As clgdiplus コンパイルエラー: ユーザ定義型はは定義それていません ----------------------------------- で、立ち往生…#2回答に従い「clgdi32.zip/clgdiplus.zip」を取り合えずダウンロードしました。 が、まだ適用していません、思案中「他のパソコンにもこのオプションが必要になるため汎用性に欠けるのでは!?」にてたじろいでいます。 何れにしろ非力にて結果を出すには日にちが掛かりそうです…
お礼
ANo.5> 誤解がある様ですが、clGDIplusはDLLやActiveXではなく、VBAのコードですので、---インストールの必要はありません。 ご指摘により次の事に気が付きました…「clGdiPlus.cls」をインポートする事で問題は解決しました。 ---------------------------------------- clGdi32 と clGdiPlus とは何か clGdi32 と clGdiPlus は、ともに VBA 用の画像処理クラスです。 ---------------------------------------- ■clGdiPlus ダウンロード http://arkham46.developpez.com/articles/office/clgdiplus/ OfficeのすべてのバージョンのモジュールclGdiPlus clsの形式を指定します。 v2.0の(11/01/11) ---------------------------------------- ■エクセルで使うには、 1.VBEから「clGdiPlus.cls」インポートします。 2.クラスの最初の方の、#Const Access = TrueをFalseに変更します。 3.参照設定「Microsoft Forms 2.0 Object Library」にチェックを入れます。 又は、場所: C:\Windows\System32\FM20.DLL を直接参照します。 4.下記定数を足してやる必要がありました。 Private Const fmPictureSizeModeClip = 0 Private Const fmPictureSizeModeStretch = 1 Private Const fmPictureSizeModeZoom = 2 ---------------------------------------- 私は、xl2007,xl2003で試みました。 この度はご教示ほんとうに有難うございました。 今後とも宜しくお願いいたします。 以上