• ベストアンサー

【エクセル】名称を参照し画像を表示する

いつも大変お世話になっております。 前回【エクセル】元データシートよりマクロで表を複数作成の件、 ご教示いただき、ありがとうございました。 元データシートよりマクロで表を複数作成した後、 各シートごとB1の名称を参照し、それに一致する画像をB5に表示することを 考えています。 いろいろ試してみたもののうまくいかず、質問させていただきました。 よろしくお願いいたします。

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

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.3

課題ブック格納フォルダーの下階層にjpgフォルダーがあり、 ここに拡張子jpgのファイル群があり B2セルに拡張子無しのファイル名が埋まっている前提です。 前提が違えば指摘してください。 Sub Sample1()  Dim JpgPath As String   '画像格納フォルダー  Dim ShCounter As Long   'sheetカウンター  Dim ShCount As Long    'シート総数  Dim JpgFName As String  'JPegファイルフルパス    With ThisWorkbook   JpgPath = .Path & "\Jpg\"   ShCount = .Sheets.Count   For ShCounter = 1 To ShCount    With .Sheets(ShCounter)     JpgFName = JpgPath & .Cells(1, 2).Value & ".jpg" 'ファイル名組立     If .Cells(1, 2).Value = "" Then      MsgBox ("ファイル名の指定がありません。/") & ShCounter & "シート目"      Exit For     End If     If FileExists(JpgFName) = False Then      MsgBox ("ファイルがありません。/") & ShCounter & "シート目"      Exit For     End If     .Select     .Cells(5, 2).Select           '貼り付け位置選択     .Pictures.Insert JpgFName        '貼り付け    End With   Next ShCounter  End With End Sub '//------------------------------------------------------------------------------------------------ '// ファイル有無判定関数 '//------------------------------------------------------------------------------------------------ Function FileExists(ChkFile As String) As Boolean  FileExists = True  On Error GoTo ErrorHandler     ' エラー処理ルーチンを定義  FileDateTime (ChkFile)  On Error GoTo 0          ' エラーのトラップを無効にします。  Exit Function           ' エラー処理ルーチンが実行されないように Sub を終了 ErrorHandler:            ' エラー処理ルーチン  FileExists = False  Resume Next End Function

sachiko555
質問者

お礼

HohoPapa様 ご回答ありがとうございます。参考にし、試してみます。 よろしくお願いいたします。

その他の回答 (3)

  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.4

シート上の画像を貼りかえることを考慮し 画像を貼る前に、 シート上の画像(Shape)を全数削除するようにしてみました。 剥がしたくないShapeがあるようなら指摘してください。 Sub Sample1()  Dim JpgPath As String   '画像格納フォルダー  Dim ShCounter As Long   'sheetカウンター  Dim ShCount As Long    'シート総数  Dim JpgFName As String  'JPegファイルフルパス    With ThisWorkbook   JpgPath = .Path & "\Jpg\"   ShCount = .Sheets.Count   For ShCounter = 1 To ShCount    With .Sheets(ShCounter)     JpgFName = JpgPath & .Cells(1, 2).Value & ".jpg" 'ファイル名組立     If .Cells(1, 2).Value = "" Then      MsgBox ("ファイル名の指定がありません。/") & ShCounter & "シート目"      Exit For     End If     If FileExists(JpgFName) = False Then      MsgBox ("ファイルがありません。/") & ShCounter & "シート目"      Exit For     End If     Do '画像(Shapes)があったら全数削除      If .Shapes.Count = 0 Then Exit Do      .Shapes(1).Delete     Loop     .Select     .Cells(5, 2).Select           '貼り付け位置選択     .Pictures.Insert JpgFName        '貼り付け    End With   Next ShCounter  End With End Sub '//------------------------------------------------------------------------------------------------ '// ファイル有無判定関数 '//------------------------------------------------------------------------------------------------ Function FileExists(ChkFile As String) As Boolean  FileExists = True  On Error GoTo ErrorHandler     ' エラー処理ルーチンを定義  FileDateTime (ChkFile)  On Error GoTo 0          ' エラーのトラップを無効にします。  Exit Function           ' エラー処理ルーチンが実行されないように Sub を終了 ErrorHandler:            ' エラー処理ルーチン  FileExists = False  Resume Next End Function

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

>いろいろ試してみたもののうまくいかず、 どういうVBAコードを作って、うまく行かなかったのか、質問に書くべきだろう。 その点を書かないで、思わせぶりな質問するパターンが多いが、困ったものだ。 この部分は書かない方がまし。 また>前回【エクセル】・・のお礼の部分も、不要だろう。 (写真画像のファイ名がわかっていて)シートにその画像(多分写真画像?)を表示する、はGoogleで、照会すればすぐ分かる。それさえもやってないのでは。 この対応データは、シートにデータとして持って置くほうがよいとおもうが、その点がどうするのかな。 ーー 全般的に、一例で https://www.moug.net/tech/exvba/0120020.html 等の Set myShape = ActiveSheet.Shapes.AddPicture( _・・ のAddPicture はどうか。 ーー すでに回答が出ているが、もっと込み入った内容か?

sachiko555
質問者

お礼

imogasi様 ご指摘ありがとうございます。参考にさせていただきます。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

それぞれの画像は "C:\Users\xxxxxx\Pictures\" に B1の名称.jpg で有るものとしています。 Sub Test()   Const PicPath As String = "C:\Users\xxxxxx\Pictures\"   Dim objShape As Shape   If Range("B1").Value = "" Then Exit Sub   Set objShape = ActiveSheet.Shapes.AddPicture( _     Filename:=PicPath & Range("B1").Value & ".jpg", _     LinkToFile:=False, _     SaveWithDocument:=True, _     Left:=0, Top:=0, Width:=0, Height:=0)   With objShape     .LockAspectRatio = True     .Locked = False     .Left = Range("B5").Left     .Top = Range("B5").Top     .Width = Range("B5").Width   End With End Sub

sachiko555
質問者

お礼

watabe007様、 ありがとうございます。参考にいたします。

関連するQ&A

  • Excel VBA で表の参照先を一気に変更させるには?

    複数のsheetに規則正しくデータと表が配置されているとします。で以下のようなデータの縦棒の表があるとします。 *データ* A B 1 4 2 2 3 8 4 5 5 1 『グラフ』 - 『元のデータ』で参照先を見ると… =Sheet1!$A$1:$B$6 追加で 例>+5件のデータが加わったとします。 ※一部のsheetだけではなく、全てのsheetで追加です。 *データ追加* 6 3 7 3 8 1 9 8 10 7 グラフの参照先 =Sheet1!$A$1:$B$11 複数のsheetにまたがると、手作業で追加データを追加していて大変手間が食ってしまい困っています。Excel VBA で表の参照先を一気に変更させる方法ありますでしょうか? アドバイスよろしくお願い致します。  

  • エクセルで複数シートを参照

    お世話になります。 タイトルが曖昧で申し訳ありません。 エクセル初心者なのですが、操作でひとつ解決しない点があるのでご教示いただければ幸いです。 現在、勤務表のエクセルデータがあります。 「勤務表.xls」ファイルは、月ごとにシートを増やして同じ雛形で勤務表を作成しています。 そのため、シート数が非常に膨大なものになっています。 あまりの膨大さに、過去の勤務表を参照するときに不便が生じています。 そこで考えたのが、Sheet1にリストのようなものを作成し、リスト内の項目を選択するとSheet1のリストの直下に選択した項目のデータが表示されるというものです。 項目は各シートと連動しており、要は参照したい月を選択するだけで、Sheet1にデータが表示されるという仕組みです。 と、データを参照するための方法は考えたのですが、何分初心者なので、やり方がわかりません。 色々と書籍を参照したりしたのですが、見つからずにこの場をお借りしました。 質問も的を得てなくて分かりづらいと思いますが、このような方法は可能なのか、ご教示ください。 よろしくお願いします。

  • Excelで表に任意データを入れたい

    いつもお世話になっています Excelで悩んでいるところがあるので、ご教授をお願いします。 ExcelにシートA,シートBを用意 シートAに表を作成しまして (例) | 名前  | 備考  | | ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄| | ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄| | ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄| | ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄| この表は1ページで30行分の名前データが綺麗に収まる表です。 別シートBに百数件の名前だけのデータが入っています。 (A列に数十件、B列に数十件とデータは複数列にわたって入っています) ※今はこのデータの形式ですが、データの持ち方はある程度妥協できます シートBの任意の名前データだけ複数選択し、シートAの形を使って印刷をしたいと考えています。 この時、選択したデータ件数によってはシートAの表は複数枚に渡って印刷される必要があります。 これを実現したいのですが、どのようにすればよいでしょうか? マクロでやるのか、はたまたマクロを使わずともできるのか・・・ 差し込み印刷のような感じでできないかと調べてはいるのですが、解決できそうな情報がみつかりません。 これを実現できる方法を分かる方がいましたら、お願いします。 マクロでという場合は、VBAの記述は初心者ですのでポイントだけでも詳しく教えて頂けると嬉しいです。 よろしくお願いします。

  • Excel参照先セル位置を変更させない方法等

    Sheet1にある表(行列データ)を毎回新しく貼り付け、 Sheet2で、A1に、 =Sheet1!A1 などとして、表を、そのまま引っ張ってくるとします。 Sheet2で、Sheet1を引っ張ってきていない、右側や下側の表部分で、で各種集計をします。 その場合、Sheet1を簡単に削除する方法はありますか? マクロでやってみたが、画像データなどがうまく消えないです。(マクロ中でジャンプでオブジェクト選択・削除しても、マクロ実行でも消えない)Excel2007 マクロで、Sheet1ごと削除して、Sheet1を作成するというものを作成した場合、おそらくSeeet2のセルの参照が一旦エラーになってしまうと思いますし。

  • エクセルのマクロで、セルの値を参照してジャンプ

    エクセルのマクロで、セルの値を参照して、 別シートにジャンプして貼り付けたいと思っています。 <Sheet1>  |  A  B  C ------------------------------------ 1|  A1  あ  100 2|  B5  い  50 3|  C7  う  80 4|  D3  え  20 5|  E9  お  40 <Sheet2>  |  A  B  C  D  E ------------------------------------ 1|  あ 2|  100 3|         え 4|         20 5|    い 6|    50 7|       う 8|       80 9|            お 10|            40 といったイメージです。(お分かり頂けますか?) Sheets1!B1:C1を選択し、A1のセルの値を参照して、Sheets2!A1にジャンプして、 行列入れ替えて貼り付ける、といったマクロを組みたいのですが、 セルの値を参照する部分が分かりません。 実際はSheets2の様なシートは複数あり、1つのリストから複数の形式を変えた表を 作りたいと思っています。 Sheets2以降のシートに見出し行を加え、VLOOK関数を組み込んだ表を作っておき、 結果を貼り付けて見出し行を削除する、といったマクロは組めるのですが、 セルを参照してジャンプして貼り付けてくれると便利だと思い質問させて頂きました。 どなたかお知恵を拝借できましたら嬉しいです。 宜しくお願い致しますm(_ _)m

  • excelの参照に関する質問です。

    excelの参照に関する質問です。 初心者です。 sheet1のセルデータをsheet2に参照したいのですが A1、A2、A3 B1,B2,B3 という一定範囲のセルをまとめて参照させるにはどしたらいいでしょうか。 参照させる範囲が広いので1つ1つ=で参照させるのは手間がかかるので まとめて参照させる方法をお教え願います。 参照元のデータも他のシートからの参照になっています。 どうぞよろしくお願いいたします。

  • Excelで別sheetの参照について

    エクセルで別sheetの参照についての質問です。 画像のようにsheet1の値を参照してsheet2表示させたいのですが、これを約100件分作成したいのですがコピー&ペーストをすると参照セルがずれてしまいます。 sheet2のA1をコピーしてA4に張り付け=Sheet1!A2&Sheet1!B2&Sheet1!C2としたいのですが、A4に張り付けを行うと=Sheet1!A4&Sheet1!B4&Sheet1!C4となってしまいます。 複数行あけてペーストする場合に参照セルを1行ずつずらして参照する方法はありますでしょうか?

  • エクセル集計

    エクセルで質問です。 sheet1   列   A           B 行          (名称)       (判定) 1   あいうえお        A 2   あいうえお        C 3   かきくけこ        C  4   かきくけこ        B 5   かきくけこ        B という元データがあり、みてのとおり同じ名前のものが複数あり各々で判定が違います。 次に、別のシートには(※同じシートで列をAAとしてもよいが) sheet2   列  A       B    C    D 行                判定 1             A    B    C 2   あいうえお    1         1 3   かきくけこ         2    1 という具合に、A列には名前が複数あってもひとつとしその右側に判定の種別ごとに数を記入する。 という集計表を作成したいのですが、どなたか教えてください。 ちなみにマクロはできませんのであしからず・・・・

  • Excelの絶対参照について

    Excelの絶対参照、相対参照について Excelの絶対参照について教えていただきたいです。 データの引用元(もしくは参照元)のシートで、一行増やしたり、一列減らしたりと編集を行ったときに、 引用先シートではズレることなく順応しているようにしたいです。 (例) 引用先(Aシート)    引用元(Bシート) A2='Bシート'!B2 B2 A3='Bシート'!B3 B3 A4='Bシート'!B4 B4 ↓ 引用先(Aシート)    引用元(Bシート) A2='Bシート'!B2 B2 A3='Bシート'!B4 B3←一行増やした A4='Bシート'!B5 B4   B5 このようにする場合は、$の絶対参照を引用先のAシートの各セルに付けておくのでしょうか。 それとも別に絶対参照を付ける必要はないのでしょうか。 質問内容が分かりにくくて申し訳ありません。 別ファイルや、別タブからデータを引用することが多いのですが、そのときに引用先では絶対参照を使った方がいい時と、使う必要はない時との違いが分からなくて……。 浅学でお恥ずかしい限りですが、ご教授願えればと思います。 よろしくお願いいたします。

  • エクセル VBA 別エクセルファイルを参照

    A1111 B1111 N1243 F2144 のように一定のデータを連続して入力された エクセルファイルと 別のエクセルファイルで一致するデータを探す マクロを作っています 別のエクセルファイルを参照するよい方法が 分かりません、どなたか教えてください。

専門家に質問してみよう