[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『画像挿入のマクロ』(Hana)
商品カタログ作成中です。
画像を挿入するいいやり方ありませんでしょうか?
画像は一つのフォルダの中に入っていてjpgです。
一行目 画像 商品コード 分類 個数 単価
二行目 画像 a1234 Bag 5 5000
三行目 画像 b1245 Shirt 8 1000
という感じでB2のセルから縦にずっと画像を貼り付けたいです。
前任者がマクロを使って商品画像を挿入していたらしいですがやり方がさっぱりです。
どなたか教えていただけませんか?
ただ、前任者さんが作ったファイルは最終的にエクセルのファイルがものすごく重くなっていたようです。
一つ一つ手で挿入した場合は1Mもいかないようなファイルでもそのマクロのファイルは10Mなどになったようです。
可能でしたらそうならないマクロがあればうれしいです。
一つの画像の容量は5KBくらいですが全体で写真が何百個もはいります。
すみませんがよろしくお願いします。
< 使用 Excel:Office365、使用 OS:Windows10 >
>前任者がマクロを使って商品画像を挿入していたらしいですが
そのコードは提示できませんか? 回答者がコードを提示しても、やっぱり重かったでした、で片付け られてしまいそうな気がしますので。
※カタログは社内で閲覧するものですか? 客先に見せる物ですか?
というのは、そもそもエクセルで作成しないといけないものなのか? という疑問が浮かんできましたので。
必ず軽くなる、と断言はできませんが、HTMLで作成してもいい ような気がします。 ※HTMLコードを私が提示する、という意味ではありません。 (OK) 2021/02/25(木) 11:26
解決案ではないですが 最新のExcelでもそうなるのかは試していないのでわかりませんが カタログやチラシを作成するときに画像を貼り付け新しく作り変えるときに 前の画像を消して画像を挿入するなどしているとExcelのファイル容量はとてつもなく大きくなっていきました ひな形を作っておき作り替えるときはひな形から新しく作成すると容量は抑えられるのではないでしょうか いつも新しいファイルから作っていますというならすみません (なるへそ) 2021/02/25(木) 11:41
「開発」タブの「マクロの記録」
「挿入」タブの「画像」(省略)で画像を挿入
「開発」タブの「記録終了」、そして「Visual Basic」
これで基本的な画像挿入マクロができていると思います。
わからないところは検索して調べてみてください。
検索してもわからないところがあったらまたここで聞いてみてください。
(めざめるパワー) 2021/02/25(木) 12:21
(OK)様
残念ながらそのマクロが無いのです。。軽ければ最高ですが重くてもいいので、マクロで作れたらと思い質問いたしました。
カタログは客先に見せるものです。お客様に送って、発注個数を入力してもらい送り返してもらっています。
HTMLでも、というのはホームページを作るということでしょうか?
まったく知らない世界なのですが、そのほうが(一度覚えれば)簡単にできますか?それならその方面でも考えたいです。検索してみたのですがホームページを作るもののようにしか見えないので、もしよければもう少し詳しく教えていただけますか?検索のヒントのワードなどいただければ助かります。
(なるへそ)様
毎回新規のエクセルシートに入力して画像を挿入していたようです。
アドバイスありがとうございます。前前任者がつかうC//?(すみませんわかりません)をつかって画像を挿入する方法だと軽かったようですが、その方法は全く不明です。。
(めざめるパワー)様
ありがとうございます。
開発タブを作ってマクロの記録、それの終了は一応できるようになりました。
が、画像がなん百個もあり、随時変わるので同じ画像を挿入するわけではないのです。
画像は「商品コード.jpg」で保存しています。
(Hana) 2021/02/26(金) 11:19
WEBページ作成に必要なコードの知識はホームページ(トップページ) も商品紹介のページも基本的に変わらないと思います。 あとはデザインの問題になると思います。
エクセルではなくWEBページで行う、というのなら、セキュリティ対策 も必要にになってくると思います。
場合によっては外注も必要になってくると思います。 (OK) 2021/02/26(金) 19:20
5KBの画像を数百個... すべてファイルに画像を埋め込む形式なら、単純計算で400個で約2MB、800個で約4MB。 2000個でやっと10MBくらいですか。なんか大きいっすね。
リンクで埋め込むならファイルサイズはそんなに大きくならないでしょうけど、 エクセルファイルと画像の保存場所(フォルダ)をセットで運用しないといけなくなります。
エクセルファイルだけでの運用を取るか、ファイルサイズの肥大回避を取るか マクロで実現するにしても設計方針が違ってくるでしょうから、 そこがひとつポイント(分岐点)になるかと思います。
以下は、エクセルファイルだけでの運用を取ったとしてのお話ですが...
画像挿入によるファイルサイズの肥大については、 私の環境(Excel2010)では「小さいサイズでAddPicture」することで軽減できました。 元画像よりデカいサイズでAddPictureしても、ゼロ幅でAddPictureしても、 ファイルに埋め込まれた[media]内の画像ファイルは元画像のまま埋め込まれています。 サムネイル程度の大きさでAddPictureしたら[media]内の画像ファイルはかなり小さいです。
但しこの場合、 ファイルサイズが小さく抑えられた代わりに、元画像の解像度は失われてしまいます。 小さいサイズでAddPictureした後でPictureの縦横サイズを大きく引き伸ばしても、 元画像の鮮明さは得られません。 「そんなことしないよ」って事なら別に問題ないですけど、あり得るのなら これもひとつポイントになるんじゃないでしょうか。
そういう設計方針に関わる部分は当事者にしか判断出来ませんので、 仮に「なんでもいいから作って!」という風に言われたとしても、作る側は二の足踏みたくなるでしょうね。
(↓は上述の「小さいサイズでAddPicture」の検証に使った画像挿入コードです。ついでに載せときます)
Option Explicit
Sub test() Dim v As Variant v = SelectImageFiles("画像ファイルの選択") If VarType(v) = vbEmpty Then Exit Sub Workbooks.Add Dim r As Long Application.ScreenUpdating = False For r = 1 To UBound(v) Cells(r + 1, 1).Select Cells(r + 1, 2) = v(r) With ActiveSheet.Shapes.AddPicture(v(r), False, True, ActiveCell.Left, ActiveCell.Top, 0, 0) .ScaleWidth 1, msoTrue .ScaleHeight 1, msoTrue .LockAspectRatio = msoTrue .Width = ActiveCell.Width On Error Resume Next ActiveCell.RowHeight = .Height On Error GoTo 0 ActiveSheet.Shapes.AddPicture v(r), False, True, .Left, .Top, .Width, .Height .Delete End With Next Application.ScreenUpdating = True End Sub
Private Function SelectImageFiles(Optional caption As String, Optional iniPath As String) As Variant With Application.FileDialog(msoFileDialogFilePicker) .AllowMultiSelect = True .Title = caption .ButtonName = "選択(&S)" .InitialFileName = iniPath .Filters.Clear .Filters.Add "画像ファイル", "*.gif;*.jpg;*.jpeg;*.jpe;*.png;*.bmp;*.tif;*.tiff" If .Show Then Dim i As Long, Ary() As Variant ReDim Ary(1 To .SelectedItems.Count) For i = 1 To .SelectedItems.Count Ary(i) = .SelectedItems(i) Next SelectImageFiles = Ary End If End With End Function
(白茶) 2021/02/26(金) 23:10
Sub コーチ画像resized()
Dim p As String
Dim h As Range
'写真の保存場所
p = "C:\Users\いろいろ"
'現在表示されている写真は一度削除する
ActiveSheet.Pictures.Delete
'商品名が入力されている行まで繰り返す
For Each h In Range("D4:D" & Range("C1048576").End(xlUp).Row)
'写真ファイルが保存されている時
If Dir(p & h) <> "" Then
With ActiveSheet.Pictures.Insert(p & h)
.Name = h
'写真ファイル名が入力されているセルから2つ左のセルに挿入
.Top = h.Offset(0, -2).Top
.Left = h.Offset(0, -2).Left
'写真サイズの設定
.Width = h.Offset(0, 1).Width
.Height = h.Offset(0, 1).Height
'既存のPictures.Insertを生かして、クリップボード経由でJPEG形式で貼り付ける時
.Cut
End With
h.Offset(0, -2).Activate
ActiveSheet.PasteSpecial Format:="図 (JPEG)", Link:=False, DisplayAsIcon:=False
End If
Next
End Sub
これ参考になるでしょうか?
(Hana) 2021/03/04(木) 10:10
そうなんですね!セキュリティとかになってくるともう全くわからないので今まで通りエクセルでしようと思います。ありがとうございます。
pgt様
客先に見せるもののため、リンクではなく画像が必要となります。コメントありがとうございました。
白茶様
ありがとうございます!!
商品画像はもとは写真なのでひとつ何メガとかの大きなものですがエクセルを作る前にソフト?で小さくした状態です。
マクロ作っていただいてありがとうございます!画像が入れてあるフォルダの名前は("画像ファイルの選択")ここにいれたらいいのでしょうか??
(Hana) 2021/03/04(木) 10:17
元のマクロ入手出来たのならそれでも良いんじゃないかと思いますが、 それでも尚ファイルサイズを抑える必要がある状況だと考えて...
私の例示したコードも画面上でやってる事はほぼ同じですけど、保存結果には違いが出そうです。 >何メガとかの大きなもの を直接使用した場合で比較すると、 たぶん、元のマクロの方がファイルサイズをより抑えられると思いますね。
私の例示したコードは新規ブックに画像を挿入しているので既定解像度(220dpiとか)になると思います。 (画面上に小さく挿入して保存する時の効果だけにテーマを絞ってましたからね) あらかじめExcelのオプションの[既定の解像度の設定]を「96ppi」にしたファイルを 画像の挿入先として実行・保存した場合は96dpiになりましたので更に小さく抑えられそうですが、 たちまち私の例示したコードはそういう作りになってないです。
一方、図として貼り付けしている元のマクロの方を試してみましたけど、 私の環境では結果的に120dpiで保存されてました。 これは、あらかじめ[既定の解像度の設定]を「96ppi」にしたファイルを 画像の挿入先として実行・保存した場合も同じ結果でした。(なんで?)
もし元画像が72dpi画像だったりすると、元画像よりエクセルの方が大きくなる現象も有り得る話ですね。 この結果だけ見れば、96ppi設定ファイルに「小さくAddPicture」する事で、 元のマクロよりもファイルサイズを小さく抑えられる可能性はありそうな気もします。
AddPictureの場合、 元画像のdpi設定の関係で結果的に「大きくAddPicture」になってしまった場合も、 元画像のファイルサイズより大きいサイズの画像として格納される事にはなってなさそうですから。 (但し私も精査した訳ではありませんのであしからず)
とは言うものの... 5KBのjpg画像って、たぶん結構ちっちゃいですよね元々。
私の場合、2MBくらいのデジカメ画像を「小さいサイズでAddPicture」したので、 250個で520MB(平均2MB)のものが1.26MB(平均5KB)になり、 こうかはばつぐんだ! に見えましたが、実際にはそこまで効果的ではないかも知れません。
元画像に左右される状況なので、 ここから先はご自身で検証・試行錯誤していかないとですね。
あと >画像が入れてあるフォルダの名前は("画像ファイルの選択")ここにいれたらいいのでしょうか??
私の例示したコードは、あらかじめフォルダを指定しておいて実行する作りにしてません。 実行中に対象画像ファイルをユーザー自身が選択する作りになってます。
私からは以上です
(白茶) 2021/03/04(木) 22:35
> 私の例示したコードは、あらかじめフォルダを指定しておいて実行する作りにしてません。
実行中に対象画像ファイルをユーザー自身が選択する作りになってます。
というのは、自分で一つ一つ挿入するってことでしょうか???ごめんなさいちょっと意味が分からないのですが、ご提示いただいたマクロは何をするんでしょうか??
(Hana) 2021/03/07(日) 02:02
testの冒頭でSelectImageFilesというサブプロシージャを呼び出してますが、 コイツが「ファイルを開く」ダイアログに似たものを画面に出してくれます。 そこで人間様が挿入したい画像ファイルを自分で選択(複数選択可)すれば、 選択した画像ファイルのフルパスを配列でtestに連れて戻ってきますので、 フルパスの配列を受取ったtest側で配列に対してループで順次処理していくという流れのものです。 (まぁ見たまんまです。ええ。無駄に遠回りしてると言う事になりますですねー)
元のマクロでは フォルダを固定値で指定しておいて、そのフォルダ内にある画像ファイルをすべて挿入対象にしています。 私の例示したコードは 実行の都度、挿入したい画像ファイルを人間様が明示的に選択しなければなりません。 そこは私にとって、実験するのにその方が都合が良かった。というだけの事です。
そこあんまり見ててもしょうがないと思いますよ。
元のマクロが手に入った今となっては、 本題に必要な部分だけ参考にして頂けれは宜しいかと。 とは言え、もはや参考にする程の事なんぞ残ってない様にも思いますけど^^; 元のマクロの流れを見るに、シート上の画像サイズはセルに合わせているだけの様ですから、 私の書いたコードの様に2回もAddPictureする必要も無いでしょうし。
元のマクロで ・Pictures.Insertしてから ・ソイツのTop、Left、Width、Heightを調整し、 ・CutしてPasteSpecial(Format:="図 (JPEG)", Link:=False, DisplayAsIcon:=False)
としている部分を ・AddPictureでTop、Left、Width、Heightを指定しながら(リンクなしで)画像挿入 に変更した場合に保存結果がどうなってるか? (元のマクロのままの方が小さいか大きいか) ←要検証 と、 Excelのオプションの[既定の解像度の設定]を「96ppi」にしたファイルで実行したらどうなるか? ←要検証
私がお示し出来た情報から得られるものなんて、そんだけです。
(白茶) 2021/03/08(月) 21:40
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.