「Excelマクロを使いこなしてみたいけど、なにやら敷居が高そう」「Excel上級者がやることじゃないの?」と、半ば諦めている方も多いのではないでしょうか。しかし昨今では技術職に限らず、最低限のExcelマクロが触れることを求められることも増えています。
私自身もExcelマクロを始めた際はほぼ独学でしたが、最初の「何か難しそう」というハードルを越えるのに相当時間がかかった記憶があります。マクロ初心者の方にマクロを教える際には、どうしたら「意外とやってみると簡単」と思ってもらえるかを試行錯誤しています。
そんな私が、新人に楽しんでマクロを実践してもらおうと思い立って作ってみた「懐かしのファミコンゲームをExcelマクロで作ってみる!」チャレンジが非常に好評なので、今回皆さんにもお伝えしたいと思います。サンプルのExcelシートも全てダウンロードしていただけます。
Excelマクロが全然分からない方でも、今回の内容を実践すれば必ずExcelマクロができるようになります!ぜひ参考にしてください。
今回の概要
今回は、30代にとっては特に懐かしのファミコンゲーム、「スーパーマリオ」「マリオカート」「ロックマン2」「ツインビー」のシーンを、Excelマクロを使って再現することにチャレンジします。
- 初級編:スーパーマリオ
- 中級編:マリオカート
- 中級編:ロックマン
- 応用編:ツインビー
の順でお話しします。
注意点
PCのスペックによって、動きのスピードに差があります。「動きが遅い!」という場合がもしかしたらあるかもしれません。実際、処理が多岐にわたるラストのツインビーのgif動画では、私のPCのスペックおよばす32倍速で記録しています。ご了承ください。
初級編:スーパーマリオ
まずは初級編として「スーパーマリオ」を題材に、コピペを繰り返して、マリオを動かす方法を実践してみましょう。Excelで絵を描くのに時間をかけていられない!という方に向けて、完成済のサンプルシートはこちらからダウンロードできます。
- 指定した範囲のコピペを繰り返すマクロを作成する
今回のチャレンジの結果、再現できるマクロの挙動は、以下のgifを見れば分かります。※画像サイズが大きいのでご注意ください
それでは早速、具体的な手順と実践方法をお伝えします。
1. ドット絵を描画する
上記はExcelで直接描いたスーパーマリオのドット絵です。ドット絵を描くのは簡単ですが地道な作業です。Excelの行と列を調整して方眼紙状にして、ひとつひとつのセルを塗りつぶしていきます。
ワークシートの行の高さを0.6、列の幅を0.6にして方眼紙状にしましょう。今回の記事で使用するキャラは全て30×30におさまります。そして出来上がったマリオを基準に、バランスよく全体の絵を描いていきます。今回は、200行×300列で完成しました。
最初に全体を作ってしまうと、決めた範囲にキャラが収まらなくなったりして苦労します。先にキャラとパーツを作り、全体を見ながら配置と色を調整しましょう。ある程度の範囲を描いてコピペすると、スピーディーに進みます。
正直なところ、ドット絵の描画自体は今回のマクロ習得にはそこまで重要ではないことと、ゼロから描くのは非常に大変です。今回ご紹介するゲームごとにサンプルシートが用意してありますので、ぜひ有効活用して、マクロ作成を実践してみてください。
2. ドット絵を動かすための素材を作る
それでは、1.で作成したドット絵を動かすための準備を行います。地面にいるマリオが上のブロックまでジャンプする・ブロックを叩くとコインが出るというアクションを作ります。
マリオがジャンプする過程を表したのが以下の図となります。方法としては、1枚目の上に2枚目、2枚目の上に3枚目、というふうにコピペを重ねる挙動をするマクロを作ります。同じ要領で、コインの絵も作ってみます。マリオの真上のブロックの上におさまるように作ります。
枚数が多いほど動きが滑らかになりますが、あまり滑らかに動くとゲームらしくなくなりますし、ファイルが重たくなりますのでマリオとコインの差分は7枚にしてみました。マリオがブロックを叩いたらブロックが動くようにパターンを作ります。少し上下させるだけなので2枚にします。
これらを動きに反映させるためにコマ割りシートを別に作成し、マリオやコインのパラパラ用のセルを作りましょう。作り方は非常に簡単です、マリオやコインの一部分を何セルかずつずらしてコピペして、背景色を埋めるだけです。下図のようになればOKです。
原画はマクロを動かすための「クリップシート」として保存、またクリップシートをコピーして「原画シート(予備)」として保存しておいてください。
3.マクロを作成する
それでは材料が揃ったので、いよいよドット絵を動かしてみましょう。今回は、コピペを自動化する方法をとります。セル範囲を選んで、コピーして、貼り付ける、という一連の動作の繰り返しをマクロにやってもらうわけです。
下図がマクロを書き込む画面ですが、この画面は自動では表示されません。Excel画面の下のシートタブの上で右クリックして、上から5番目の「コードの表示」を選ぶとこの画面が出てきます。画面内・右枠の中に書いてあるのがマクロです。
分かりやすいようにコードをこちらに転記します。
コードの中身を詳しく解説します。
※’がついた行はコメントです。内容がわかりやすいように入れておくメモです。自由に何行でも入れることができます。
Option Explicit
Dim i
は、説明を省きます。疑問を持たずに次へ進んでください。
Sub MACRO1()
マクロの名前です。マクロの名前は自由に付けることができます。漢字でも大丈夫ですが、ここでは MACRO1 としました。
For i = 1 to 5
は、本章の最後にご説明します。
Sheets(“コマ割り”).Range(“AC120:BA180”).Copy
Sheets(“クリップ”).Range(BX120″).PasteSpecial
を、見てください。ここからがマクロの核です。
この2行は、
”コマ割り”シートのセル”AC120からBA180”をコピーして、
”クリップ”シートのセルBX120に貼り付けろ、という命令です。
コマ割りのAC120:BA180は、7枚のマリオの2枚目です。最初に既に1枚目のマリオが出ているので、2枚目からコピペします。
以下、わかりやすく2行セットにしてありますが、7枚目まで繰り返します。
コマ割りシートのセルは1枚ごとに範囲が変わり、クリップのセルは同じBX120です。
1枚目のマリオの上に6枚コピペを繰り返して、マリオを真上にジャンプさせるのです。
次はブロックです。2行セットで、ブロックを上下させます。
その次はコインです。1枚目でコインを登場させ、2枚目から7枚目でマリオのように真上にジャンプさせます。
最後にマリオを下ろします。今ジャンプして7枚目にいますから、さっきと逆に6枚目から1枚目まで重ねて地面に下ろします。
Application.CutCopyMode = False
というのは、コピーしてクリップボードにある絵をクリアさせる命令です。手作業でセルをコピーすると、選んだコピー範囲の周りが点線の点滅で強調されますよね。
手作業の場合はEscキーを押すとクリアされますが、マクロではこう書きます。
Next i
これは最初に出てきた For i = 1 to 5 と対になります。
わかりやすいように、ForとNext、Sheetsの文頭の位置をずらしていますが、最初のSheetsからApplicationまでで、
マリオが上へジャンプし、ブロックが揺れて、コインが飛び出し、マリオが着地する、という動きをするのですが、
ForとNextで挟み込むことで、その動きを繰り返させているのです。ここでは、1 to 5 として5回繰り返させています。
1 to 3 なら3回、応用して好きな回数にできます。
End Sub は Sub MACRO1() と対です。これで、MACRO1が終了します。
4.マクロを実行する
このマクロを動かすとどうなるのか、早速試してみましょう。ファイルをダウンロードしてもらうと、「クリップ」シートの右上に黄色い「マクロ1」というボタンがありますので、そちらをクリックしてみてください。マリオが5回ジャンプしてブロックを叩くアクションをします。
「マクロ2」をクリックしてみると、コインの出現時間を長くしているとともに、少し丸いコインの絵を1枚追加して、細いコインと交互に貼り付けることでコインが回転しているように見せています。コード画面の、MACRO1()の下にMACRO2()がありますので比べてみてください。追加したマクロがわかりますよ。
作成したマクロを動かすには
作ったマクロを実行する方法には、2つの方法があります。
ひとつは、Excelメニューです。Excelメニューの「開発」を選択し、開いたメニューの「マクロ」をクリックすると、マクロウィンドウが開きます。この中に今開いているファイルのマクロが表示されますので、マクロを選んで「実行」をクリックしましょう。設定したマクロの処理が実行されます。
もうひとつはこのマクロでも用いているマクロボタンです。具体的な作り方としては、Excelメニューの「挿入」を選択し、図形から好きな図形を選んでシートの好きなところに作ります。その図形の上で右クリックし、下から4番目「マクロの登録」を選択します。マクロの登録ウィンドウが開き、今開いているファイルのマクロが表示されますので、マクロを選んで「OK」をクリックします。
これでその図形がマクロボタンになり、クリックするだけでマクロを実行することができます。
5.より本格的なマクロを組んでみる
実際にマクロを動かした方は分かると思いますが、コピペなので、選択したセルが強調されてしまいます。今回のマクロは単なるコピペの自動化なので、マクロが持っている本来の機能までは活かせていません。マクロには手動ではできない様々な機能があります。
それらを使うともっと綺麗なアクションを実行させることができます。例えば、セルの色を変える命令等です。サッカーなどの観戦で、以下の2つのパターンを見たことがあるでしょうか。
- 客席で巨大なシャツを移動させるパフォーマンス
- 客席の一人ひとりがカラーボードを掲げて客席に大きな絵を作るパフォーマンス
今回のマクロ作成は前者に近い方法で、指定したセル範囲の画を動かしているのです。一方で、セルの色を変えるという命令は後者(カラーボードで画を描き・動かす手法)です。
ドットひとつひとつの色を瞬時に変えて様々な絵を作るのです。コピペではないのでセル範囲が目立つこともなく綺麗な画面になります。次の章では、もう少し本格的なマクロを作るのに挑戦しましょう。
中級編:マリオカート
ここでは、マリオカートを題材に、もう少し本格的なマクロを作ってみます。セルの色を変える命令をマクロで作ることでより再現度の高いものを目指します。
完成済みのサンプルシートはこちらからダウンロードできます。
- セル一つひとつの色を変更する処理を行う
今回のチャレンジの結果、再現できるマクロの挙動は、以下のgifを見れば分かります。※画像サイズが大きいのでご注意ください
それでは早速、具体的な手順と実践方法をお伝えします。
1.ドット絵を描画する
前章では、マクロでコピペ処理を行い、スーパーマリオのアクションを再現してみました。しかし、コピペのセル範囲が強調されてキレイに見えないこと、そして、パラパラ動画の要領のため沢山の素材を作らなければならないことが課題でした。
今回は一歩進んで、コピペではなく、セルひとつひとつの色を変えて動画にしてみましょう。
ドット絵の描画は先ほどと変わりません。ワークシートの行の高さを0.6、列の幅を0.6にして方眼紙状にして描きます。マリオ・ルイージ・ピーチ姫・キノピオを30×30セルに収まるように描いたら、バランスよく配置します。今回も全体のセルは200行×300列で収めるように作成しました。(絵-2)
できあがったら、シートごとコピーしてクリップシートと原画シート(予備)の2シートにしましょう。
2.背景の山を動かす仕組みを理解する
今回は背景を動かしてマリオ達が走っているように見せます。背景の山を動かすには、少しずつ山の絵が右から左に動いていく挙動を作ります。
これをコピペするのなら大量なセル画を作らなければなりませんが、直接セルの色を変えるのでセル画は不要です。ここで最初に作った原画が役に立ちます。
クリップシートと原画シートは最初は同じです。
- クリップシートの1列目を、原画シートの2列目からの色に変更する、
- クリップシートの1列目を、原画シートの3列目からの色に変更する
これを繰り返して行けば、徐々に山が左に寄っていき、9回目で下図のように
18回目で下図のようになり、300回目で一周して元の位置に戻ります。
ただし、開始位置をずらして300列分の色を持ってくると、原画シートには300列までしか色が無いので下図のように徐々に後ろの色が無くなってしまいます。ですので、原画シートから色を持ってくるときは、300列を超えたら頭の1列に戻りましょう。これで、山の部分が輪になったようにつながります。
3.マクロを作成する
先ほどと同様にコードをこちらに転記します。その後詳しい解説をします。
コードの中身を詳しく解説します。
i はループの回数、RETSUは列、GYOは行です。
For i = 1 to 151
1列ずつ動かすなら 1 to 301 ですが、動きを速くするため
1回に2列ずつで半分の 1 to 151にします。
For RETSU = 1 to 300
原画シートから 300列分
For GYO = 86 to 120
原画シートから 86-120行分
If RETSU + (i – 1) * 2 <= 300 Then 原画シートの300列目まではそのまま
Else
300列を超えたら1行目から
Sheets(“クリップ”).Cells(GYO,RETSU).Interior.Color
これがセルの色を変える命令です。
4.マクロを実行する
クリップシート右上の赤いSTARTボタンをクリックしてください。山の部分が右から左へと移動し、マリオたちが進んでいるように見えます。コピペと違ってセル範囲の強調がないのでセルに強調も発生しませんし、
マクロも、短い記述で済みます。
次の章ではこの仕組みを応用して、もう少し複雑な動きに挑戦してみましょう。
中級編:ロックマン
引き続き中級編として「ロックマン」を題材に、横(右から左)の動きだけでなく、縦の動きや、キャラクターの動きも加えたマクロを作ります。以下のような、ボスステージ前の通路を再現してみましょう。見覚えのあるという方も多いのではないでしょうか。
完成済みのサンプルシートはこちらからダウンロードできます。
- 縦・横だけでなく、組み合わせ動作をするマクロを作成する
今回のチャレンジの結果、再現できるマクロの挙動は、以下のgifを見れば分かります。※画像サイズが大きいのでご注意ください
それでは早速、具体的な手順と実践方法をお伝えします。
1. ドット絵を描画する
前回同様、セルひとつひとつの色を変える方法でマクロを作ってみましょう。ドット絵の描画は先ほどと変わりません。ワークシートの行の高さを0.6、列の幅を0.6にして方眼紙状にして描きます。
ロックマンを30×30セルに収まるように描いたら、ボス前の通路を描いて、バランスよく配置します。今回も全体のセルは200行×300列で収めるように作成しました。
原画が出来上がったら、シートごとコピーしてクリップシートと原画シート(予備)の2シートにしましょう。ロックマンの背景を、部屋の真ん中部分と同じ色にして、キャラシートに置いておきましょう。
2. ロックマンの動きを組み立てる
全体を通した動きを作ります。
- 左の扉が下から開いていく
- ロックマンが現れる
- ロックマンが右へ移動
- 右の扉が下から開いていく
- ロックマンが扉から出る
前回は右から左への動きだけでしたが、今回は上下と右へ動かしますので、ロックマンをコピペしておおよその位置を決めておきましょう。何行移動するのか、何列移動するのか、を計算しておく必要があります。
3. マクロを作成する
先ほどと同様にコードをこちらに転記します。その後詳しい解説をします。
※それぞれ異なる動きをする2種類のマクロが組まれていますが、1種類のみの記載です。
コードの中身を詳しく解説します。
i はループの回数、RETSUは列、GYOは行、CNTは扉のブロックを数えるカウントです。
‘画面初期化
扉が閉じた状態から始まります。
‘左扉UP
前作では右から左へ色を変えていきましたが、
扉は下から上へ色を変えていきます。
CNTでブロックの行数を数えて、
12行(ブロック3つ分)ごとにApplication.Waitで一秒止めて、扉がガクンガクンと開くようにしています。
‘ロックマン着地
:
‘右扉にアタック
計算しておいた移動行数や移動列数をもとに、
ロックマンを動かします。
‘右扉UP
左扉と同じで下から開きます。
‘右へスライディング
ロックマン退場です。
※マクロは一部記述を省略しています。
4. マクロを実行する
クリップシート右上のマクロ1ボタンをクリックしてみると、ロックマンがジャンプしながら通路を通り抜けていきます。同様に、マクロ2ボタンをクリックすると、ロックマンが通常ダッシュで走り抜け、ジャンプして扉を抜けます。なぜジャンプしながらスライディングができるのかはご愛嬌です…。
マクロ2では、ロックマンの画を新たに3つ作り使用しています。最後はさらなる応用編にチャレンジしてみましょう。
応用編:ツインビー
最後は応用編として、シューティングの名作「ツインビー」を題材に、より発展した複雑な動きをするマクロを作成します。ここまで進んできたあなたなら、難しいことはないはずです。ひとつひとつ、ご説明していきます。
完成済みのサンプルシートはこちらからダウンロードできます。
- 背景と複数のオブジェクトを同時に動かすマクロを作成する
今回のチャレンジの結果、再現できるマクロの挙動は、以下のgifを見れば分かります。※画像サイズが大きいのでご注意ください
それでは早速、具体的な手順と実践方法をお伝えします。
1. ドット絵を描画する
前章のロックマンでは、扉が動く・キャラが動く・また扉が動く、というように順番に背景やキャラを動かしていました。今回は、背景と複数のキャラを同時に動かすマクロを作ります。
まず、ドット絵を描画しますが、ツインビー・ウインビーと敵キャラは海の上を飛ばしますので背景を青で塗りつぶします。キャラは30×30に収めるようにしました。
背景は今回も200行×300列です。縦にスクロールさせますので、上端の陸地と下端の陸地がつながるように描くように気をつけましょう。今回も出来上がったものを、シートごとコピーしてクリップシートと原画シート(予備)の2シートに分けておきます。
2. ステージのシナリオ・動きを作る
ステージ上での全体の動きを作ります。右の陸地は一定の速度で手前にスクロールさせて、ゲームプレイ時の状態を作ります。その状態で、ツインビーや敵キャラを動かします。
- まず、海の手前右からツインビーがスタートする
- ツインビーがしばらく直進する
- 左前方に敵が出現、こちらにやってくる
- ツインビーが敵イチゴに向かって行く
- ツインビーがショットを放つ
このくらいでマクロを作り始めましょう。順番に動かして行った際に、どのあたりでツインビーと敵が対峙するかによって、次の動き・シナリオを決定します。それぞれを何行何列移動させるのか、動きを見ながら調整しましょう。
3. マクロを作成する
先ほどと同様にコードをこちらに転記します。その後詳しい解説をします。
コードの中身を詳しく解説します。
i はループの回数、RETSUは列、GYOは行です。
‘画面初期化
原画をコピーして、キャラが誰もいない状態から始めます。
‘陸地
右側の201列から300列の陸地を手前に引き込むようにスクロールさせます。画面は200行ですので、i = 0 To 200 のループで縦に一周します。
このループの中に、ツインビーや敵イチゴの動きを追加していきます。
’ツインビー
i が20までは直進します。
i が20になったら左斜めに進んでいきます。
i が20のとき敵イチゴが出現するからです。
i が50になるまで進み続けます。
ツインビーと敵を動かしてみたところ50あたりで対峙するからです。
’敵
i が20のとき出現させます。
i が98になるまで右斜め下に進んできます。
ツインビーと敵イチゴを動かしてみると50あたりで対峙するのですが、その後の展開のために、ツインビーのショットをかわして進み続けさせることにしました。
4. マクロを実行する
クリップシート右上、陸地の上の黄色いSTARTボタンをクリックしてください。今回は様々な動きを入れたので、実行速度が遅くなることが多いかもしれません。陸地スクロールをもう少し粗くすると速くなりますが、今回の事例では画面の綺麗さを優先しています。
まとめ
いかがでしたか。今回の記事では、「有名ファミコンゲームをExcelマクロで再現」するマクロの作り方をお伝えしました。Excelマクロを覚える上では、「自分が組んだマクロが思い通りに動いた」という経験をいかに楽しく積み重ねるかが重要だと考えています。サンプルシートをダウンロードしていただき、原画データを使えば、Excelで画を描く手間を省いてマクロが実践できます。ぜひ試してみてください。
最後に、今回のサンプルシートをまとめて置いておきます。
















