
お世話になります。ご教授、よろしくお願いします。
エクセルにて膨大な行数の商品リスト表があります。
AH列にはJAN.Jpgのコードがあり、そのコードのファイル名を指定の画像格納フォルダからB列に画像を一気に下の行まで貼り付けるVBAを見よう見まねで下記の通り作成しました。結果実行すれば、思う通りにできてよかったのですが、メール送付した取引先に画像が見られないと言われました。
調べると、「Pictures.Insert」は古いバージョンのエクセルで2010以降は「Shapes.AddPicture」でやらないと画像リンクのままで他者はリンク切れで見られないとわかりました。
この「Shapes.AddPicture」に書き換えていろいろ試しましたが、どうにもうまくいきませんでした。
どこをどう直せばよいか、お手数ですが、ご教授いただければ幸いです。よろしくお願いします。
Sub macro6()
Dim p As String
Dim h As Range
Dim sp As Shape
'写真の保存場所
p = "\\c:xxx\"
'現在表示されている写真は一度削除する
ActiveSheet.Pictures.Delete
'商品名が入力されている行まで繰り返す
For Each h In Range("AH5:AH" & Range("C1048576").End(xlUp).Row)
'写真ファイルが保存されている時
If Dir(p & h) <> "" Then
With ActiveSheet.Pictures.Insert(p & h)
'写真ファイル名が入力されているセルから32つ左のセルに挿入
.Top = h.Offset(0, -1).Top
.Left = h.Offset(0, -32).Left
'写真サイズの設定
.Width = h.Offset(0, 1).Width * 0.95
.Height = h.Offset(0, 1).Height * 0.95
.Left = .Left + h.Width / 2 - .Width / 2
.Top = .Top + h.Height / 2 - .Height / 2
End With
End If
Next
End Sub
No.2ベストアンサー
- 回答日時:
No1です
>、元画像の縦横比率が変わってしまいました。
>あと、セルの真ん中に画像を入れるのはどう修正すればよいのでしょうか?
もしかすると、そうなさりたいのかもと推測はしましたが、ご提示のコードは元の画像のプロポーションは無視していますよね?
それなので、細かな言及はしませんでした。
さらには「セルの真ん中」と言いながら、幅や高さを参照しているセルは関係の無いセルになっているので、何をどうしたいのかわからない状態になっています。
(まぁ、高さ方向に関しては、同じ行内のセルを参照しているようなので変わらないのですが)
また、補足でご提示のコードでは、その参照セルが質問文のものとも変わっているようなので、本当は何をしたいのかがわかりません。
多分、同じ行のB列のセルに画像を表示したいのだとろうという事まではわかるのですが、そこから先は不明です。
そもそも、元の画像はサイズがいろいろあるのでしょうか?
(なんとなく一律の様な気がしますが…)
また、シートの各行は高さがいろいろなのでしょうか?
(こちらも一律の様な気が・・・)
もしも、両方とも固定であるならば、固定の比率で表示させれば良くなるので、処理は簡単になります。
画像のサイズもいろいろで縦横比も様々、セルの高さもいろいろであるような場合には、それぞれのセルサイズを調べて、それに合わせて配置する必要が出てきます。
また、その上で、画像の縦横比も維持したい場合には、セルサイズと各辺の比率から適切な拡大(または縮小率)を求める処理も必要になります。
(この場合、表示される画像のサイズは状況に応じてバラバラになります)
セルの中央に画像を表示させる方法は、ご質問文でご提示の方法で宜しいのではないかと思います。
仮に、高さ、幅ともセルの95%に固定なのであれば、TOP、LEFTは高さ(幅)の2.5%の位置に直接表示させれば済みます。
(No1の回答は、この仮定のもとに回答しております)
回答ありがとうございました。お礼返信が遅くなり、申し訳ありませんでした。
今回、最終的に理想のものではありませんが、「サイズ5%」のヒントをいただいたので、画像の縦横サイズの統一、セルサイズの調整で対応できました。
No.1
- 回答日時:
こんにちは
https://docs.microsoft.com/ja-jp/office/vba/api/ …
LinkToFileをFalseに、SaveWithDocumentをTrueにしておけば良いのでは?
位置やサイズは必須なので、まとめて指定する必要があります。
ご提示のコードだと、もとの図のプロポーションは関係ないようなので、気にする必要は無いと思いますが、プロポーションを維持したいような場合には、一旦仮置きしてから、ScaleWidthなどを1にすれば元のサイズを取得することが可能です。
ありがとうございます。
下記で修正しましたら、画像が貼付けできました。
しかし、元画像の縦横比率が変わってしまいました。[ScaleWidth]をどのようにあと記述すればいいのでしょうか。
あと、セルの真ん中に画像を入れるのはどう修正すればよいのでしょうか?
お手数ですが、よろしくご教授お願いします。
Sub macro3()
Dim p As String
Dim h As Range
Dim sp As Shape
'写真の保存場所
p = \\C:画像\"
'現在表示されている写真は一度削除する
ActiveSheet.Pictures.Delete
'商品名が入力されている行まで繰り返す
For Each h In Range("AH5:AH" & Range("C1048576").End(xlUp).Row)
'写真ファイルが保存されている時
If Dir(p & h) <> "" Then
ActiveSheet.Shapes.AddPicture _
Filename:=p & h, _
LinkToFile:=False, _
SaveWithDocument:=True, _
Left:=h.Offset(0, -32).Left, _
Top:=h.Offset(0, -1).Top, _
Width:=(h.Offset(0, 0).Width) * 0.95, _
Height:=(h.Offset(0, 0).Height) * 0.95
End If
Next
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- PowerPoint(パワーポイント) ExcelのVBAコードについて教えてください。 3 2022/05/25 14:32
- Excel(エクセル) エクセルで同じ数字同士を自動で線で結ぶVBAを教えてください 6 2022/04/26 23:13
- Excel(エクセル) Excel2019 マクロを使用し画像を貼り付けした際のリンク切れについて 2 2022/11/15 16:14
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Excel(エクセル) Excelのマクロについて教えてください。 4 2022/05/31 14:07
- Visual Basic(VBA) QRコード作成マクロについて 3 2022/11/26 16:55
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
枠に収まらない文字を非表示に...
-
エクセルで指定したセルのどれ...
-
貼り付けで複数セルに貼り付けたい
-
セルをクリック⇒そのセルに入力...
-
(Excel)数字記入セルの数値の後...
-
エクセルの書式設定の表示形式...
-
Excelで数式内の文字色を一部だ...
-
Excel2010の指マークと白十字マ...
-
【エクセル】IF関数 Aまたは...
-
EXCEL VBA セルに既に入...
-
Excelでのコメント表示位置
-
【Excel】 セルの色での判断は...
-
数式を残したまま、別のセルに...
-
エクセル オートフィルタで絞...
-
excelの特定のセルの隣のセル指...
-
エクセルの一つのセルに複数の...
-
エクセル 足して割る
-
対象セル内(複数)が埋まった...
-
エクセルVBA、ファイル名をセル...
-
Excel 例A(1+9) のように番地の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで指定したセルのどれ...
-
貼り付けで複数セルに貼り付けたい
-
excelの特定のセルの隣のセル指...
-
枠に収まらない文字を非表示に...
-
エクセルの書式設定の表示形式...
-
数式を残したまま、別のセルに...
-
【エクセル】IF関数 Aまたは...
-
セルをクリック⇒そのセルに入力...
-
(Excel)数字記入セルの数値の後...
-
Excelで、「特定のセル」に入力...
-
Excel 例A(1+9) のように番地の...
-
対象セル内(複数)が埋まった...
-
EXCEL VBA セルに既に入...
-
エクセルの一つのセルに複数の...
-
【Excel】 セルの色での判断は...
-
Excelで数式内の文字色を一部だ...
-
エクセルのセルの枠を超えて文...
-
エクセル オートフィルタで絞...
-
Excelでのコメント表示位置
-
連続しないセルから最小値を引...
おすすめ情報