Excel-VBAでExif情報を取得する方法

このQ&Aのポイント
  • Excel-VBAを使用してExif情報を取得する方法について説明します。
  • Exifタグ IDの略称、日本語名称、英語名称一覧を紹介します。
  • サンプルコードを使用してExif情報を取得する方法を学びます。
回答を見る
  • ベストアンサー

Excel-VBAでExif情報を取得

次の情報を見つけたのですが、Excel-VBAでの書き方(サンプルコード)を誰かご教授いただけませんか。 宜しくお願いいたします。 ------------------------------------------ http://cachu.xrea.jp/perl/ExifTAG.html Exif 情報一覧 "定義されている Exif タグ ID に対する略称、日本語名称、英語名称一覧を以下に紹介します。 略称はハッシュ %ExifName で記述されます。 例えば $ExifName{ImageWidth} = 256 となります。 日本語、英語の説明はそれぞれ %ExifTAGja、%ExifTAGen に記述されています。 つまり $ExifTAGja{256} = '画像の幅'、 $ExifTAGen{256} = 'Image width' となります。" ------------------------------------------ 以上

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

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.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

sakuraww
質問者

お礼

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で試みました。 この度はご教示ほんとうに有難うございました。 今後とも宜しくお願いいたします。 以上

その他の回答 (4)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.4

#1~3です。 お示しの情報だけでは、Exif情報は読めない様に思います。 詳細なExifの構造はこちら http://park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif.html#AboutExif 撮影日時をVBAで読み取る例 http://blog.livedoor.jp/hamu1962/archives/50978551.html ご参考まで。

sakuraww
質問者

補足

お世話になっております。 ・「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)
回答No.3

#1です。何度も済みません。URLがおかしくなっていますので、参考URLに再掲させていただきます。

参考URL:
http://www.f3.dion.ne.jp/~element/msaccess/AcTipsFrmGdiClass.html
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

#1です。 関数名が変でしたね。もともと、撮影日時を「秒」まで読んで、エクセルシートに写真とセットで貼り付けたくて始めたものです。 当時のコードをちょこっといじったもので、その名残です。ご笑納下さい。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

直接の回答ではありません。直に読むのを断念したら(昔の自分です...)ご参考になさってください。 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で試しています。ご参考まで。

sakuraww
質問者

補足

お世話になっております。 VBAで試みたのですが「ClGdiPlus」が、 ----------------------------------- Dim clGdip As clgdiplus コンパイルエラー: ユーザ定義型はは定義それていません ----------------------------------- で、立ち往生…#2回答に従い「clgdi32.zip/clgdiplus.zip」を取り合えずダウンロードしました。 が、まだ適用していません、思案中「他のパソコンにもこのオプションが必要になるため汎用性に欠けるのでは!?」にてたじろいでいます。 何れにしろ非力にて結果を出すには日にちが掛かりそうです…

関連するQ&A

  • 日本語表示のEXIFビューアー

    Mac用のソフトで日本語表示のEXIFビューアーはないですか? 今使ってるソフトです。 EXIF Viewer PhotoInfo Reveal どれも英語表示です。やはり日本語表示が欲しいです。

    • 締切済み
    • Mac
  • VBAの色名称

    Excel97を使ってます。 VBAで色を指定する際、vbRedなどと記述しますが、他の色の名称が一覧になっているようなものを探しています。 宜しくお願いします。

  • 難し過ぎるエクセルVBAを何故簡単にできないのか?

     エクセルを始めて2年位になりますが、ようやく簡単なマクロを作ったりできるようになりました。  もっと便利な自動化手順をマスターするにはVBAを勉強する必要があります。  少しばかり参考書を読みましたが、英語の記述が非常に分かりにくく、大変奥の深いものと思います。  複雑な条件(条件分岐等)処理をするにはマクロだけではできませんが、VBAはプロシージャ、コード、モジュール、ステートメント等、聞き慣れない用語が多く、あまりにもレベルが高すぎて続きそうもないなぁという気がしています。  万人が理解でき、使いこなせる代物とは思えません。正直、これをマスターされている方はどのように勉強されたのか知りたいほどです。何も知らない素人が独学でマスターできるようには思えません。  私の理想として何で、英語でなく日本語で記述していないのかと腹が立ちます。  MSエクセルも都度、バージョンアップがされていますが、この辺の内容は全然、分かりやすくはなっていないと強く思います。  何故、もっと簡単に、日本語でも操作できるようにはならないものかと怒りを覚えます。  プログラムの構成上、無理なんでしょうか?難しいプロシージャやコード名を覚えなくても、単純なマクロのように操作を記録し、その操作を忠実に実行再現できるようになっておればどんなに『便利なのになぁ』と思います。これで誰でも使えるとマイクロソフトは思っているのでしょうか?  私としては英語記述を入力しなくても、日本語の操作目次があって、この操作したら日本語で解説されるまた、日本語コマンドでコード入力ができるようにして欲しいのです。MSにはそんな気がないのですかね。多くの日本のエクセルユーザーそんな思いは持っていないのでしょうか? 

  • excelのVBAで集計した一覧表を作るには

    はじめましてこんにちは。 excelのVBAを使い下記のようなSheet1の一覧表から必要な項目だけを抜き出し Sheet2のような形式の表に必要な項目を入れ込みたいと思います。 その時に ・納期が変わったら改ページ ・納入場所が変わったら改ページ の条件を付けたいと思いますが VBAを使いSheet1から必要な項目だけをSheet2の表に入れ込むことは可能でしょうか? http://hiyokokko.s78.xrea.com/img/Book1.zip ↑の場所にサンプルの表をアップしてあります。 VBAは詳しくないのでこのようなサンプルの公開されているサイトもしくは 詳しく仕組みを教えていただける方がいましたら宜しくお願い致します。

  • 中国語版のEXCEL マクロ(VBA)

    中国語版のEXCELでマクロを学習しています。 VBAのコードやプロシージャーの入力で数字や式は問題ないのですけれど、日本語を入力すると実行しても文字化けしたりエラーが出てしまいます。 中国語版のEXCELを日本版と同じように使うための何か環境設定などありますでしょうか? また中国語版でのコードの文字入力例の一覧などありましたら、どなたか教えていただけますでしょうか。 よろしくお願いいたします。

  • EVAの日本語名称って何でしょうか?

    ポリ塩化ビニルの代用品でよくEVAというものを見かけます。 以前の質問でエチレンと酢酸ビニルの共重合体だと教えてもらいましたが、 このEVAの日本語名称を知りたいのですが… 例えば PVC=poly vinyl chloride=ポリ塩化ビニル EVA=????=???? 日本語名称がなければ何の英語の略称なのかをもしよかったら教えて下さい。宜しくお願いします。

  • 日本語を意味的に分割するアルゴリズムが知りたいです。

    日本語を意味的に分割するアルゴリズムが知りたいです。 吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。 吾輩 は 猫 で ある 。 名前 ... というように、日本語を最小単位で分割する方法が知りたいのですが、こういうのは簡単にはできないのでしょうか? PerlやVBAで使いたいのですが参考になるサンプルや書籍などございましたら、教えてください。

  • JPEG写真のEXIFを表示、編集できるソフト

    こんにちは JPEG写真のExif情報を表示し、編集するソフトを探しています。 何か、下記の条件に合うものでいいものはないでしょうか? 条件↓ ・フリーであること ・信頼できるもの ・WinVistaで動くもの ・日本語(対応)のもの ・軽いソフトがいいです ・インストール不要のもの(レジストリ等に変更が必要のないもの。それ単体で動作するもの) 条件が多いですがよろしくお願いします。

  • VBAでエンコードができる?

    お世話になってます。 現在、VBAでURLを作成(文字列を連結)して、IEを起動させようとしています。 そこで、日本語(DB名称)をエンコードして、パラメータとして渡したいのですが、エンコードする方法がわかりません。 どなたかわかる方がおられましたら、教えて下さい。 宜しくお願いします。

  • エクセル VBAについて困っていることがあり質問をします。

    エクセル VBAについて困っていることがあり質問をします。 日本語Windows及び日本語エクセルで作成したマクロを英語オンリーのWindows及びエクセルで使用すると下記のエラーで停止してしまします。 Microsoft Visual Basic Compile error on hidden module: sheet1 どうしても仕事で日本語Windowsで作成したマクロを英語オンリーのWindowsで実行させないと行けません。どうか知っている方がいましたら教えて下さい。 情報: (1)シート1にもマクロ(コントロールボックス)から入れたマクロが入っています。 (2)マクロには、日本語の表記があります。