• ベストアンサー

エクセル 「コメント」の背景に画像を配置する

在庫商品を検索する表を作っています(Excel 2003です)。 検索の条件を入力すると(B4、B6)、D~Fの列に検索結果が表示されます。 この時、F列に呼び出された「商品画像のパス」から画像を見る際、クリックしてブラウザを立ち上げて確認するのではなく、もっと簡単にザーっと見られないかと思っています(実際の表は250行あり、確認する画像が多い時がありますので)。 そこで、セルにマウスを合わせるだけで表示される「コメント」の背景に画像を配置できないかと考えましたが、そのつど変わる検索結果にどうやって対応させたらよいのか分かりません。 ―――――――――――――――――――――――――――――― コメントの編集  →色と線   →塗りつぶし(色)    →塗りつぶし効果     →図      →図の選択(※1) ―――――――――――――――――――――――――――――― ここ(※1)の「ファイル名」に式?を設定するなどして、検索結果によって変化する画像を呼び出す方法はあるでしょうか。 もしくは難しいマクロの設定などが必要でしょうか…(マクロは初心者です)。 ご存知の方がいらっしゃいましたら、教えてください。 また、特に「コメント」にこだわってはおりませんので、他の方法やヒントなどを教えていただけたら嬉しいです。 どうぞよろしくお願いいたします。

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

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

#5のコメントに対してですが、その様な場合は、Vlookupで引っ張ってきた、元のファイル名の方を処理対象にしてください。 例えばVlookupで取得したファイル名のリストがB列にあるとして、C列のハイパーリンク関数の入ったセルにコメントをつけるとしたら、下記の様に出来ます。iの範囲は、適当に大きめに設定して下さい。 Sub setCommentToHyperLinks2() Dim myRange As Range Dim i As Long For i = 2 To 100 Set myRange = ActiveSheet.Range("B" & i) If UCase(Right(CStr(myRange.Value), 4)) = ".JPG" Then makeThumbnail myRange.Value, "C:\test.bmp" With myRange.Offset(0, 1) .ClearComments .AddComment .Comment.Shape.Fill.UserPicture "C:\test.BMP" End With End If Next i End Sub その次のコメントについては、どの様な現象かちょっと理解できません。

yooko0108
質問者

お礼

mitarashi様 度々申し訳ありません。 教えていただいた通りやったところ、できました! 最初はなかなかうまくいかなくて…。 (もちろんこちらのつまらないミスです) ファイルを作り直したり色々と試していたのでお礼が遅くなりました。 すみません。 仕事で活用させていただきます。 この度はどうもありがとうございました。

その他の回答 (5)

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

#4の続きです。setCommentToHyperLinksを実行すると、アクティブシートに存在するJPEG画像へのハイパーリンクが入ったセルにコメントを設定し、コメントにその画像のサムネイルを貼り付けます。 Sub setCommentToHyperLinks() Dim myRange As Range Dim item As Hyperlink For Each item In ActiveSheet.UsedRange.Hyperlinks If UCase(Right(item.Address, 3)) = "JPG" Then makeThumbnail item.Address, "C:\test.BMP" Set myRange = item.Parent With myRange .ClearComments .AddComment .Comment.Shape.Fill.UserPicture "C:\test.BMP" End With End If Next End Sub Private Function makeThumbnail(ByVal SrcFileName As String, ByVal DstFileName As String) As Boolean Dim udtInput As GdiplusStartupInput Dim EncoderId As Guid Dim lngToken As Long Dim pSrcImage As Long Dim pDstImage As Long Dim lngStatus As Long udtInput.GdiplusVersion = 1 If GdiplusStartup(lngToken, udtInput, ByVal 0&) <> 0 Then Exit Function End If lngStatus = GdipLoadImageFromFile(ByVal StrPtr(SrcFileName), pSrcImage) If lngStatus = 0 Then lngStatus = GdipGetImageThumbnail(pSrcImage, 160, 120, pDstImage, 0, ByVal 0&) GdipDisposeImage pSrcImage End If If lngStatus <> 0 Then GdiplusShutdown lngToken Exit Function End If CLSIDFromString ByVal StrPtr(CLSID_BMP), EncoderId If GdipSaveImageToFile(pDstImage, ByVal StrPtr(DstFileName), EncoderId, ByVal 0&) = 0 Then makeThumbnail = True End If GdipDisposeImage pDstImage GdiplusShutdown lngToken End Function

yooko0108
質問者

補足

mitarashi様 お礼が遅くなりまして申し訳ありません。 2件もご提案いただき、また簡略化やアレンジまでして下さったとのことで大変恐縮です。どうもありがとうございます。 No.4~5のご回答を早速コピーしてそのまま使わせていただいたところ、みごとにコメントが表示され画像を見ることができました!すばらしいです…。 ですが、テストとして作った表では全く問題なく作動したのですが(通常通り「挿入」→「ハイパーリンク」でリンクを一つずつ挿入)、実際の表ではうまくいきませんでした。 ■実際の表 1、【在庫一覧】から条件に合うものが「VLOOKUP関数」で呼び出される 2、このままだと‘テキスト’の状態ですので、隣の列に「HYPERLINK関数」を設定してリンク化しています  ※質問に明記しておりませんでした。申し訳ありません。 相対パスでなく絶対パスを呼び出すようにしてみたり…色々とやってみたのですが解決できませんでした。 もしまだこちらをご覧になっておられましたら、原因を教えていただけますでしょうか。どうぞよろしくお願いいたします。 (お時間がありましたら…) 始めにうまくいっていた「テストの表」ですが、何度か試しているうちに最初にコメントに呼び出した画像しか表示されなくなってしまいました。 もしお気づきの点がありましたらヒントを教えていただたら嬉しいです。

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

#2です。フランス製クラスは敷居が高かろうと、単独で実行できる様に、shiraさんという方の某掲示板での回答を簡略化&アレンジして、使わせていただきました。簡略化しても2000文字に収まらないので、宣言部と関数部に分けて投稿します。サムネイル機能を用いているので、画質は先のコードより劣ります。 Private Type Guid Data1 As Long Data2 As Integer Data3 As Integer Data4(0 To 7) As Byte End Type Private Type GdiplusStartupInput GdiplusVersion As Long DebugEventCallback As Long SuppressBackgroundThread As Long SuppressExternalCodecs As Long End Type Private Declare Function GdiplusStartup Lib "gdiplus" (token As Long, pInput As GdiplusStartupInput, _ pOutput As Any) As Long Private Declare Sub GdiplusShutdown Lib "gdiplus" (ByVal token As Long) Private Declare Function GdipDisposeImage Lib "gdiplus" (ByVal Image As Long) As Long Private Declare Function GdipLoadImageFromFile Lib "gdiplus" (filename As Any, Image As Long) As Long Private Declare Function GdipSaveImageToFile Lib "gdiplus" (ByVal Image As Long, filename As Any, _ clsidEncoder As Guid, encoderParams As Any) As Long Private Declare Function GdipGetImageThumbnail Lib "gdiplus" (ByVal Image As Long, ByVal thumbWidth As Long, _ ByVal thumbHeight As Long, thumbImage As Long, ByVal callback As Long, callbackData As Any) As Long Private Declare Function CLSIDFromString Lib "ole32" (lpsz As Any, pclsid As Guid) As Long Const CLSID_BMP = "{557CF400-1A04-11D3-9A73-0000F81EF32E}"

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

※何故か回答がどこかに行ってしまった様で表示されないので、再送信します。ダブってしまったらすみません。 コメントに画像が貼り付けられるんですね。初めて知りました。アクティブシートの全ハイパーリンクに画像入りコメントを設定するコードです。 http://okwave.jp/qa/q5618881.html の、#3~4あたりで紹介しているGDI+用のクラスを用いて、リサイズしてからコメントに設定しています。(そのままのサイズで貼り付けるととても重いファイルが出来上がると思いますので) そのままのサイズで良ければ、単に改名して保存してから、コメントに設定すればOKです。 Range.Comment.Shape.Fill.UserPicture の引数のファイル名は、constもしくは、string*50といった形でぴったりサイズに宣言した文字列変数でないと、エラーになります。(少なくとも当方のXL2000の場合は) このファイルは読み込んでしまえば、中味が変わっても可なので、使い回ししております。 Sub setCommentToHyperLinks() Dim myRange As Range Dim clGdip As clGDIplus Dim lReturn As Long, blReturn As Boolean Const destFilePath As String = "C:\test.bmp" Dim item As Hyperlink Set clGdip = New clGDIplus For Each item In ActiveSheet.UsedRange.Hyperlinks If UCase(Right(item.Address, 3)) = "JPG" Then clGdip.OpenFile (item.Address) lReturn = clGdip.Resize(160, 120, True, False) blReturn = clGdip.SaveFile("C:\test.bmp", "BMP") Set myRange = item.Parent myRange.ClearComments myRange.AddComment myRange.Comment.Shape.Fill.UserPicture destFilePath End If Next End Sub

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

コメントに画像が貼り付けられるんですね。初めて知りました。アクティブシートの全ハイパーリンクに画像入りコメントを設定するコードです。 http://okwave.jp/qa/q5618881.html の、#3~4あたりで紹介しているGDI+用のクラスを用いて、リサイズしてからコメントに設定しています。(そのままのサイズで貼り付けるととても重いファイルが出来上がると思いますので) そのままのサイズで良ければ、単に改名して保存してから、コメントに設定すればOKです。 Range.Comment.Shape.Fill.UserPicture の引数のファイル名は、constもしくは、string*50といった形でぴったりサイズに宣言した文字列変数でないと、エラーになります。(少なくとも当方のXL2000の場合は) このファイルは読み込んでしまえば、中味が変わっても可なので、使い回ししております。 Sub setCommentToHyperLinks() Dim myRange As Range Dim clGdip As clGDIplus Dim lReturn As Long, blReturn As Boolean Const destFilePath As String = "C:\test.bmp" Dim item As Hyperlink Set clGdip = New clGDIplus For Each item In ActiveSheet.UsedRange.Hyperlinks If UCase(Right(item.Address, 3)) = "JPG" Then clGdip.OpenFile (item.Address) lReturn = clGdip.Resize(160, 120, True, False) blReturn = clGdip.SaveFile("C:\test.bmp", "BMP") Set myRange = item.Parent myRange.ClearComments myRange.AddComment myRange.Comment.Shape.Fill.UserPicture destFilePath End If Next End Sub

  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

[コントロールツールボックス]のイメージを配置する方法があります。 画像を表示させたい場所に Imageコントロールを挿入し、 プロパティの[PictureSizeMode]を fmPictureSizeModeZoom にしてください。 解からない場合は、目的のシートをActiveにして下記 Sub test() を実行。 Sub test()   With ActiveSheet.Range("H4").Resize(6, 3)     .Worksheet.OLEObjects.Add(ClassType:="Forms.Image.1", _                  Left:=.Left, Top:=.Top, _                  Width:=.Width, Height:=.Height) _          .Object.PictureSizeMode = 3 'fmPictureSizeModeZoom   End With End Sub Imageコントロールを挿入したら、そのシートのタブを右クリック[コードの表示]。 シートモジュールが表示されるので以下コピーペースト。 Private Sub Worksheet_SelectionChange(ByVal Target As Range)   Dim s As String   If Target.Column <> 6 Then Exit Sub   If Target.Count > 1 Then Exit Sub   s = Target.Value   With Me.Image1     If Len(s) = 0 Then       .Visible = False     Else       .Visible = True       If Len(Dir(s)) = 0 Then         .Picture = LoadPicture("")       Else         .Picture = LoadPicture(s)       End If     End If   End With End Sub Target.Column = 6 つまりF列 を選択変更するたびに実行されるイベントプロシージャです。 Me.Image1.Picture = LoadPicture(s) ここで選択したセル文字列のファイルを読み込みます。

yooko0108
質問者

お礼

end-u様 いつもお世話になっております。 教えていただいた通りにやってみたところ、できてしまいました。 ・・・すごいです。 実際の表に対応させるにはもう少しかかりそうなので、 ちょっとお時間をいただいて完成させたいと思います。 取り急ぎお礼申し上げます。 ありがとうございました!

関連するQ&A

  • エクセル2003 VBAなのですが

    エクセル2003 VBAなのですが   A   B    C    D    E    F 1 あ   い   う   お   う   123 2 お   さ   え   あ   お   お 3 あ   い   え   お   え   888 上記のような表があるときに 3個以上同じ文字がある場合にセルに色をつけていきたい状況です 上記表でいうと『あ』と『え』と『お』のセルに色をつけたいのです セルには文字列のほかに数字も入っている状況です 単純にCtrl+Fで検索をして『すべて検索』で 出てきたセル全部に色をつける。 それをA1から文字があるところ全部やる と言った事をマクロでやりたいと思っております。 皆様よろしくお願いいたします。

  • 行を二回背景を付けてコピーしたい

    画像のようにB2からB(X)(画像ではB5ですが、実際は400行くらいあり不定です)までをコピーして マクロ1では薄い色でコピーして6列(X行の次の行)マクロ2には濃い色でコピーして10列(2X行の次の行)にコピーしたいのですが、どのようにすればできるでしょうか?

  • エクセルの結果欄の表示

    エクセルの結果欄の表示方法について、教えてください。 画像で表1、表2を貼付けましたが、現段階で私が作成できるものが表1で、目指す完成型が表2です。 [B]列~[F]列までの入力結果を、行ごとに[G]列で表示判定させる表をつくりたいのです。 表示する時のきまりを挙げると、 1. [B]列~[F]列の"-"は無視する 2. ×のみの場合:"確認"と表示させ、ピンク色((2)表の[G13],[G16]) 3. ×と、異なる果実名が混在する場合:"果実名を表示"させ、ピンク色((2)表の[G17]) 4. ×がなく、異なる果実名が混在する場合:"果実名を表示"させ、ピンク色((2)表の[G14],[G18]) 5. 果実名が一つの場合:上記1.~3.に該当しない場合は、果実名を表示させ、セルは無色((2)表の[G12],[G15]) ※3.の場合、×を含んだ表示(×,りんご,すいか)でも構わないが、セルはピンク色 表1ですが、[G2]に IF(COUNTIF(B2:F2,"×"),"確認",CONCATENATE(B2,",",C2,",",D2,",",E2,",",F2)) をいれて、下にコピーし、セルの塗りは、条件付き書式で、"発注"の時にピンク色のパターンをつけるように設定しました。 簡単な関数の組合せができる程度なので、完成型には程遠い状態です。 表2のように仕上がるのがベストなのですが、難しいようであれば、条件にあうセルの色付けを最優先とし、文字の表示はCONCATENATEで繋げたままでも構いません。(表1の白色セルのように) どなたか御教示いただければ、ありがたいです。 よろしくお願いいたします。

  • エクセル フォルダの画像を画像名で検索して貼り付け

    商品リストを作っています。 エクセルシートのC列に商品名が入っています。(6桁の数字&アルファベット。たとえばA00123) フォルダにその商品名をつけた画像がまとまっています。 B列に、その該当する画像を自動的に貼り付けたいのですがどうすればいいですか? 画像数は1000個くらいフォルダに入っています。毎週増えます。 エクセルに載せる数はそのうち半分くらいです。 画像がない場合もあるのでその場合は何かしらのエラーを表示させたいです。 マクロはド初心者です。切り貼りくらいしか出来ません。が、今勉強中です。 検索して下記の方法を見つけたのですが、未だ成功していません。 http://okwave.jp/qa/q2880877.html こちらをALT+F11ででできた画面に張るまではよかったのですが、 実行しようとしても何も出てこず失敗しました。 (他のときは選択する名前が出てくるのですが。Subの後に入っている名前です。このリンクのだとsubがなくて名前がないため、マクロ実行できません) http://okwave.jp/qa/q5890088.html コピペして実行したのですが何もかわりませんでした。 ファイルがおいてある場所は "c:\あるフォルダ\"から "c:\picpic\"にかえました。 私のリストは商品名がB列にあるのですがそれが問題なのでしょうか。 excel2010 windows7 フォルダはマイドキュメントにあります。名前はpicpicです。 何か不足している情報がありましたら教えてください。 よろしくお願いいたします。

  • エクセルマクロでコメントからキーを抽出し選択

    製品のアンケートをまとめたいと思っておりますが、マクロを習いたてのため上手くいきません。 (試行錯誤でいろいろやりましたが、できませんでした。) 1セルにあるコメント(文字列)から複数あるキー検索し、キーの多いものを、そのコメントの結果にしたいです。 ------------------------------------------------ 検索グループと検索キー 検索グループA: ゆるい、かたい、キズ 検索グループB: ゆるい、きれい、はがれ 検索グループC: かたい、よわい、はがれ ※検索グループは全部で、100グループあります。 ------------------------------------------------ コメント1: ゆるいがかたい。 →検索グループA:ゆるい、かたい→2個該当(最大個数)                    →検索グループB:ゆるい →1個該当                    →検索グループC:かたい →1個該当 コメント2: よわいがはがれる。→検索グループA:ゆるい、かたい→0個該当                    →検索グループB:ゆるい →0個該当                    →検索グループC:かたい →2個該当(最大個数) ※コメントは全部で2000件あります。 ------------------------------------------------ よって、コメント1については、”検索グループA”をコメント1の横に表示したい。 コメント2については、”検索グループC”をコメント2の横に表示したい。 どなたかお助けくださいますでしょうか。何卒、よろししくお願いいたします。 (OS:WindowsXP、Excel2003)

  • エクセルの表で条件を指定しての整列

    エクセルの表で条件を指定して整列させようとしています。 よろしくお願い致します。 画像のようにA列の商品名に、B列、C列の2つの条件が付いた商品がありD列に在庫数を入れています。 はじめは「画像C表」のように規則を設定したものに従って並んでいたのですが、操作ミスがあり「画像A表」のように行をバラバラにしてしまいました。 A列の商品名、B列、C列の条件とD列の在庫数の横の並び(1行づつの並び方)は元のままです。 A列の商品名、B列、C列の条件の記入内容は半角全角文字様々です。 「画像B表」のような在庫数だけ入っていない表は存在しています。 これを「画像B表」の整列規則に従って元のように並べ直すのに苦労しています。 例えば定型の表である「画像B表」のA2セルとB2セルとC2セルの値が共通の行の「画像A表」のD2セルの値を「画像B表」のD2セルに並べるという方法が出来ればと思うのですが数式をどう設定してよいのか判らない常態です。 実際の商品数(行数)は10,000程あり日常扱っている商品のためかなり焦っております。 確実に元に戻せればどのような方法でも結構です。 初歩的な内容かもしれませんが、よろしくお願い致します。

  • エクセル マクロ フルパスから画像を読み込む

    数日前からマクロを勉強し始めた初心者です。 下の画像のような表を作っています。 ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ ■Sheet1 …「商品在庫一覧」 ■Sheet2 …「印刷用シート」※必要なものだけをSheet1から呼び出し、印刷用として同じシート上で並べ替える(図では‘行5’から下が印刷範囲です) ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ Sheet2のD列(D1~D3‥)に商品画像のフルパスを呼び出し、「写真を配置」のボタンを押すと、印刷範囲の‘行7’のセルに自動で画像が配置されるようにしたいです(‘あ’のパスの画像を‘い’のセルに)。 画像を配置するような関数はなく、マクロでなければ実現できないということで、似ている条件の構文をアレンジして‥と思ったのですが、マクロのことをきちんと理解できていないためうまくいきません。 ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ ■「D1」のパスから「A7」に画像を配置する構文を教えていただけますでしょうか。 ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ 初歩的なことを聞いてすみません。 完成までの残り時間があまりないもので、質問させていただきました。 どなたかお暇がありましたら、お願いいたします。

  • excelのシートに合わせて背景を貼り付けたい

    エクセルで、スキャナーで読み込んだ表の画像を背景に貼り付けけ、参照しながら入力用の表の加工をもくろんでいるのですがうまくいきません 書式→シート→背景で画像を選ぶと出来るのですが サイズが大き過ぎてシートに合いません 画像を小さくしたのでは潰れてしまい使えません 挿入→図→ファイルからで読み込み 透明な色にしたのでは図の裏のセルが選択できません ワードでは出来るのですが、伝票の入力用などには利用できそうですが、表を作りたいのでエクセルで なんか方法がないかな 教えてください  

  • エクセル 並び替え&画像

    基本となるファイルには シート1の上部に画像がありその下に表があります。 それをシート2の上部に表、画像を表の下というふうに並び替えを行いたいです。 ・並び替え ┏━┳━┳━━━━━┓   ┏━┳━┓ ┃1┃A┃あいうえお┃   ┃1┃A┃ ┃1┃A┃かきくけこ┃ ⇒ ┃2┃B┃ ┃3┃C┃さしすせそ┃   ┃3┃C┃ ┃2┃B┃たちつてと┃   ┃4┃ ┃ ┃5┃D┃なにぬねの┃   ┃5┃D┃ ┃5┃D┃はひふへほ┃   ┗━┻━┛  ┗━┻━┻━━━━━┛  右の表(シート1)を左の表(シート2)のように並び替えがしたいです。 1列目の数字を基準に並び替えるのですが、 飛んでる数字を表示して順に並べたいのです。 3列目以降はいりません。 通常は約50列、約30行あるのですがこれくらい小さいものの応用だと思い、 この小さな表で質問させていただきました。 ・画像の移動 シート1のセルA1~セルE5の大きさの画像があるとします。 この画像をシート2のセルC10~E13に移動して それに合わせて大きさも変更したいです。 最終的にはマクロを組むところまでできるとうれしいのですが、 できる範囲で教えてください、お願いします。

  • Excel 2007で、挿入した画像も並べ替えの対象にしたいです。

    Excel 2007で、挿入した画像も並べ替えの対象にしたいです。 例えば、A列からC列までを使って、Aには商品名、Bには価格、Cにはその商品の画像を配置した場合のことです。 画像を挿入すると、セルの上にのっかっているような状態で、セルとは無関係になってしまいます。 このまま商品を価格順に「並べ替え」をしても、画像はセルの中に入っていないので、画像はついてきません。 Wordの表だと、「行内」にすればセルの中に画像が入り込んでくれるのですが、同様のことはExcelでできますでしょうか? 図のプロパティで「セルに合わせて移動する」にチェックを入れても、並べ替えできませんでした。

専門家に質問してみよう