プロが教える店舗&オフィスのセキュリティ対策術

VGA初心者です。
エクセルで、画像名を入力したら対応する画像が挿入されるVGAを設定したいです。
過去質問を参考に指定する場所を変えてみたりしたのですが、自分では力及ばず…。

https://oshiete.goo.ne.jp/qa/4004938.html?_ga=2. …

こちらのコードを入力してみたところ、A1に名前を入力したらB1にセル高さに対応した画像が入りました。

上記同様に名前の入力場所と、配置場所を変更したコードを設定したいです。
その際に、
・名前は〇〇の行(画像だと31の行)
・画像は名前を入力したセルの2つ上のセル範囲
という風にしたいです。

恐れ入りますが、どなたかご回答いただけますでしょうか?何卒、宜しくお願い致します。

「VGAを利用した画像表示について」の質問画像

質問者からの補足コメント

  • 本文中、誤りがありました。
    上記同様に名前の入力場所と、配置場所を変更したコードを設定したいです。

    上記同様にセルの高さに対応する画像の挿入ですが、名前の入力場所と配置場所を変更したコードを設定したいです。

      補足日時:2021/11/03 23:09

A 回答 (4件)

こんにちは


リンク先を拝見いたしました。
参考のコードは行方向の移動を対象にしていますので
変数の使い方を列方向に変更すれば良いです

>こちらのコードを入力してみたところ、A1に名前を入力したらB1にセル高さに対応した画像が入りました。
この処理に問題がないのであれば、
添付画像の表組はC31に最初の名前、、3つ飛ばしてG31が次の名前の場合

Sub try2()を例として変更箇所は

n = .Cells(.Rows.Count, 1).End(xlUp).Row を
n = Cells(31, Columns.Count).End(xlToLeft).Column

If n = 1 And Len(.Cells(1, 1).Value) = 0 Then Exit Subを
If n <= 2 And Len(.Cells(31, 3).Value) = 0 Then Exit Sub

For i = 1 To n を
For i = 3 To n Step 4

fn = .Cells(i, 1).Value を
fn = .Cells(31, i).Value '(セルには拡張子を含むファイル名)

Set r = .Cells(i, 2) を
Set r = .Cells(31, i).Offset(-2).MergeArea

以上でしょうか?
他のサンプル(ベストアンサーを除く)もほぼ同様の箇所のようですね

少し気になるのは、列幅の対応がないようですが、、よろしいのでしょうか
また、どれもInsertなので貼り付け画像のリンクが切れていないと思います。
使用状況が分からないので何とも言えませんが、
Shapes.AddPictureメソッドを使う方が良いかも知れません。
Shapes.AddPictureメソッドの使用例

参考先コード
With .Pictures.Insert(fd & fn).ShapeRange
.LockAspectRatio = msoTrue
.Left = r.Left
.Top = r.Top
.Height = r.Height
End With

部分を下記に変更
Dim ds As Double
With ActiveSheet.Shapes.AddPicture( _
Filename:=fd & fn, _
LinkToFile:=False, _
SaveWithDocument:=True, _
Left:=r.Left, _
Top:=r.Top, _
Width:=0, _
Height:=0)
.ScaleHeight 1, msoTrue
.ScaleWidth 1, msoTrue
If r.Width / .Width < r.Height / .Height Then
ds = WorksheetFunction.RoundDown(r.Width / .Width, 2)
Else
ds = WorksheetFunction.RoundDown(r.Height / .Height, 2)
End If
.Width = .Width * ds
' .Height = .Height * ds
End With

' .Height = .Height * ds は列幅に合わせているのでコメントアウト
    • good
    • 1
この回答へのお礼

コメント有難うございます。
記載していただいたコードで実行したところ、「画像」の場所に挿入されました。

現状、画像の縦がそのままで、横がフィットした潰れた画像になります。
お教えいただいた上で大変恐縮なのですが、
画像のサイズについて、決められた数値でトリミングされて画像が配置されるような仕組みは可能でしょうか?

添付していた画像では、「画像」の範囲のサイズが高さ「10.3"」幅「3.13"」となっておりまして、例えば縦は高さいっぱいまで拡大され、横はそのサイズでトリミングされる様な感じです。
可能であれば、お教えいただけますと幸いです。
よろしくお願いいたします。

お礼日時:2021/11/09 00:50

ごめんなさい、


急な出張に出かけるので時間がありません。
画像では、結合セルになっているようですね。
コード中の r. は貼り付け先のセルです、その大きさを取得して
サイズ変更していますのでセル巾、高さを調整してみてください。
あと、画像の比率を維持するか、しないか、も確認してみましょう
明日の夜には拝見できると思います。
    • good
    • 2
この回答へのお礼

詳しく有難うございました。
画像のサイズを、
.LockAspectRatio = True
.Height = 650
で固定して表示することにしました。
あとは画像のサイズとセルのサイズをいじっていこうと思います。
細かくお教えいただき大変助かりました。

お礼日時:2021/11/12 01:57

こんばんは、


貼り付く画像のサイズは、最後の
.Width = .Width * ds
' .Height = .Height * ds
で調整しています。画像をトリミングと言うとどうでしょう。
.Heightがセルの高さいっぱいと言う事であれば、' .Height = .Height * ds
の 'を取ってみてください。
直接数値で指定する事も出来ます。ポイント?
ピクセルか
.Width = 3.13*0.118
.Height = 10.3*0.75
ちょっと、いろいろ試してみてください。
    • good
    • 1
この回答へのお礼

追加でご返信有難うございます。
画像のサイズを数値で…は上手くできなかったので、
とりあえず縦を目一杯…というのをやってみたく、横ははみ出してもいいと思い、
.Width = .Width * ds
' .Height = .Height * ds

' .Width = .Width * ds
.Height = .Height * ds
にしていじってみたのですが、
縦につぶれた画像になってしまいました。

恐れ入りますが解決策は何かありますでしょうか?

お礼日時:2021/11/09 13:38

こんにちは。



Excelでの質問で、何かと思ったら、タイトルが違いますね。
×:VGAを利用した画像表示について
○:VBAを利用した画像表示について

最初、パソコンの画質関係かと思いました。。。

さて、本題ですが、どのコードを使われたのでしょうか?
幾つかあって、質問者さんが、使ったコードをUpして貰えると、探す手間
が省けますので。
私で、分かれば協力はできるかもと思いまして。
    • good
    • 1
この回答へのお礼

コメント有難うございました、間違えて記載していましたね。
申し訳ないです。

お礼日時:2021/11/09 00:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!