- ベストアンサー
VLOOKUPのように、画像データを参照可能?
社員情報を閲覧できるエクセルを作成しています。 社員IDをA1セルに入力すると、 そのページの 住所 電話番号 生年月日 ・・・といった情報が、vlookupで反映されるように作りました。 「本人写真」も、同様の処理ができないかを検討中です。 これをマクロで実行する方法はありますでしょうか? アドバイスをよろしくお願いいたします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
>社員IDをA1セルに入力すると、 なので Worksheet_Changeイベントで処理を行いました。 >別のマクロ作業に・・・ 「スピナー」によってA1セルの数値が増減したとき ならWorksheet_Changeに変わりCalculateイベントを使われては如何でしょうか Private Sub Worksheet_Calculate() Dim myPath As String, fn As String myPath = "C:\pic\" fn = Range("B6").Value With Me.OLEObjects("Image1").Object .Picture = LoadPicture(myPath & fn) .PictureSizeMode = 3 End With End Sub ※ Worksheet_Changeイベント、Worksheet_Calculateイベントは どの様な時に実行されるプロシージャかは、ご自分で調べてくださいね。
その他の回答 (5)
- watabe007
- ベストアンサー率62% (476/760)
>画像表示前は灰色のもの」で正しいでしょうか? それです。 >頂戴したマクロ(上のプログラムです)名も、image2としました。(→正しい手順でしょうか?) With Me.OLEObjects("Image1").Object ↓ With Me.OLEObjects("Image2").Object と、現状に合わせて直してください。 > (→やはり、正解は拡張子付きの方でしょうか。) 必ず拡張子は付けてください。 >If Target.Address <> "$A$1" Then Exit Sub >このコードの意味を教えていただけますでしょうか。 Private Sub Worksheet_Change(ByVal Target As Range) このコードはChangeイベントと言い、シート上のセルに値を入力すると動くようになっています。 "$A$1" つまり A1セル以外の値の変化には作動しないようになっています。Exit Sub A1セルに何らかの値が入力されるとイメージコントロールに"C:\pic\12.jpg" の情報を与え写真を表示するようになってます。 写真が表示されないのは、たぶんイメージコントロールをシートに貼り付けた時、コントロールボックス内の 三角定規のボタンが押された状態(デザインモード)のままではないでしょうか そうであれば、これを押して、デザインモードを終了してください。 これでも解決しないときは、OSおよびExcelのバージョンも知らせてください。 ちなみに標準モジュールに以下のコードを張り付けて写真表示のテストはできます。 Sub 表示() With ActiveSheet.OLEObjects("Image1").Object .Picture = LoadPicture("C:\pic\12.jpg") .PictureSizeMode = 3 End With End Sub Sub 非表示() With ActiveSheet.OLEObjects("Image1").Object .Picture = LoadPicture("") .PictureSizeMode = 3 End With End Sub
補足
ご丁寧に、一つ一つお答えをいただきまして、本当にどうもありがとうございます。 そして…できました。 ついに表示されるようになりました! 恐れ入りますが、もう一つご相談をさせてください。 このマクロ(シートモジュールというのでしょうか)は、 たしかにA1セルの値を変更したときに、反応してくれます。 ところが、反応してくれるのは私(人間)が直接セルの数字を入力したときだけです。 別のマクロ作業によってA1セルの値が変わった場合や、 「スピナー」(も、A1セルの横に設置したのですが)によってA1セルの数値が増減したときにも、やはり反映してくれないようです。 …もしも「マクロによる数値の変更」や「スピナー操作による値の増減」にも、反応してくれるようになれば、なお美しいと思うのですが、何か方法は有りますでしょうか…。 いろいろとご要望ばかりですみません。 どうぞよろしくお願いいたします!
- MarcoRossiItaly
- ベストアンサー率40% (454/1128)
No.3です。参考URLを載せるのを忘れてしまったので、載せます。何度も申し訳ありません。
お礼
とんでもございません。 URLの補足、どうもありがとうございます!
- MarcoRossiItaly
- ベストアンサー率40% (454/1128)
一般機能の「図のリンク貼り付け」、「名前」と、INDIRECT関数という3つの機能を組み合わせると、ご要望の仕組みができます。説明に骨が折れるので、参考URLを真似してみてください。参考URLのC12セルが「社員ID」を入力するセルに相当します。式の入力時は、「$」マークを忘れないでください。このようにちょっと複雑な参照の仕方をする理由は、図に対してリンクとして式を設定するとき、名前は設定できるが、INDIRECT関数は直接には設定できないからです。社員さんたちの写真集は別シートに用意しておいて、それを呼び出すという形でも良いかもしれません。ま、あまり多数の写真を1ファイル内に貼ったりすると、ファイルが重くて仕方なくなる可能性もありますが…。
お礼
エクセルファイルに写真を貼り付ける方法も良いかとは思いましたが、 今回は、別の方法を採用いたしました。 ですが、このような方法もあるものと、大変参考になりました。 ご回答、どうもありがとうございました!
- watabe007
- ベストアンサー率62% (476/760)
>これをマクロで実行する方法はありますでしょうか? まず、VLOOKUPで写真に使うファイル名(○△.jpg)を取得してください シート上にコントロールツールボックスからイメージコントロールを貼り付けてください。 社員IDはA1セル それにより写真のファイル名が得られるセルをB6としました。 以上の準備がてきたら以下のコードをシートモジュールに貼り付けてください。 (シートモジュール:シートタブを右クリックして[コードの表示]を選択すると現れる画面) A1セルに社員IDを入力するとイメージコントロールに写真が表示されます。 Private Sub Worksheet_Change(ByVal Target As Range) Dim myPath As String, fn As String If Target.Address <> "$A$1" Then Exit Sub myPath = "C:\Documents and Settings\ユーザー名\My Documents\My Pictures\" '写真が保存されているパス fn = Range("B6").Value '実際のファイル名が得られるセルを指定 With Me.OLEObjects("Image1").Object .Picture = LoadPicture(myPath & fn) .PictureSizeMode = 3 End With End Sub
お礼
こちらにもお礼の入力を… あらためまして、どうもありがとうございました… m(__)m
補足
本当にどうもありがとうございます。 現在、取組中ですが、壁に行き当たりました。 再度、質問をさせてください・・。 ・イメージコントロールとは コントロールツールボックスの左下にある「山・空・太陽のアニメーション」のボタンのもの → 画像表示前は灰色のもの」で正しいでしょうか? ・このイメージコントロールとおもわれるものを、何度か削除したり再度作ったりしたため、名前が「image1」ではなく、(プロパティを見てみると、「image2」になっていました。→したがって、頂戴したマクロ(上のプログラムです)名も、image2としました。(→正しい手順でしょうか?) ・ファイル名は「社員番号12」に対して、 A1セルには、12という数値を入力されています。 すると、B6セルには「12.jpg」という表示が出てきます。 (しかし、画像が出てこなかったので、jpgは不要かと考え、B6セルの値を「12」のみにしました。これもダメでした。 (→やはり、正解は拡張子付きの方でしょうか。) ・If Target.Address <> "$A$1" Then Exit Sub このコードの意味を教えていただけますでしょうか。 何か、ここに誤りがある可能性も考えましたので…。 ・ Cドライブ内に「pic」という新規フォルダを作り、その中に12.jpgを保存しました。 したがって、コードも myPath = "C:\pic\" としました。 (これで、問題ありませんでしょうか?) 沢山書いてしまいましたが、 アドバイスを頂けますと幸いです。 本当にどうもありがとうございます。
- malixiang
- ベストアンサー率38% (10/26)
私も、以前EXCELで社員リストを作成しました。 写真をどのような形で保存されているか不明なので 私が作った方法を書きますね。 ■データベースの作成 ・画像は、社員リストのエクセルが保存されているフォルダーに保存する。 ・社員の情報にその画像のハイパーリンクを作成する。 ・ハイパーリンクは、セルで右クリックで出て来ますので該当する画像を選ぶ。 ・表示は、保存アドレスでも名前でも。 ・画像ファイル、社員ID_名前などがいいでしょう。(探しやすいので) ■ID検索用の作成 ・写真以外は、VLOOKUP ・画像は、VLOOKUPとHYPERLINKの組み合わせで表示 =HYPERLINK(VLOOKUP(A1,社員データの範囲,ハイパーリンクの列番号) これで、IDを入力すると、画像のリンクが表示されますのでクリックすれば、画像が表示出来ます。 質問者様は、リンクではなく、画像がそのまま表示させたいのでしょうか? それですと、私は技術不足です。 すみません・・・ ご参考までにして頂ければ幸いです。
お礼
ハイパーリンクの使い方について、参考になりました…。 今回は、画像をそのまま表示したかったので、別の方法を検討していきますが… ご丁寧に、回答をいただきまして、どうもありがとうございました!
お礼
ネット上で、 まして8月のこの時期に、 ここまで迅速に、、、 それも何度もご回答をいただけるとは、驚きとともに感謝をしております。 calculateとchangeについても、理解ができました。 お陰様で、今回、エクセルのマクロについて(シートモジュールというものも含めて)、大変勉強になりました。 そして実際に問題を解決することができました。 今、やってみたところうまく行きました。 ほんとうに本当に、 どうもありがとうございました。