写真が数枚ならいいけど、何十人もの写真を大きさを揃えて貼り付け!なんてとても手間!!
ただ貼り付けるだけなら、
1 2 |
Range("A1").Select '貼り付けたいセル ActiveSheet.Pictures.Insert("ファイルのフルパス").Select |
とVBAで記述すればいいです。あとはファイルパスを繰り返し処理でやらばいいけど…
「セルサイズに合わせて大きさ調整してね!」
なんて気軽に言われると、大変さを知ってほしいなと…
VBAで 写真を挿入→指定のセル範囲に写真をはみ出さないように調整
完成したものがこちらです
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
Sub pic_take_it() Dim pic_name As String Dim pic_cell As Range '貼り付ける写真とセルの設定 pic_name = "C:\Users\(ユーザー名)\Desktop\picture.jpg" '写真のフルファイルパス Set pic_cell = ActiveSheet.Range(Cells(2, 3), Cells(3, 5)) '貼り付けたいセル範囲 この場合 Range("C2:E3")と同じ '貼り付け&調整マクロを実行 pic_paste pic_name, pic_cell End Sub '###### 貼り付け&調整用呼び出しマクロ###### Sub pic_paste(pic_name As String, pic_cell As Range) If Dir(pic_name) <> "" Then 'ファイル名が空白でなければ '写真を元の大きさで貼り付ける Set myShape = ActiveSheet.Shapes.AddPicture( _ Filename:=pic_name, _ LinkToFile:=False, _ SaveWithDocument:=True, _ Left:=pic_cell.Left, _ Top:=pic_cell.Top, _ Width:=-1, _ Height:=-1) ' ※LinkToFile:=Trueだと、画像リンクのみ作成 '写真をセルの幅に合わせる With myShape myHgt = pic_cell.Height 'セルの高さ myWdt = pic_cell.Width 'セルの幅 mySpH = myShape.Height '写真の高さ mySpW = myShape.Width '写真の幅 .LockAspectRatio = True .Top = pic_cell.Top .Left = pic_cell.Left 'セルと写真の大きさを比べて処理 If myWdt / mySpW < myHgt / mySpH Then Scal = Application.WorksheetFunction.RoundDown(myWdt / mySpW, 3) Else Scal = Application.WorksheetFunction.RoundDown(myHgt / mySpH, 3) End If '調整後、ズレることがある(?)ので再度位置調整 .ScaleWidth Scal, msoFalse, msoScaleFromTopLeft '写真を上下中央に配置 .Top = .Top + (myHgt - myShape.Height) / 2 '写真を左右中央に配置 .Left = .Left + (myWdt - myShape.Width) / 2 End With End If End Sub |
上のマクロは、「pic_take_it()」を実行すると、その中で、「pic_paste(…)」を呼び出して写真を貼付・調整しています。その方が、何かと便利なので分けました。
※LinkToFile:=Trueだと、画像リンクのみ作成
についてこれは、保存すると分かりますが、Trueだと画像のリンクのみを貼り、エクセルファイルには画像が保存されません。つまり、写真を挿入後保存し、写真をどこかに移動すると、×印になってしまいます。良い点として、エクセルのファイルサイズが小さく済むことですね。
pic_name = “~\picture.jpg”となっていますが、ファイル名を出席番号にすれば、
1 2 |
pic_name = "写真フォルダのパス" & "\" & n & ".JPG" ※ nを出席番号を表す数式等にする |
とすれば、マクロで連続で写真が貼り付けられますよ。
何か分からないことがあれば、フォームでご質問ください。