実現したいこと
複数画像をサイズ調整つき(セル内に収めたい)でExcelに一括挿入で自動貼付できるようにしたいです。
現在はOneDrive経由の個人フォルダ内で作成していますが、最終的にはGoogleドライブ上にアップロードするので、その際に互換性やエラーが出ないように進めたいと思っています。
サイズ自動調整の一括画像貼り付けのVBA・マクロが組めたらいいのですが、その辺は知識が足りず、サンプルコードからの修正・応用も上手くいかなかったので、何かいい方法があればお聞きしたいです。
事前設定・前提条件
・今回貼付したい画像ファイルを格納したフォルダをCドライブ内に用意。
・同じくCドライブ内に今回対象のExcelファイルも格納済。
・シート名「CRデータ」に画像ファイルのパスコピーを入力済(A1は「画像パス」の文言、A2から実際の画像パス)
・シート名「クリエイティブ」が実際に画像を貼り付けるシートであり、D6から画像を貼付ける箇所として設定しています。
・画像サイズは複数パターンあるため、(300x300や320x100等)Excelの行の高さを49.5(66ピクセル)、幅は21.88(180ピクセル)で設定しておりますが、縦横比維持したまま貼付けしたいので、一旦高さだけ合っていれば幅は問わず、あとは各セルの中に収まればいいと考えています。
発生している問題・エラーメッセージ
(最新の内容だと) 画像パスの1枚目の画像が指定のシート&開始セルに貼り付けられたが、 10枚以上同じ画像が同じセルに元のサイズで貼り付けられた状態
該当のソースコード
④修正して現在のコード
Sub 画像一括挿入() Dim shpPic As Shape Dim myNo As Long Dim i As Long Dim myRow As Long Dim myName As String Dim myDataCnt As Long myDataCnt = Worksheets("CRデータ").Range("A2").End(xlDown).Row myNo = 1 myRow = 2 Worksheets("クリエイティブ").Select Dim shp As Object For myNo = 1 To myDataCnt myName = Worksheets("CRデータ").Cells(2, 1).Value With Worksheets("クリエイティブ").Shapes.AddPicture _ (Filename:=myName, _ LinkToFile:=False, _ SaveWithDocument:=True, _ Left:=Range("D6").Left, _ Top:=Range("D6").Top, _ Height:=-1, _ Width:=-1) LockAspectRatio = msoTrue myRow = myRow + 1 End With Next End Sub
③ご回答頂き修正したコード(その1)
Sub 画像一括挿入() Dim shpPic As Shape Dim myNo As Long Dim i As Long Dim myRow As Long Dim myName As String myDataCnt = Worksheets("CRデータ").Range("A2").End(xlDown).Row myNo = 1 myRow = 2 Worksheets("クリエイティブ").Select Do Until myNo > myDataCnt myName = Worksheets("CRデータ").Cells(myNo, 1).Value Cells(myRow, 2).Select Worksheets(クリエイティブ).Shapes.AddPicture _ Filename:=myName, _ LinkToFile:=False, _ SaveWithDocument:=True, _ LockAspectRatio:=msoTrue, _ Height:=49.5 With shp .Left = Range("D6").Left .Top = Range("D6").Top End With Loop End Sub
②書き換えを試みたコード
Sub 画像一括挿入() Dim shpPic As Shape Dim myNo As Long Dim i As Long Dim myRow As Long Dim myName As String myDataCnt = Worksheets("CRデータ").Range("A2").End(xlDown).Row myNo = 1 myRow = 2 Worksheets("クリエイティブ").Select Do Until myNo > myDataCnt myName = Worksheets("CRデータ").Cells(myNo, 1).Value Cells(myRow, 2).Select Worksheets(クリエイティブ).Shapes.AddPicture _ Filename:=myName, _ LinkToFile:=False, _ SaveWithDocument:=True, _ LockAspectRatio:=mso True, _ Height:=49.5 With shp .Left = Range("D6").Left .Top = Range("D6").Top End With End Sub
①最初に試したコード
Sub 画像一括挿入() Dim myDataCnt As Long Dim myNo As Long Dim i As Long Dim myRow As Long Dim myName As String myDataCnt = Worksheets("CRデータ").Range("A2").End(xlDown).Row myNo = 1 myRow = 2 Worksheets("クリエイティブ").Select Do Until myNo > myDataCnt myName = Worksheets("CRデータ").Cells(myNo, 1).Value Cells(myRow, 2).Select ActiveSheet.クリエイティブ.Insert(画像パス).Select Selection.ShapeRange.LockAspectRatio = msoTrue Selection.ShapeRange.Height = 49.5 myRow = myRow + 1 myNo = myNo + 1 Loop End Sub
###ここに言語名を入力
①VBE (で違うことに気付いて②に書き換えのつもり) ②VBA
試したこと
試した方法としては、フォルダ内に貼り付けしたいExcelファイルを格納しておいて画像のパスのコピーを表示したいシート内のセルにペーストし、Ctrl+Alt+Shift+Bでセルサイズに自動調整された状態で貼り付けできたような気がしたのですが上手くいきません。 (なお、ファイルはGoogleドライブからスプレッドシートをダウンロードしてExcelにし、OneDriveの中の個人フォルダに格納されている状態) 元々スプレッドシートで画像をIMAGE関数で表示させているものなので、ダウンロードしてExcelファイルで開くと#NAME?と関数が対応しておらず、画像を値貼りした状態で落とし直しても画像が表示されず、スプレッドシートの画像をコピーしてExcelに全貼り付けするとセルとサイズが合わない状態でずれてしまいます。 (画像サイズは複数パターンあり、画像によって高さや縦横比が異なる) 最終的にはExcelで完成させた後に再度Googleドライブ上に格納し、スプレッドシートで確認したり、送付するような形になります。 下記のコード引用して実行してみたが、リンク貼り付けになるためAddPictureに書き換えようと試みる https://xtech.nikkei.com/it/pc/article/NPC/20071101/286186/ →コンパイルエラー続出(構文エラー等) →いくつかの修正を経て④のコードが現在の状態
補足情報(FW/ツールのバージョンなど)
マクロ・VBAはこれまで触ったことがありません。全くの素人です。
業務上、効率化するために今回検索して似た記述をベースにして作成してみましたが、全然わからないままエラーで苦戦している状態です。。。
回答3件
あなたの回答
tips
プレビュー