Excelのパスが格納されている列の隣の列に画像を自動で表示させたい

このQ&Aのポイント
  • Excelの特定の列に格納されている画像のパスを取得し、隣の列に自動で画像を表示させる方法について教えてください。
  • 画像が格納されていない場合はデフォルトの画像を表示させるようにしたいです。
  • マクロを使用して、画像を自動で表示する方法について詳しく説明してください。
回答を見る
  • ベストアンサー

Excelのパスが格納されている列の隣の列に画像を自動で表示させたい

こんにちは。いつも過去ログを大変参考にさせていただいております。 今回も過去Q&Aを探したのですが、何分コーディングの基本を知らずに回答欄のコピペで済ましているため、自分で問題点を見つけることができません。 <質問内容> Bの列に画像のフルパスを入れてあります。その画像をAの列に自動で表示させるマクロボタンを作りたいのです。B列の2枚目までは上手く写真が表示されます。 しかし、パスが入っていない3列目はC:\NoPicture.jpgを表示させたいのですが、どうしてもそこで止まってしまい、 実行時エラー’1004:’ Picture クラスのInsert プロパティを取得できません。 とういうエラーメッセージが出ます。 正しいコードの書き方をどなたかお教えいただけますでしょうか? <問題点?> 'r.Item(1).Value = s With .Pictures.Insert(s).ShapeRange この辺がうまくいっていないかと・・ <シート内容> 行  列 1  A(画像表示)  B(画像のフルパス)   2             C:\teet01.JPG 3             C:\teet02.JPG 4               (空白) 5              C:\teet03.JPG . . 20               C:\teet19.JPG <マクロ文> Private Sub CommandButton1_Click() Const n As Long = 2 'margin Dim r As Range Dim i As Long Dim x As Double Dim s As String With ActiveSheet    For i = 2 To .Cells(.Rows.Count, 2).End(xlUp).Row '(B)セルは"2", 2行目から順にパスを取得      Set r = .Cells(i, 1).MergeArea '(A)セルは"1"      s = Cells(i, 2).Value      If Dir(s) = "" Then      s = "C:\NoPicture.jpg" '画像が無い場合NoPicture画像を表示    Else     Dir Application.Path    End If    'r.Item(1).Value = s    With .Pictures.Insert(s).ShapeRange    .LockAspectRatio = msoTrue '縦横比固定    x = Application.Min(r.Width / .Width, r.Height / .Height)    If x < 1 Then .Width = .Width * 60 '画像の幅    .Left = r.Left + (r.Width - .Width) / 2 '画像を左右中央に配置    .Top = r.Top + (r.Height - .Height) / 2 '画像を上下中央に配置    End With    Next   End With   Set r = Nothing End Sub

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

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.4

またまた登場、myRangeです。 >顧客が「どうしてもエクセルでデータを欲しい」と言うことなので >恥ずかしながらお伺いしている次第です 質問することはなーんも恥ずかしいことではありませぬよ。 ただ、得た知識は必ずや自分のものにする、 という心意気が必須であることは言わずもがなのことですが。。。 では、本題。 CommandButtonのあるシートで実行するので、 かつ、画像はそのままでセルに嵌るということなので より簡潔なコードにしてあります。 '----------------------------------------  Private Sub CommandButton1_Click()   Dim R As Long   Dim myPic As String   Dim myCell As Range   For R = 2 To Cells(Rows.Count, 2).End(xlUp).Row     Set myCell = Cells(R, 1)     myPic = Cells(R, 2).Value     If myPic = "" Or Dir(myPic) = "" Then       myPic = "C:\aaa\NoPicture.jpg"     End If     With ActiveSheet.Pictures.Insert(myPic).ShapeRange       .Top = myCell.Top + (myCell.Height - .Height) / 2       .Left = myCell.Left + (myCell.Width - .Width) / 2     End With   Next End Sub '------------------------------------- なお、明日、明後日と福岡への旅。 よってこれについての再質問は、今夜23時30分までに願います。 それか、月曜日に。。。 以上です。    

gomez5555
質問者

お礼

myRangeさん! 23:26分です! 出来ました~!ありがとうございます!完璧です! 博多ですか? 明太子、歌舞伎・・良いですね~ 楽しんで行ってきてください。気をつけて! 本当にありがとうございました。 >質問することはなーんも恥ずかしいことではありませぬよ。 >ただ、得た知識は必ずや自分のものにする、 >という心意気が必須であることは言わずもがなのことですが。。。 はい、これからも頑張ります!また何かあったらよろしくお願いします。

その他の回答 (3)

  • myRange
  • ベストアンサー率71% (339/472)
回答No.3

>その消していたものが巨大なNoPictureでした。 当方が、質問者のコードが、ん? と言ったのはそこらあたりも含まれています。   巨大の原因は、    If x < 1 Then .Width = .Width * 60 '画像の幅 これです。 画像の高さ、幅、どちらかが、または、どちらも、セルの高さ、幅より大きかったら、 画像の幅を60倍してますよね?   わぁーーー、巨大!(^^;;; それを含めおかしいと思われる部分など修正したのが下記のコードです。   '---------------------------------------- Private Sub CommandButton1_Click()   Const n As Long = 2  '●もともと未使用   Dim r As Range   Dim i As Long   Dim x As Double    '●今回は使用しない   Dim s As String  With ActiveSheet    For i = 2 To .Cells(.Rows.Count, 2).End(xlUp).Row      Set r = .Cells(i, 1)      s = .Cells(i, 2).Value      If Dir(s) = "" Then s = "C:\aaa\NoPicture.jpg"      With .Pictures.Insert(s).ShapeRange        Range("D1") = .Width / .Height        .LockAspectRatio = msoTrue        If .Width >= r.Width Then .Width = r.Width * 0.9        If .Height >= r.Height Then .Height = r.Height * 0.9        .Left = r.Left + (r.Width - .Width) / 2        .Top = r.Top + (r.Height - .Height) / 2      End With    Next  End With End Sub '------------------------------ 画像の高さ、幅がセルのそれより大きかった場合は、セルの90%にしてあります。 それから、質問提示のコードで、 Set r = .Cells(i, 1).MergeArea と、MergeAreaを使ってますが、 もし結合セルを扱うのであればコードが違ってくることは言うまでもありません。   それと画像全部を無条件にセルの90%にするとかは拙いのでしょうか? 以上です。

gomez5555
質問者

お礼

myRange 様 本当にご教授ありがとうございます! >巨大の原因は、 >   If x < 1 Then .Width = .Width * 60 '画像の幅 >これです。 >画像の幅を60倍してますよね? ご指摘の通りですね。60mmのつもりでした。お恥ずかしい・・ 早速修正していただいたコードでトライしてみましたところ、 まだ、NOPicture.jpgが入らず、 With .Pictures.Insert(s).ShapeRange の位置でデバック?止まってしまいました。 ちなみにご教授いただいた確認方法、コードから直接コピペでB列任意の場所にNoPicture.jpgのパスを入れると,NoPictureを含めて最後の行までちゃんと画像が表示されます。ただその時は(D1)セルになぜか数値1.71969699859619 が入りました。計算結果のような・・ Range("D1") = .Width / .Height とは、写真の大きさを(D1)セルに合わせるというコードという解釈でよろしいでしょうか? 以上のとおりよろしくお願い申し上げます。

gomez5555
質問者

補足

myRange 様 先程のお礼に追加させていただきます。 >Set r = .Cells(i, 1).MergeArea と、MergeAreaを使ってますが、 >もし結合セルを扱うのであればコードが違ってくることは言うまでも>ありません。 結合セルは扱っておりません。 今回の格闘の理由は、MsAccessで商品仕様書管理をしておりまして、顧客が「どうしてもエクセルでデータを欲しい」と言うことなので、恥ずかしながらお伺いしている次第です。OLE画像もテキストと一緒にExcelに貼りつけばこんな苦労しなくて済むのですが・・   >それと画像全部を無条件にセルの90%にするとかは拙いのでしょう>か? ご心配ありがとうございます。 貯めてある画像は、エクセルに貼り付け用にすべて約W60mmxH30mmに統一してありますので、1倍で大丈夫かと存じます。 以上のとおりよろしくお願い申し上げます。

  • myRange
  • ベストアンサー率71% (339/472)
回答No.2

回答1、myRangeです。 質問者のコードはコード的には、ん? という部分もありますが、 そのままでもエラーは出ずに動作するコードです。 で、NoPicture.jpgないのでは?、との回答になりました。 目視での確認では間違いない、ということですから 再確認のため下記を試してみてください、間違いなく存在が確認できますので。 B列の任意のセル(B2が直ぐ確認できる)に 問題の画像のフルパス、"C:\NoPicture.jpg" を入力してマクロを実行する。 存在すれば表示されるはずですよね。 但し、画像のフルパス、C:\NoPicture.jpg は 手入力ではなく、現在のマクロからセルにコピペすること。 以上です。  

gomez5555
質問者

お礼

myRange 様 ご返信ありがとうございます。 明日早速会社でご指示通り確かめてみます。 >質問者のコードはコード的には、ん? という部分もありますが、 >そのままでもエラーは出ずに動作するコードです。 >で、NoPicture.jpgないのでは?、との回答になりました。 コード的には間違っていないとのご指摘ありがとうございます。 このサイト等から見よう見まねで作ったもので・・ もし他の作り方があるようでしたらお教えいただければ大変助かります。

gomez5555
質問者

補足

myRange 様 >但し、画像のフルパス、C:\NoPicture.jpg は >手入力ではなく、現在のマクロからセルにコピペすること。 >以上です。 結果の報告が遅れ申し訳ありません。 上記の方法、また名前を変えたり保存場所を変えたりしていても上手く行きませんでしたが、格闘している間に気づきました。 「NoPictureだけ表示しない」のではなく、「巨大に貼りつく(100倍ぐらい?)」ということです。 実はマクロの終了の仕方もおかしかったのです。 マクロが終了後、他のセルの文字が見えないのでデリートキーで消していました。その消していたものが巨大なNoPictureでした。 つまりNoPictureを張付るコードのところだけ、画像の大きさ指示が抜けているようです。 ご教授いただければ幸いです。

  • myRange
  • ベストアンサー率71% (339/472)
回答No.1

>パスが入っていない3列目はC:\NoPicture.jpgを表示させたいのですが >実行時エラー’1004:’ >Picture クラスのInsert プロパティを取得できません。 >とういうエラーメッセージが出ます。 Cドライブに、NoPicture.jpg という名前の画像がないのでは? チェックてみてください。 以上です。  

gomez5555
質問者

お礼

myRangeさん早速のご返答ありがとうございます。 私も最初にそれを疑って、パスのコピペで確認しており、画像は実在します。

関連するQ&A

  • エクセル マクロ 相対パスから画像を読み込みたいです。

    エクセル マクロ 相対パスから画像を読み込みたいです。 以前、こちらで同様の質問をして無事に解決していただきました。  ↓ 「エクセル マクロ フルパスから画像を読み込む」(回答番号:No.1) http://okwave.jp/qa/q5527067.html この時は、絶対パスから画像を読み込む方法を教えていただいたのですが、 相対パスでも読み込むようにできるでしょうか (相対パスに変えたら画像が表示されませんでした)。 ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ ■表の内容 【Sheet1】…(商品在庫一覧) 【Sheet2】…「印刷用シート」※必要なデータだけをSheet1から呼び出し、印刷用として同じシート上で並べ替える(図では‘行5’から下が印刷範囲です) ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ Sheet2のD列(D1~D3‥)に商品画像の「絶対パス」を呼び出しておき、 「写真を配置」のボタンを押すと、印刷範囲の‘行7’のセルに自動で画像が配置されます (‘あ’のパスの画像が‘い’のセルに)。 今までは自分のパソコンのみでこの表を使っていたのですが 他の複数のパソコンでも使用することになり、 絶対パスではフォルダ名(C:\Documents ~)がそれぞれ違うため 相対パスで読み込めたら…と思っています。 ※並び替えなどがあってD列に直接リンクを貼ることができないので、  別に呼び出しておいた「ファイル名」と「C:\Documents ~(格納場所)」を  CONCATENATE関数でくっつけています。 ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ ■構文(教えていただいたものをそのまま貼り付けています。すみません) Private Sub photo_1() Const n As Long = 2 'margin Dim r As Range 'Loop用 Dim tr As Range '読み込みセル用 Dim s As String 'セル文字列 Dim X As Double '縦横比固定での縮小率 Dim i As Long With Sheets("【Sheet1】") For Each r In .Range("D1", "D3") s = r.Value If Len(s) = 0 Then Exit For i = i + 1 If Len(Dir(s)) > 0 Then Set tr = .Cells(7, i + 2) With .Pictures.Insert(s).ShapeRange .LockAspectRatio = msoTrue X = Application.Min((tr.Width - n) / .Width, (tr.Height - n) / .Height) .Width = .Width * X .Left = tr.Left + (tr.Width - .Width) / 2 .Top = tr.Top + (tr.Height - .Height) / 2 End With End If Next (-略-) End With '念のためファイルを解放 Dir Application.Path Set tr = Nothing End Sub ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ どうぞよろしくお願いいたします。

  • マクロでセルに入れたファイル名の画像を隣のセルに読

    みこむ。 マクロで「セルに入れたファイル名の画像を隣のセルに読み込む」作業をVBA でつくりました。 そのファイル名がないときは、飛ばすようにできないでしょうか。 「 Set myPic = ActiveSheet.Pictures.Insert(sCurDir & myCell.Value & ".JPG")」 ここでとめられてしまいます。    A(No)  B(名)    C(画像) --------------------------------------------- 1   1   test01   D:\画像\teet01.JPG 2   2   test02   D:\画像\teet02.JPG 3   3   test03   D:\画像\teet03.JPG Private Sub CommandButton1_Click() Dim i As Long Dim myPic As Object Dim myCell As Range Dim sCurDir As String sCurDir = ThisWorkbook.Path & "\画像\" For i = 6 To Range("B" & ActiveSheet.Rows.Count).End(xlUp).Row Step 6 Set myCell = Range("B" & i) Set myPic = ActiveSheet.Pictures.Insert(sCurDir & myCell.Value & ".JPG") With myPic .Left = Range("C" & i).Left .Top = Range("C" & i).Top .Width = Range("C" & i).MergeArea.Width .Height = Range("C" & i).MergeArea.Height End With Set myPic = Nothing Next i End Sub

  • エクセル マクロ セルの値が変わった時、自動でマクロを実行させたいです

    エクセル マクロ セルの値が変わった時、自動でマクロを実行させたいです。 以前、こちらで教えていただいたコードで下のような表を作りました。 ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ ■ボタンを押すと画像が配置される表 【Sheet1】…商品在庫一覧表(テキスト情報&商品画像のパス) 【Sheet2】…  1、Sheet1から必要なデータだけを関数で呼び出しておく  2、印刷用の体裁として6行目以下に並び替え(テキスト情報は‘=’で自動配置)、    「画像を配置」ボタンをトリガーにして画像を配置    (※D列の画像のパスを行7に(あ→い))  3、「リセット」ボタンで画像を削除 ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ 社内でとても便利に使っておりましたが 「毎回ボタンを押すのが面倒くさい」という意見があり、 自動で配置できないかと思っています。 やりたいこと ※A1~D3列が変わった時点で(ボタンを押さずに)6行目以下に画像を表示させたい ※「リセット」ボタンを押さなくても、次の更新があった時点で古い画像が削除され  新しい画像が配置されるようにしたい ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ ■現在の構文(教えていただいたものをほぼそのまま貼り付けています。すみません) Private Sub photo_1() '←「画像を表示」ボタン(★) Const n As Long = 2 'margin Dim r As Range 'Loop用 Dim tr As Range '読み込みセル用 Dim s As String 'セル文字列 Dim X As Double '縦横比固定での縮小率 Dim i As Long With Sheets("【Sheet2】") For Each r In .Range("D1", "D3") s = r.Value If Len(s) = 0 Then Exit For i = i + 1 If Len(Dir(s)) > 0 Then Set tr = .Cells(7, i) With .Pictures.Insert(s).ShapeRange .LockAspectRatio = msoTrue X = Application.Min((tr.Width - n) / .Width, (tr.Height - n) / .Height) .Width = .Width * X .Left = tr.Left + (tr.Width - .Width) / 2 .Top = tr.Top + (tr.Height - .Height) / 2 End With End If Next (-略-) End With '念のためファイルを解放 Dir Application.Path Set tr = Nothing End Sub Private Sub photo_2() '←「リセット」ボタン(★) Sheets("【Sheet2】").Pictures.Delete End Sub ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ (★)の部分をなくして自動化したいです。 「Worksheet_Calculate(Change?)」というのでできるらしい… と知って色々やってみましたが、うまくいきません。 お時間がありましたら教えてください。 どうぞよろしくお願いいたします。

  • エクセル貼付けの画像がメール添付で表示されません

    下記のようなVBA(ネット公開されているものを利用させていただいています)を使用し、エクセルに画像を貼り付けています。 画像を貼り付けたエクセルを保存後、メールに添付すると貼り付けた画像が表示されなくなります。 ファイルの容量も少なく、エクセルに取り込んだ画像は、リンク貼り付けになっているのかと考えていますが、取り込んだ画像を埋め込むにはどのようにすればいいでしょうか。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _ Cancel As Boolean) Dim myPic Dim myRange As Range '画像を配置するセル範囲 Dim rX As Double, rY As Double myPic = Application.GetOpenFilename("画像ファイル,*.jpg;*.jpeg;*.gif;*.tif") If VarType(myPic) = vbBoolean Then Exit Sub Set myRange = Target 'このセル範囲に収まるように画像を縮小する Application.ScreenUpdating = False With ActiveSheet.Pictures.Insert(myPic).ShapeRange rX = myRange.Width / .Width rY = myRange.Height / .Height If rX > rY Then .Height = .Height * rY Else .Width = .Width * rX End If .Left = .Left + (myRange.Width - .Width) / 2 '写真を横方向の中央に配置 .Top = .Top + (myRange.Height - .Height) / 2 '写真を縦方向に中央に配置 End With Application.ScreenUpdating = True Cancel = True End Sub

  • Excelセルのサイズに合わせて画像を表示させたい

    Excelのセルの中に、画像ファイル(撮影された写真)のサイズを挿入するときに、セルのサイズに合わせて画像を表示させたいと考え、インターネット上でVBの下記のマクロを探してみました。  セルをダブルクリックすると、画像ファイルの読み出しが行なわれるのですが、セルのサイズにピッタリと合わず、 「列」にわずかに隙間が空いてしまいます・・・。  セルのサイズに合わせる為にはどうすればよいでしょうか?  もう一つ質問させていただきたいのですが、一部の画像は読み出しだ際に、縦にして自動的に表示させたいです。 (これまではExcelの「図の書式設定」で-90度と手入力していました)  何卒宜しくお願い致します。    Excel2003  Visual Basic 6.5 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _ Cancel As Boolean) Dim myPic Dim myRange As Range '画像を配置するセル範囲 Dim rX As Double, rY As Double myPic = Application.GetOpenFilename("画像ファイル,*.jpg;*.jpeg;*.gif;*.tif") If VarType(myPic) = vbBoolean Then Exit Sub Set myRange = Target 'このセル範囲に収まるように画像を縮小する Application.ScreenUpdating = False With ActiveSheet.Pictures.Insert(myPic).ShapeRange rX = myRange.Width / .Width rY = myRange.Height / .Height If rX > rY Then .Height = .Height * rY Else .Width = .Width * rX End If .Left = .Left + (myRange.Width - .Width) / 2 '写真を横方向の中央に配置 .Top = .Top + (myRange.Height - .Height) / 2 '写真を縦方向に中央に配置 End With Application.ScreenUpdating = True Cancel = True End Sub

  • エクセルのマクロで画像を貼り付け 

    画像をエクセルに貼り付ける作業を行っています。 マクロを使いファイル内の画像(約30枚程度)を1列づつスペースを空け 右方向に4枚 1行スペースを空け 3行目の左に戻り その位置よりまた1列づつスペースを空け右方向に4枚・・・・・ これを繰り返しファイル内の画像をすべて 貼り付けたいのですがうまく動作が出来ません。 何卒ご教授の程よろしくお願いします。 ※マクロ Sub EggFunc_pasteDirImage() ' 変数定義 Dim fileName As String Dim targetCol As Integer Dim targetRow As Integer Dim targetCell As Range Dim shell, myPath Dim pos As Integer Dim extention As String Dim isImage As Boolean ' 選択セルを取得 targetCol = ActiveCell.Column targetRow = ActiveCell.Row ' フォルダ選択画面を表示 Set shell = CreateObject("Shell.Application") Set myPath = shell.BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, "C:\Users\0602116.MS\Desktop\") Set shell = Nothing ' フォルダを選択したら... If Not myPath Is Nothing Then fileName = Dir(myPath.Items.Item.Path + "\") Do While fileName <> "" ' ファイル拡張子の判別 isImage = True pos = InStrRev(fileName, ".") If pos > 0 Then Select Case LCase(Mid(fileName, pos + 1)) Case "jpeg" Case "jpg" Case "gif" Case Else isImage = False End Select Else isImage = False End If ' 拡張子が画像であれば If isImage = True Then ' 貼り付け先を選択 Cells(targetRow, targetCol).Select Set targetCell = ActiveCell ' 画像読込み ActiveSheet.Pictures.Insert(myPath.Items.Item.Path + "\" + fileName).Select ' 画像が大きい場合、画像サイズをセル幅に合わせる If Selection.Width > targetCell.Width Or Selection.Height > targetCell.Height Then If Selection.Width / targetCell.Width > Selection.Height / targetCell.Height Then Selection.Height = Selection.Height * (targetCell.Width / Selection.Width) Selection.Width = targetCell.Width Else Selection.Width = Selection.Width * (targetCell.Height / Selection.Height) Selection.Height = targetCell.Height End If End If ' 表示位置をセル中央に移動 Selection.Top = targetCell.Top + (targetCell.Height - Selection.Height) / 2 Selection.Left = targetCell.Left + (targetCell.Width - Selection.Width) / 2 ' 貼り付け先行を+1 targetCol = targetCol + 2 End If fileName = Dir() Loop MsgBox "画像の読込みが終了しました" End If End Sub

  • エクセルVBAでの画像ファイル名取得他

    VBAについての質問です。 http://hp.vector.co.jp/authors/VA033788/kowaza.html#0158 上記をベースに、なんとかVBAを下記のように書き換えました。 Sub LoadPictures3() Dim Fnames As Variant Dim Fn As Variant Dim i As Integer Dim Pic As Picture Dim R As Range Dim R2 As Range Dim Pc As Integer Fnames = Application.GetOpenFilename("図(*.jpg;*.gif),*.jpg;*.gif", MultiSelect:=True) If TypeName(Fnames) = "Boolean" Then Exit Sub Application.ScreenUpdating = False '一枚目の貼付け位置 Set R = Range("B5") Set R2 = R.Offset(35) Pc = 0 For i = 1 To UBound(Fnames) Set Pic = ActiveSheet.Pictures.Insert(Fnames(i)) Select Case (i - 1) Mod 4 + 1 Case 1 Pc = Pc + 1 If Pc >= 2 Then ActiveSheet.HPageBreaks.Add R2 End If With R Pic.Left = .Left Pic.Top = .Top Pic.Width = 300 Pic.Height = 225 End With Case 2 With R.Offset(0, 6) '一枚目に対する二枚目の相対位置 Pic.Left = .Left Pic.Top = .Top Pic.Width = 300 Pic.Height = 225 End With Case 3 With R.Offset(18, 0) Pic.Left = .Left Pic.Top = .Top Pic.Width = 300 Pic.Height = 225 End With Case 4 With R.Offset(18, 6) Pic.Left = .Left Pic.Top = .Top Pic.Width = 300 Pic.Height = 225 End With '次ページの相対位置 Set R = R.Offset(39) End Select Next Application.ScreenUpdating = True End Sub ここで、画像の上の位置(B5のセル位置の画像の場合、B4)に 元々の画像ファイル名を取得し、表記させたいのですが 調べた所、multiselect:=Trueで複数ファイルを選択するときに 画像名が図1、図2に変わっているようで、どうしていいかわかりません。 後、画像を300×225の「変倍」画像にしたいのですが どのようにすれば可能でしょうか? 全くVBAの知識がなく、上のURLを参考に、単語を調べつつ書き換えている状態で、変数やらなんやらの指定・書き方等わかりません。 どなたかご教授願います。

  • EXCELのVBAで画像ファイルを呼び出し

    EXCELのVBAでセルに入力されているファイル名の画像ファイルを呼び出して、 トリミング、縮小→一旦切り取り、メタファイルで貼り付け→セルの真ん中に配置ということを行いたいです。 このようなVBAを組みましたが、bw = .Width でエラーが起こってしまいます。 一旦切り取りして貼り付けするコードを加えたらエラーになりました。 どのようにしたらきちんと希望の形ではりつけることができるでしょうか? よろしくお願いします。 Sub photocalltest() 'セルの値を取得して画像を貼り付け ' ' Dim i As Long For i = 2 To 5 ActiveSheet.Pictures.Insert ("C:\Documents and Settings\temp\" & Cells(7, i).Value & ".jpg") With ActiveSheet.Shapes(ActiveSheet.Shapes.Count) 'トリミング .PictureFormat.CropBottom = 95 .PictureFormat.CropRight = 57.78 .PictureFormat.CropLeft = 59.28 .PictureFormat.CropTop = 100 '縮小 .Height = 197.25 .Width = 162# .Cut 'Cells(7, i).Select ActiveSheet.PasteSpecial Format:="図 (拡張メタファイル)" '貼り付け位置指定 aw = Cells(7, i).Width bw = .Width //ここでオブジェクトが必要ですエラー x = (aw - bw) / 2 .Left = Cells(7, i).Left + x ah = Cells(7, i).Height bh = .Height y = (ah - bh) / 2 .Top = Cells(7, i).Top + y End With Next i End Sub

  • エクセルに画像挿入

    以前の投稿で下記のようなVBAを拝見しました。 実行するとA列に画像ファイル名、B列に画像が縦に配置されます。 これを横に配置するにはどうすればいいのでしょうか? 初心者なので質問不足かもしれませんがよろしくお願いします。 Sub PictAdd() Dim pict As Shape, r As Range With Application.FileSearch  .NewSearch  .LookIn = ThisWorkbook.Path  .SearchSubFolders = False  .Filename = "*.jpg"  If .Execute() > 0 Then   For i = 1 To .FoundFiles.Count    Set r = ActiveSheet.Range("B" & i)    Set pict = ActiveSheet.Shapes.AddPicture _       (.FoundFiles(i), msoTrue, msoFalse, _        r.Left, r.Top, r.Width, r.Height)       pict.OnAction = "PictClick"       r.Offset(0, -1).Value = Dir(.FoundFiles(i))   Next i  End If End With  Columns(1).EntireColumn.AutoFit End Sub

  • マクロでセルに入れたファイル名の画像を隣のセルに読み込む

    こんにちは。宜しくお願いします。 マクロで「セルに入れたファイル名の画像を隣のセルに読み込む」作業を行いたいのですが・・・。うまくいきません。どなたかご助言いただけると助かります。 <内容> セル内には上から1位・2位と順位通りになっており、その順位に入っているセルのファイル名と一致している画像を隣のセルに読み込みたいと思っています。またファイル名と画像が一致しない場合は「No Image」として1枚の画像を貼り付けることもしたいです。    A(順位)  B(名)    C(画像) --------------------------------------------- 1   1位   test01   D:\画像\teet01.JPG 2   2位   test02   D:\画像\teet02.JPG 3   3位   test03   D:\画像\teet03.JPG . . . 10  10位   test10   D:\画像\teet10.JPG <問題点> ・B2の「test01」から順に読み込んでもらいたいのにB1の「名」を読み込んでしまうためエラーが生じる。 ・画像をセルの結合した分の大きさに合わせたいのだが、セル1個分のサイズに表示してしまうためうまく調節できない。 <マクロ文> Private Sub CommandButton1_Click() Dim i As Long Dim myPic As Object Dim myCell As Range For i = 1 To Range("C" & ActiveSheet.Rows.Count).End(xlUp).Row Set myCell = Range("C" & i) Set myPic = ActiveSheet.Pictures.Insert("D:\画像\" & myCell.Value & ".JPG") With myPic .Width = Range("D2").Width .Height = Range("D2").Height End With Set myPic = Nothing Next i End Sub 色々とネット等を見てはいるのですが・・・うまくいきませんでした。 どこをどのようにして代えればうまく動作するか分かる方いらっしゃいましたら教えていただきたいです。宜しくお願い致します。

専門家に質問してみよう