エクセルの写真帳票に簡単に写真を自動貼付できるようにするクラスモジュールを作りましたsatoの雑技術ノートWindows、Mac、プログラミングやら自作PC、PSP修理からAndroid端末やらiPad、カメラなどなど。広く浅く雑多に紹介するブログ。以前作った「エクセル写真帳」、割と好評でダウンロードされているようです。エクセル上で実際の写真を見ながらJPEGファイル名を一発で変えられる「エクセルJPEGリネーマ」と一緒に使うとより便利になります。ver1.0今回はエクセル写真帳の話ではなく、エクセル写真帳から必要と思われる機能を抜き出し、クラスモジュールにまとめたものを作りました、という話です。具体的に以下のような場面で活躍します。下請けで、元請けから指示されたExcel写真帳票で写真帳を作らなければならないときその場のノリでExcelで作った写真帳票にサクッと一発貼付したいときどちらの場合でも、帳票に合わせて写真貼付マクロを組むことは可能です。新規でマクロを組むのは割と時間がかかるというのと、多くの場合、こうして作成したマクロはその時しか使われないので、マクロ作成効果が薄れてしまうデメリットがあります。マクロ作成効果について上記、写真貼付を例にすると、100枚の写真をシートに手作業で貼り付けて一つ一つリサイズしていく作業が2時間で終わるとして、同じことをマクロでやろうとすると、そもそもマクロを組むのに3時間くらいかかるようなとき、マクロ作成効果は薄いと思われる。2時間で終わる仕事を3時間かけてやることは非効率だけれども、後日そのシートを使って同じ作業をする場合を想定すると、合計4時間かかる仕事を3時間で終わらせることができるので、この場合はマクロ作成効果が高いと思われる。同じような作業がその後もたくさんあると想定される場合にマクロの効果は絶大になる事実、前記したエクセル写真帳やJPEGリネーマは自分も仕事で使っていて、これを作ることに尽くした時間はトータルで何十時間もあるかもしれないけれど、これ作ってからの写真帳整理はわずか数分で終わっていて、これから先も一生数分で終わることが約束されています。AmazonKindle楽天ブックスですが、これはあくまでも自分で作った帳票で出す場合の話であって、人(他社など)からもらった帳票で作成しなければならない場合、マクロが入っていなければ手作業で作業しなければならない。これは恐ろしいことです。一度楽を覚えてしまうと、手作業で1枚ずつ写真を貼り付ける、なんてバカらしくてやる気にすらならないのです。そこで他社からもらった帳票にどうにかしてエクセル写真帳の機能を盛り込めないだろうか、ということから今回クラスモジュール化することを考え付きました。前置きが長くてごめんなさい。写真帳となるExcelのひな形を準備してください。以下のサンプルにあるような、縦に写真が並ぶごく一般的な帳票に対応しています。サンプル帳票あらかじめこの帳票はコピーして大量にページを作っておいてください。1ページ目と2ページ目で行や列が違ったりなんかするとうまく貼付できないので、行と列の相対的な位置関係は他のページでも必ず1ページ目と同じにしてください。クラスモジュールを以下よりダウンロードします。ファイルはzip形式なので解凍して中身(SetPictures.cls)を取り出してください。クラスモジュールをダウンロードクラスモジュールをインポートダウンロードしたクラスモジュール(ファイル名:SetPictures.cls)をお使いの写真帳内にインポートします。Editor)を立ち上げます。VBEはVBA(マクロ)の操作をするためのエディタでエクセルに標準で搭載されています。VBEが立ち上がったら画面左側にあるプロジェクトウィンドウ内のエクセルファイル名がカッコ書きで書いてある部分を右クリック→「ファイルのインポート」をクリックします。SetPictures.clsを選択してインポートすると、プロジェクトウィンドウ内にクラスモジュールが追加されます。標準モジュールを作りますクラスモジュールのインポートと同じく、右クリックより「挿入」→「標準モジュール」を選択します。クラスをインスタンス化します追加したModule1をダブルクリックしてコード入力部分(VBE右側の部分)に以下のコードを丸ごとコピー&ペーストしてください。Subクラス内のsetpictureプロシージャに8つの引数を設定クラスをインスタンス化してsetpictureプロシージャに8つの引数を与えてあげます。コードの5行目()内のカンマ区切りの8つの数字が引数です。デフォルトで引数が設定されています。この引数はお使いの写真帳ごとに異なるので正しい値を入力してください。以下は8つの引数の説明です。1ページの行数1ページの列数1枚目の写真を貼る位置(行)1枚目の写真を貼る位置(列)1ページ内の写真枚数1枚目写真と2枚目写真の間隔(行)写真の横幅(ポイント)写真の縦幅(ポイント)画像の大きさ(ポイント)の考え方1ポイントの大きさが1/72インチです。72」mmになります。エクセル上で横10cmの画像を貼りたい場合は以下計算によりポイント数を算出できます。283ポイントマクロsetpicture()を実行すべての引数を設定したら「Alt+F8」キーを押してsetpicture()を実行します。マクロを実行して写真データのあるフォルダを指定するとフォルダ内の写真が一気にエクセルシート上に貼り付きます。まとめうまく使えましたか?元々は自分用ですし、そもそもクラスモジュールの使い方が果たしてこれで良いのかどうか正直わかりません。僕が作るVBAのプログラムは100%ネットで得た知識で構成されています。スマートで便利なやり方があるかもしれません。VBAに詳しい方、本業の方、がもしこの記事をご覧になりましたら、他に何かいい方法とかあればどんどん教えて頂ければありがたいです。