
エクセル マクロ 相対パスから画像を読み込みたいです。
以前、こちらで同様の質問をして無事に解決していただきました。
↓
「エクセル マクロ フルパスから画像を読み込む」(回答番号:No.1)
http://oshiete.goo.ne.jp/qa/5527067.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
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
どうぞよろしくお願いいたします。

No.1ベストアンサー
- 回答日時:
このブックと画像を同じフォルダーに入れておくと
Thisworkbook.Pathでブックのパスが取得できるのでそれを利用したらどうでしょう。
現在、Sheet1の画像はフルパスになってますが、
パスは、ThisWorkbook.Pathで取得しますので
画像ファイルの名前だけにしてください。
例えば、Pic1.jpg とか。。
下記●のコード1行追加するだけです。
'----------------------------------
For Each r In .Range("D1", "D3")
s = r.Value
If Len(s) = 0 Then Exit For
s = ThisWorkbook.Path & "¥" & s '●これを追加
i = i + 1
If Len(Dir(s)) > 0 Then
'----------------------------------------------
■■注意■■
追加コードの "¥" は上記では全角になってますが、実際では半角の¥にすること
以上です。
この回答への補足
素早いご回答ありがとうございます!
質問に書き忘れていたのですが、画像を種類ごとにいくつかのフォルダに分けています。
・ブックを1階層とすると3階層まで
・最終のフォルダ数は30フォルダ(画像数:合わせて5000枚))
後から大事な情報を申し上げてすみません。
※■←ブック/□←フォルダ とすると
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
階層1
■
□…画像フォルダ
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
階層2
□…Aフォルダ
□…Bフォルダ
□…Cフォルダ
□…Dフォルダ
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
階層3
□□□□□□□□□□□□□ (Aフォルダの中:13フォルダ)
□□□□□□□□□□ (Bフォルダの中:10フォルダ)
□□□□ (Cフォルダの中: 5フォルダ)
□□ (Dフォルダの中: 2フォルダ)
↑それぞれに「.jpg画像」が入っている
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
という構成です。
(関係ないかもしれませんが)今の自分でもできることは
「あらかじめ関数で※のようにパスを文字列として呼び出しておくこと」
ぐらいでしょうか。
※..\画像フォルダ\Aフォルダ\最後のフォルダ\いちご01.jpg
もしお時間がありましたら、ヒントをいただけると大変助かります。
自分でも教えていただいたコードを元に調べてみたいと思います。
よろしくお願いいたします。
myRange様
先ほど補足を入力してすぐに
「ん?相対パスでもいいのなら…」
と思って色々試してみたところ、画像を表示することができました!
「HYPERLINK関数」で呼び出したパスの頭に「..¥」を足したらできました。
びっくりです。
ちょっと急いでいたのでとても助かりました!
どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Excel(エクセル) エクセルで同じ数字同士を自動で線で結ぶVBAを教えてください 6 2022/04/26 23:13
- Excel(エクセル) Excel2019 マクロを使用し画像を貼り付けした際のリンク切れについて 2 2022/11/15 16:14
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセル マクロ フルパスから画像を読み込む
その他(Microsoft Office)
-
Excelのパスが格納されている列の隣の列に画像を自動で表示させたい
その他(Microsoft Office)
-
Excel セルに入力した画像名からフォルダの画像を自動表示させたい
Excel(エクセル)
-
-
4
Excel2019 マクロを使用し画像を貼り付けした際のリンク切れについて
Excel(エクセル)
-
5
エクセル ハイパーリンクで画像を表示
その他(Microsoft Office)
-
6
任意フォルダから画像をすべてエクセルの指定マスに貼り付けをしたい
Visual Basic(VBA)
-
7
エクセルで相対パスの書き方を教えてください
Excel(エクセル)
-
8
エクセルのセルに指定画像(.jpg)を自動で貼り付けたいです。
Excel(エクセル)
-
9
画像を削除したい(VBA)
Word(ワード)
-
10
Excelで数字を入れたら対応する図を呼び出したい
Excel(エクセル)
-
11
VBAの内容の修正をお願いさせて頂きます
Excel(エクセル)
-
12
マクロを実行すると画像がズレてしまいます
その他(Microsoft Office)
-
13
エクセルVBA 画像を貼り付けるセル位置を指定する方法
Excel(エクセル)
-
14
VBA フォルダ名と画像ファイル名取得
Visual Basic(VBA)
-
15
ダブルクリックで貼り付けた画像からリンクのみ削除し、画像を残したい
Visual Basic(VBA)
-
16
Pictures.Insertメソッド⇒Shapes.AddPictureメソッドに変更したいです。
Visual Basic(VBA)
-
17
エクセル、画像ファイル名の書かれたセル(複数個所)に画像を一括で表示させる方法
Excel(エクセル)
-
18
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
19
EXcelのマクロで相対パスでファイルを開く
その他(Microsoft Office)
-
20
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
Excel内での検索結果をシート...
-
Excelで、図形内の文字をセルに...
-
Excel ハイパーリンクのURLを別...
-
クリックすると文章が表示され...
-
エクセル 数字をすべて○などの...
-
太字に設定されているセルの個...
-
フォントの色を指定して削除出...
-
Excelでセルをクリックす...
-
セルの内容をテキストボックス...
-
空白セルを空セルに置き換える...
-
【EXCEL】先週の月曜日の日付を...
-
マクロを実行すると画像がズレ...
-
ページ内ハイパーリンクの表示...
-
現在のセルの位置を返す関数は...
-
エクセルシート内のある数値以...
-
エクセル 未入力セルがあると...
-
Excel:セルの値(文字列)を数...
-
開始行と最終行を指定して差し...
-
エクセルでPDFリンクを大量...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
Excel内での検索結果をシート...
-
エクセル 数字をすべて○などの...
-
クリックすると文章が表示され...
-
Excelで、図形内の文字をセルに...
-
Excel ハイパーリンクのURLを別...
-
Excelでセルをクリックす...
-
太字に設定されているセルの個...
-
マクロを実行すると画像がズレ...
-
現在のセルの位置を返す関数は...
-
Excel:セルの値(文字列)を数...
-
Excel2007 色のカウント (VBA)
-
セルの内容をテキストボックス...
-
セルがクリックされた回数をカ...
-
エクセル 未入力セルがあると...
-
エクセルマクロ 赤色の文字を検...
-
選択したセル範囲に入っている...
-
アポストロフィーの一括挿入 ...
-
エクセルでPDFリンクを大量...
-
エクセルでセルをダブルクリッ...
おすすめ情報