• 締切済み

エクセルのマクロについて

エクセル初心者です。 仕事でエクセルを使用して商品資料を作成しているのですが、効率アップのために 下記の作業をマクロ化できないかと思い、質問させていただきたいと思ってます。 [内容] エクセル表内にある商品番号を触ると、その横に商品写真がポップアップで表示される 商品写真はデスクトップにある「画像」という名前のフォルダーに 商品番号と同じ名前を付けて入れています。 言葉足らずでわかりにくいかもしれませんが、お分かりになる方にご指導いただければ 幸いです。 よろしくお願いいたします。

みんなの回答

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.4

> Book内すべての商品名(000-000という表示形式)に > 適用される様なマクロを作成したい 「作成したい」のであれば、自力で少し考えましょう。 「ゼロから作ってください」はこのようなQAサイトでは「作成依頼」とされ、 嫌われる行為の一つですよ。 ちなみに、このような「マクロ作成依頼」を受け、作成料金を取り、 それを収入源としている方も世の中にはいらっしゃいます。 (もっとも、この程度の簡単な操作なら料金は発生しないでしょうけれど。) エクセルには「マクロの記録」と言う機能があり、 エクセルを操作することで、その操作を自動的に(ほぼ全て)VBAに落としてくれます。 それを見ながら修正していくのが第一歩です。 わからなかったら、調べましょう。 その上で「ここがうまくいかない」「ここがわからない」ことがあれば、質問しましょう。 ・・・とは言え、乗りかかった船ですし、 何よりも少々面白そうな命題ですので、本題も考えてみました。 結果、マクロでスラリと出来ました。 ですが、「マクロの記録」機能でも試したのですが、コレでは不完全でした。 なので、(私なりに)補完したものを紹介しますので、ご確認くださいませ。 Sub Macro1() Dim Comm As Range Dim Picfol As String Dim Img As Object On Error Resume Next     Picfol = "C:\Users\ユーザー名\Desktop\画像\"     Selection.ClearComments     For Each Comm In Selection         Set Img = LoadPicture(Picfol & Comm.Value & ".jpg")             If Not Img Is Nothing Then                 With Comm.AddComment                     .Text Text:=Comm.Value                     With .Shape                        .Fill.UserPicture Picfol & Comm.Value & ".jpg"                        .Height = Application.CentimetersToPoints(Img.Height) / 5000                        .Width = Application.CentimetersToPoints(Img.Width) / 5000                     End With                     .Visible = False                 End With             End If         Set Img = Nothing     Next End Sub 何を書いているのか?は、調べながら読み取って頂きたいのですが、 ざっくり説明です。 「商品名」が入っている範囲を選択した状態で上記コードを走らせます。 空白を含んでいてもなんとかなるように書いていますので、そこは気にしなくても大丈夫です。 1セル単位でも動きますし、範囲を選択しても動きますし、 列全て一気に設定することも可能です(そこそこ時間がかかりますが)。 その際の注意事項として、いくつか行単位で Picfol = "C:\Users\ユーザー名\Desktop\画像\"   「ユーザー名」はお使いのユーザー名に適宜書き換えてください。 Set Img = LoadPicture(Picfol & Comm.Value & ".jpg")   拡張子はjpgにしています。bmp・pngなど、実際の画像ファイルに合わせてお使いください。   混在する場合は、もう少し工夫が必要です。 .Height = Application.CentimetersToPoints(Img.Height) / 5000 .Width = Application.CentimetersToPoints(Img.Width) / 5000   上でコメントの高さ、下で幅を調整しています。   元画像のサイズを元に、お好きな大きさになるように調整してください。   「/ 5000」を大小することで可能です。   上下の数字を合わせておくと、縦横比が保持されます(違うと横長だったり縦長だったりします)。 当然ではありますが、「商品番号」と「画像ファイル名」が完全一致していることが条件です。 完全一致しないセルにはコメントが付かないように作ってあります。 マクロの使い方、はご自身で調べてくださいませね。

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.3

連投失礼します。 わかりづらいですが、結果です。 これの難点は、図がストレッチしちゃうところです^^; 上手にコメントのサイズを調整してくださいませ^^;;

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.2

すいませんが、補足をください。 > エクセル表内にある商品番号を触ると、 とのことですが、これは ・商品番号をクリックすると ・商品番号にカーソルを持っていくと(ロールオーバー) どちらを意図されてますか? 実はどちらもマクロを使わずに(簡易的な形で)実装できます。 前者、クリックと言うのであれば、マクロを使わずにハイパーリンクを設定しておくとできます。 方法:セル内で右クリック→ハイパーリンク→表示したい画像を選択    セルをクリックすると、(既定のビューワで)画像を開きます。 後者、ロールオーバーとなると、セルへの「コメント」の機能を使います。 方法:セルを右クリック→コメントの挿入    コメントの枠線辺りで右クリック→コメントの書式設定    色と線タブより、塗りつぶしの色→塗りつぶし効果    図タブより、図の選択ボタン    表示したい画像を選択    ※あとで変更したい場合は、セルを右クリック→コメントの編集 で出来ます。    設定されると、セルの右上に赤い三角が付きますので、    マウスカーソルを持っていくと、コメント・・図が表示されます。 お試しくださいませ。   

imashop
質問者

お礼

早速のご回答ありがとうございます

imashop
質問者

補足

ご回答ありがとうございます。 ロールオーバーで写真の表示をしたいのですが、 商品点数が多いため、一点ずつ設定するとなると 結構な時間を要します。 そのため、tsubuyuki様が提示してくださった方法が Book内すべての商品名(000-000という表示形式)に 適用される様なマクロを作成したいと思っています。 ご存知でしたら是非教えてください。

  • g00g0g00
  • ベストアンサー率34% (101/289)
回答No.1

商品画像がポップアップで表示、ではなく、ハイパーリンクで表示、で作ってみました。 Sub PicLink() Dim strRange As String Dim i As Long For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row strRange = Range("A" & i) If strRange <> "" Then Range("A" & i).Select ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _ "C:\Documents and Settings\■ユーザ名■\デスクトップ\画像\" & i & ".jpg" End If Next i End Sub ※■ユーザ名■のところはご自身のユーザ名に書き換えて下さい。 質問内容と合ってますかね^^;

imashop
質問者

お礼

ありがとうございます!早速試してみたいと思います。

関連するQ&A