アプリ版:「スタンプのみでお礼する」機能のリリースについて

数日前からマクロを勉強し始めた初心者です。
下の画像のような表を作っています。
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
■Sheet1 …「商品在庫一覧」
■Sheet2 …「印刷用シート」※必要なものだけをSheet1から呼び出し、印刷用として同じシート上で並べ替える(図では‘行5’から下が印刷範囲です)
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
Sheet2のD列(D1~D3‥)に商品画像のフルパスを呼び出し、「写真を配置」のボタンを押すと、印刷範囲の‘行7’のセルに自動で画像が配置されるようにしたいです(‘あ’のパスの画像を‘い’のセルに)。
画像を配置するような関数はなく、マクロでなければ実現できないということで、似ている条件の構文をアレンジして‥と思ったのですが、マクロのことをきちんと理解できていないためうまくいきません。
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
■「D1」のパスから「A7」に画像を配置する構文を教えていただけますでしょうか。
‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
初歩的なことを聞いてすみません。
完成までの残り時間があまりないもので、質問させていただきました。
どなたかお暇がありましたら、お願いいたします。

「エクセル マクロ フルパスから画像を読み」の質問画像

A 回答 (2件)

'読み込み


Sub try_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")
    'D1から下へ連続セルをLoop
    For Each r In .Range("D1", .Range("D1").End(xlDown))
      s = r.Value
      '空白セルの場合Loopを抜ける
      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
          'セルの幅or高さに合わせて縮小率を得る
          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

'削除
Sub try_2()
  Sheets("sheet2").Pictures.Delete
End Sub

...こんな感じです。
#ちょっとデジャヴゅな仕様...

>数日前からマクロを勉強し始めた初心者です。
勉強してコード内容を理解するようにしてください。
今後の仕様変更の対応など、コードのメンテナンスに苦労しますよ。
    • good
    • 1
この回答へのお礼

end-u様

ご回答ありがとうございました。お礼が遅くなり、申し訳ありません。
丁寧な解説までつけていただき、大変恐縮です。
おかげさまでなんとか完成させることができました!
と言ってもたまたまうまくいっただけで、おっしゃる通りちゃんと勉強しないと応用するのは無理だということがよく分かりました。

ちなみに…
「行6~9のセットを下方向に4段配置したかったのですが(質問に書き忘れました)、方法が分からなかったので、「For」~「Next」の部分を4回繰り返し(コピー&ペースト)、
下の構文の「■」のところをそれぞれずらす、という方法でやってみました。

  For Each r In .Range("■", "■")

  Set tr = .Cells(■, (i + 1) - ■)

本当はもっとちゃんとしたやり方があるのだと思います。。
私の間違った方法を書いても意味がないとは思ったのですが、初めてできてとても嬉しかったのでご報告させていただきました。
お正月休みにでもまとめて勉強したいと思います。

この度は助けていただき、ありがとうございました。

お礼日時:2009/12/23 19:06

>数日前からマクロを勉強し始めた初心者です。


>完成までの残り時間があまりないもので、質問させていただきました。

残り時間が少ないのでしたら、今回の画像表示のサンプルコードを提示してもらっても、最終版として完成するには、時間が足らないように思います。

もしかすると、以下のようなことがしたいのではないでしょうか?

自動的に画像を切り替える
http://officetanaka.net/excel/function/tips/tips …
    • good
    • 1
この回答へのお礼

MackyNo1様

ご回答いただきありがとうございました。
お礼が遅くなり申し訳ありません。

ご紹介していただいたサイト、写真入りで大変分かりやすかったです。
ぜひ参考にさせていただきます。
この度はどうもありがとうございました。

お礼日時:2009/12/25 10:38

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

このQ&Aを見た人はこんなQ&Aも見ています