• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAで画像を自動で切り替える方法)

VBAで商品画像を自動で表示する方法

このQ&Aのポイント
  • VBAを使用してExcelで商品コードに対応する画像を自動で表示する方法について教えてください。
  • 現在、マクロを作成しているのですが、プロシージャが大きいというエラーが発生しています。
  • また、画像の貼り付けや位置調整についても改善の方法を教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

#01です。先のマクロでは商品コードをDeleteしたときに画像が残ってしまいますね。以下に差し替えます。 Private Sub Worksheet_Change(ByVal Target As Range) Dim ファイル As String Dim nmPic As String Dim res As Range   Set res = Sheets("対応表").colomns(1).Find(Target.Address(False, False), _     LookIn:=xlValues, lookat:=xlWhole)   If res Is Nothing Then     Exit Sub   Else     On Error Resume Next     nmPic = res.Offset(0, 1).Value '対応表のB列の値を格納     ActiveSheet.Shapes(nmPic).Delete     If Target.Value <> "" Then       ファイル = "C:\保存場所\" & Target.Value & ".jpg"       Target.Offset(1, 1).Select       ActiveSheet.Pictures.Insert(ファイル).Select       Selection.Name = nmPic       With Selection.ShapeRange         .LockAspectRatio = msoTrue         .Top = ActiveCell.Top         .Left = ActiveCell.Left         .Height = 97         .Width = 52.5         .Rotation = 0#         .IncrementLeft 1.5         .IncrementTop 1.5       End With     End If   End If End Sub

zodiac10
質問者

お礼

早々の回答ありがとうございました。 さっそく対応表を作り、コードをコピーしましたが下記部分でエラーがでました。   Set res = Sheets("対応表").colomns(1).Find(Target.Address(False, False), _     LookIn:=xlValues, lookat:=xlWhole) しかしながら、「.colomns(1)」を「.columns(1)」にする事で無事解決しました。 少ない説明で完璧な回答ありがとうございました。

その他の回答 (1)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

対応表というシートを作成し、A列に商品コードが入力されるセルアドレスを列記しておきます。B列はそのセルの右下セルに挿入する画像の名前です A列   B列 A4    画像1 A8    画像2 A12    画像3  ~中略~ U60    画像98 そうすれば以下のマクロだけで済むと思います。 商品コードが入力されたセルアドレスで対応表を検索し、合致するセルアドレスがあれば画像挿入の処理をするようにしています。 (テストはしていません。あしからず) なお「On Error Resume Next」を追加したのは商品コードに対応する画像がシートにないときエラーとなるのを防止するためです。 オリジナルのロジックでは「最初から画像1~画像98が全てシート上にある」ときはエラーになりませんが、空いている表示欄に商品コードを入力すると削除しようとする画像がないのでエラーになりそうです。 Private Sub Worksheet_Change(ByVal Target As Range) Dim ファイル As String Dim res As Range  If Target.Value = "" Then Exit Sub  Set res = Sheets("対応表").colomns(1).Find(Target.Address(False, False), _    LookIn:=xlValues, lookat:=xlWhole)  If res Is Nothing Then    Exit Sub  Else    On Error Resume Next    ActiveSheet.Shapes(res.Offset(0, 1).Value).Delete    ファイル = "C:\保存場所\" & Target.Value & ".jpg"    Target.Offset(1, 1).Select    ActiveSheet.Pictures.Insert(ファイル).Select    Selection.Name = res.Offset(0, 1).Value    With Selection.ShapeRange      .LockAspectRatio = msoTrue      .Top = ActiveCell.Top      .Left = ActiveCell.Left      .Height = 97      .Width = 52.5      .Rotation = 0#      .IncrementLeft 1.5      .IncrementTop 1.5    End With  End If End Sub

関連するQ&A