Excel VBAで作るドット絵タイプ巨大モザイクアート


ホーム全般的な解説タイプ別の作り方よくある質問ソフトの動画解説くっきりんこブログアクセスお問い合わせ


このページの解説では以下のソフトウェアを使用します。

名称 使い方の解説ページ ダウンロードページ
デジカメまとめてフォトモザイク 動画解説 ダウンロードページ
エクセルも使います。


エクセルでドット絵タイプのモザイクアートを作る


 このページではエクセルでドット絵タイプのモザイクアートを作っていきます。

 これが、



 こうなって、



 こうなります。これはエクセルに写真を貼り付けているのではなく、エクセルのセル一つ一つを塗り潰して描いたものです。 セルを塗り潰す処理にはエクセルVBAを使用しています。 このページの後半の解説はエクセルVBAが分からないとついてこれないかもしれないのですが、基本的なエクセルVBAを使用していますので、エクセルVBAの勉強を始めるのにはちょうど良いレベルの解説かもしれません。



 A4用紙に印刷すると、こうです。これがエクセルVBAで出来るのです。それがどうしたと言われそうですが、面白いじゃない。






デジカメまとめてフォトモザイクの新機能紹介


 2020年4月に公開した「デジカメまとめてフォトモザイク1.17.0.0」では、ドット絵タイプのモザイクアートを作ることができます。 また、コマ画像のファイル名を配置位置の通りにCSV形式のファイルに書き出すことができます。 このCSVファイルをエクセルで編集すれば、ドット絵タイプのモザイクアートをエクセルで作ることができます。

 編集例を下図に示します。

 等倍で表示としてリンゴの辺りを拡大表示してみますと、単色の正方形の集合であることが分かります。

 このページでは、このドット絵タイプモザイクアートを元にエクセルでドット絵タイプモザイクアートを作っていきます。






単色のコマ画像を用意する


 ドット絵タイプモザイクアートを作る場合でもデジカメまとめてフォトモザイクの基本的な使い方は変わりません。 デジカメまとめてフォトモザイクのコマ画像はJPEG形式の画像ですから、ドット絵タイプモザイクアートを作る場合には単色のJPEG形式の画像を用意し、これらをコマ画像として利用します。
 どうやって作ってもよいですが、ここでは無料で作るためにWindows10に付属しているペイントというソフトを使うことにします。 ご存知だと思いますが、Windowsの左下のスタートボタンからWindowsアクセサリの中のペイントを起動します。



 色というボタンから色を選択します。好みの色がない場合は色の編集というところから色を選択することもできます。 今回は赤色を選択しました。



 ツールボタンからバケツのアイコンを選択し



 キャンバスのエリアをクリックして赤く塗りつぶします。



 名前を付けて保存とします。ファイルの種類は必ずJPEG形式にしてください。デジカメまとめてフォトモザイクのコマ画像はJPEG形式しか対応していません。



 同様の操作で15個のファイルを作成しカラーチップ2というフォルダーに保存しました。






デジカメまとめてフォトモザイクの設定


 デジカメまとめてフォトモザイクの操作についてですが、ドット絵タイプモザイクアートを作る場合も、通常のフォトモザイクを作る場合と同様に操作しますので何も難しいことはありません。

 コマ画像リストに先程のカラーチップ2というフォルダーを指定します。



 コマ画像リストに単色の画像が15個追加されました。



 フォトモザイク設定を以下のようにします。ポイントは以下の3点です。

  • 一コマの画像サイズを正方形にする。
  • 色補正で「背景画像を補正する」にだけチェックし設定値を検討する。今回は100にした。
  • コマ画像の選抜方法を「ドット絵タイプ」にする。

画像のクリックで拡大表示します。





フォトモザイクを作成しCSVファイルをエクセルで編集する


 「フォトモザイク」「作成」とすれば、冒頭で紹介したドット絵タイプモザイクアートを作ることができます。



 「コマ画像の位置を保存」「ファイル名を配置位置に保存」とします。



 コマ画像のファイル名を配置位置に記載したCSV形式のファイルが保存されます。これをエクセルで開きます。



 拡張子の「.JPG」「.jpg」を消す操作を行います。エクセルで「置換」とします。



 検索する文字列を「.jpg」にし、置換後の文字列は空欄のままにします。 その状態で「すべて置換」ボタンを押します。



 「.jpg」「.JPG」の両方が全てのセルから削除されます。



 エクセルのセルに色名が記載された状態にすることができました。



 セルを全選択し、縦横のサイズを調整して全セルを正方形にします。



 セルを全選択して「セルの書式設定」とします。



 「縮小して全体を表示する」とします。



 拡大表示してみると、オレンジの4文字の文字列は縮小表示されて、セル範囲内に収まるように文字サイズが調整されました。



 入力範囲を全選択して罫線を格子状に引きます。



 印刷としてみます。用紙サイズだけ設定して、



 印刷せずに元に戻して縮小表示するとこのような感じで、点線で囲まれた範囲がA4用紙一枚に印刷できる状態です。



 ページタブから印刷タイトルとして、



 フッターにページ番号を入れておきます。



 A4用紙に印刷します。今回の例ではA4用紙32枚になるのですが、一枚だけ印刷してみました。



 このように印刷できます。下記の画像は印刷したA4用紙をスキャンしたものです。


画像のクリックで拡大表示します。



 マジックか色鉛筆かを使用して、全ての格子を記載されている色で塗り潰し、A4用紙を順番通りに並べればモザイクアートが完成します。






セルに記載された色でセルを塗り潰すエクセルマクロを作る


 手作業で塗り潰すのも大変ですから、セルに記載された色名の通りに、セルの色を塗り分けるエクセルマクロを作りました。



 マクロを実行すると全セルを色名の通りの色に塗り潰すことができます。 エクセルの右下のスライダーで表示倍率を10%とすることで全体を表示することができます。



 リンゴの辺りを拡大表示にするとこんな感じです。


画像のクリックで拡大表示します。



 A4用紙に印刷するとすると、A4用紙32枚に分割されるのですが、試しに一枚だけ印刷してみました。下記の画像は印刷したA4用紙をスキャンしたものです。


画像のクリックで拡大表示します。



 今回の例ではA4用紙32枚だったのですが、実際に何枚になるのかはセルの縦横の大きさによって決まってきます。






全部印刷して並べてみる




 A4用紙32枚を全部印刷してみました。



 順番通りに並べてみました。



 一部分を拡大してみました。文字は消した方が良かったです。罫線も消した方が良かったかもしれません。 一コマが大きすぎたかもしれません。



 以下の三点に注意して、やり直してみます。

  • 一コマをもっと小さくする
  • 文字を消す
  • 罫線を消す





66万6千コマのモザイクアートを作り直す


 デジカメまとめてフォトモザイクで、以下の設定にして作り直します。

  • フォトモザイク画像サイズを最大サイズに設定する。最大サイズは長辺が「10000」です。
  • 一コマの画像サイズを最小サイズに設定する。最小サイズは「10」です。
  • 枚数の確認欄に、横方向「1000」、高さ方向「666」総コマ数「666000」と表示されている。
  • 「コマ画像を補正する」のチェックを外し、「背景画像を補正する」のチェックを入れ、設定値は「100」にする。(この設定値の最適値は使用する画像によって変わってきますので必要に応じて変更してください。)
  • コマ画像選抜方法は「ドット絵タイプ」を選択する。

画像のクリックで拡大表示します。



 以下のモザイクアートができました。



 「ファイル名を配置位置に保存」とします。



 保存したCSVファイルをエクセルで開きます。



 「.jpg」を空欄に置換して、消します。



 全セルの表示から「.jpg」が消えました。セル数は666000も有ります。この処理には5分程度かかりました。



 エクセルのVBAをこのように書き換えました。



 書き換えたポイントは以下の2点です。

  • For j = 1 To 666 として、高さ方向の処理範囲をセルの入力範囲全体に広げました。
  • For i = 1 To 1000 として、横方向の処理範囲をセルの入力範囲全体に広げました。

 ところが、これでやってみると処理が途中で止まってしまいます。666000個のセルの色を一気に塗り替えることはできないようです。 こういったところがエクセルVBAの頼りないところです。エクセルさん、もっとしっかりしていただかないと。



 あらためて、やり直します。セルを全選択してセルの幅と高さを2ピクセルにします。



 エクセルの表示を30%にします。これ以上小さくすると以下のVBAの処理中に画面表示がもたつき、エクセルの処理が途中で止まってしまいます。 表示は30%以上としてください。セルは真っ白で、何も入力されていないように見えますが、画面上部のfxの欄を見ると、選択したセルには「黒」と入力されていることが確認できます。



 エクセルのVBAを書き換えます。横方向の処理範囲を1から100の範囲に縮めました。 こうすることで一気に塗り潰されるエクセルのセル数が先程より少なくなりますから、途中で処理が止まってしまうことはありません。



 エクセルのVBAを実行してみました。左端100列のセル範囲だけが指定の色(セルに記載されている色名)で塗り潰されました。



 引き続きエクセルのVBAを、横方向101から200の範囲に書き換えます。



 エクセルのVBAを実行してみました。左端の101列から200列のセル範囲だけが指定の色(セルに記載されている色名)で塗り潰されました。



 引き続きエクセルのVBAを、横方向201から300の範囲に書き換えます。



 エクセルのVBAを実行してみました。左端の201列から300列のセル範囲だけが指定の色(セルに記載されている色名)で塗り潰されました。



 以下同様に100列づつ塗り潰していき、最終的には以下のVBAを実行します。横方向901から1000の範囲を塗りつぶします。



 出来ました。画像の範囲外が黒く塗りつぶされているのは想定外です。何かのバグのようですが、大きな問題はありませんでした。 このバグは私の書いたコードに起因するものではなくエクセルのVBAが頼りないのだと思います。


画像のクリックで拡大表示します。



 セルを全選択して右クリックメニューから「数式と値のクリア」とします。



 セルに記載されていた色名がすべてクリアされました。理由は分かりませんが、先程黒く塗りつぶされていた、画像の範囲外のセルは通常の白色に戻りました。


画像のクリックで拡大表示します。



 ページレイアウトタブから印刷タイトルとします。



 フッターにページ番号を入れておきます。



 印刷として、拡大縮小オプションとします。


画像のクリックで拡大表示します。



 拡大縮小を選んで、245%とします。ここの倍率を変えることで印刷サイズを変更することができます。



 印刷プレビュー画面を見ると縦長に引き延ばされているように見えます。なんだか嫌な予感がしますが、そのまま印刷しました。


画像のクリックで拡大表示できます。



 途中まで印刷して並べてみたのですが、縦長に引き延ばされています。



 いろいろ考えたのですが、ページレイアウトモードに切り替えて、セルの幅、高さを再調整すればよいことが分かりました。 エクセルの画面右下の赤丸で囲ったボタンからページレイアウトモードに切り替え、セルを全選択してセル幅、セル高さを2ピクセルに調整しました。


画像のクリックで拡大表示できます。



 先程と同じ拡大縮小の設定で印刷してみました。印刷プレビューを見る感じでは問題なさそうです。


画像のクリックで拡大表示できます。



 全部印刷して順番通りに並べてみました。エクセルで作るドット絵タイプモザイクアートの完成です。



 一部を拡大してみると下図のように、およそ5mm角のドットの集まりであることが分かります。


2020年4月5日







ホームへ戻る