エクセルには,いくつかの処理を自動化する「マクロ機能」がある.これは便利な機能なので覚えておくと役に立つ.
まず,以前に使用していた waste.xlsx を開く.その中の「1人1日あたりごみの排出量」の列のセルを選択する(例えば札幌市のJ2セル).このセルに入力されている数値を小数点以下1桁の表示に変更するマクロを作ってみる.
「表示」メニュー右端の「マクロ」の「マクロと書いてある文字やその下のvマーク」をクリック→表示されるメニューから「マクロの記録」を選ぶ.
![]() |
![]() |
マクロ名を適当につける(デフォルトで"Macro1"になっているのを"小数点以下1桁"等に変更)→OKボタン.

書式を変更したいセル上で右クリック→「セルの書式設定」を選び,開かれた「セルの書式設定」ウィンドウ左側の窓の中の「数値」を選択する.小数点以下の桁数を1に変更→OKボタンで小数点以下1桁に表示される.あくまで見た目の変化だけで,セルの内容は元のままである.
![]() |
![]() |
「表示」メニュー「マクロ」の「マクロと書いてある文字やその下のvマーク」をクリックして表示される「記録終了」を選ぶ.これでマクロが記録された.

他の「1人1日あたりごみの排出量」のセル(例えば函館市)に移動して,リボンからマクロ→マクロの表示を選ぶ.登録されているマクロが表示されるので,選んで実行ボタンを押す.これでマクロが実行される.
![]() |
![]() |
複数のセルを選んで実行することもできるし,Ctrl+Yで何回も繰り返すことも可能.ただし,このファイルを保存しなければ,マクロも保存されないので注意.
次に,この保存されたマクロがどのような命令文で保存されているのか確認してみる.さきほどの「マクロ」ウィンドウで実行の代わりに編集を選ぶ.

すると新しく「Microsoft Visual Basic for Applications」と書かれたウインドウが開く.これがVBエディタと呼ばれるマクロの編集画面である.

マクロの内容を見てみよう.「Sub」とはこれよりマクロが始まるという宣言であり,「小数点以下1桁()」というのが自分が入力したマクロの名前.「End Sub」というのがマクロの終わりを示している.最初が「’」で始まる行はコメント行と言う.コメント行や空行(何も書かれていない行)は,マクロが実行される時には無視される.この例のように,マクロの説明などを記述しておけば,何をするためのマクロなのか,後から見てわかりやすい.
今回保存したマクロの命令文は「Selection.NumberFormatLocal = "0.0_ "」のたったの1行である.これは,簡単に言うと,「選択されているセルの数値形式を0.0(小数点以下1桁)にせよ」というものである.
今回はマクロの内容について詳しく知る必要は無い.とにかく自分が保存したマクロがどのようになっているのかを確認できるようになること.このマクロという機能を使うことによって,同じような作業を繰り返すのが楽になる.
【演習】以下の内容を実行するマクロを作成すること.
ここまでできたら,「ファイル」メニューから「名前を付けて保存」を選んでファイルを保存しておこう.ただし,プログラム(マクロ)が含まれたエクセルはファイル名の拡張子(かくちょうし)というドット(.)以降の文字が違うので注意.これまでのエクセルファイルは,waste.xlsx のように,拡張子が「xlsx」だったが,プログラムが含まれたエクセルは「xlsm」にする必要がある.「名前を付けて保存」のメニューで,ファイルの種類を「Excelマクロ有効ブック(*.xlsm)」を選択する.

もし,次の図のようなメニューが出た場合には,拡張子が「xlsm」になっていることを確認.

なお,拡張子が「xlsm」のファイルを開くときには警告が表示される.マクロを使ったコンピュータウイルスが仕込まれている場合があるためである.信頼できないファイルであれば,マクロを有効にしないこと.逆に,自分が作ったファイルなど,内容が信頼できる場合には「コンテンツの有効化」を押さないと,マクロ(プログラム)を実行することができない.

エクセルにも苦手な作業がある.例えば,同じ作業をパラメータを少しずつ変化させて計算するような場合,通常の使い方では人間が1回1回セルの値を変えていかなければならない.マクロで作業を記録して10回ぐらいの繰り返しなら大丈夫でも,100回,1000回となるとお手上げである.こういった作業を簡単にしてくれるのがプログラミングである.コンピュータに実行させる命令を書いたものをプログラムといい,プログラムを作成することをプログラミングという.エクセルには,作業内容を記録して再実行してくれるマクロと呼ばれる仕組みや,Visual Basic for Applications(以下,VBAと記す)というプログラム環境が用意されている.
先ほど演習したマクロも,VBAという言語で書かれている.エクセルが自動的に命令を記録してプログラムを作るか,人が命令を入力してプログラムを作るかという違いだけで,基本的な仕組みは変わらない.
【例題】セルの値を2つ読み込み,四則演算の結果をセルに書き込むプログラムを作れ
プログラムに値などを読み込むことを「入力」,計算結果などをセルに書き込んだり画面に表示したりすることを「出力」という.コンピュータにデータを入れるかコンピュータからデータを出すかということで,合わせて入出力と呼ばれている.
エクセルのファイルメニューから「新規」を選んで新しいファイルを作成し,A1~B2セルに x と y として 1 と 2 を入力しておく.

まず,プログラムを入力する画面を表示させる.「表示」メニューから「マクロ」ボタンを押す.もしくは「マクロ」と書かれた場所の下にある矢印を押して「マクロの表示」を選ぶ.すると,小さな「マクロ」ウィンドウが表示される.マクロ名にexampleと入力して「作成」ボタンを押すと,VBAの編集画面が表示される.
![]() |
![]() |

編集画面の,Sub~End Subまでの間の行に,プログラムを記述する.入力したマクロ名exampleが,Sub exampleと,このプログラムの名前になっている.マクロ名としては,英数字(アルファベットと数字)や漢字やアンダースコア( _ )等が使える.また,次の制約があり,使えないマクロ名を使おうとした場合,プログラム作成画面に進めない.
計算の途中で値を覚えさせておく場所を変数という.電卓のメモリと同じようなものだが,電卓と違って,いくつでも変数を作ることができるのが特徴.変数の名前は,アルファベットで始まるアルファベットと数字とアンダースコア(_)の組み合わせで255文字までが使える.アルファベットは大文字でも小文字でもいい.漢字も使えるが,命令文が半角アルファベットのため,いちいち日本語入力に切り替えるのは面倒なのでお勧めしない.
変数名の例:a,a1,a8b2,hensu,等
なるべく内容がわかるような変数を使うことが望ましい. たとえば,面積を覚えさせておく変数なら,area等とすれば,あとから見てわかりやすい.
変数を使う場合には,プログラムの最初で必ず変数の型(どのようなものを記憶させるか)と 名前を宣言しておく必要がある. 整数を記憶させるのであればInteger,実数ならDouble,文字ならStringなどを指定する.わからなければ,Variantという何でも格納してくれる型を使ってもいいが,整数や実数だとわかっていれば,明示しておいた方がエラーが少ない.
プログラム編集画面の「Sub example( )」という行の下に,次の箱の中の文を入力する.入力は全部小文字で構わないし,Enterキーを押した瞬間に一部が大文字に変化しても気にしないでいい.また,このテキストをコピーして貼り付けてもいい.
| Dim x As Integer, y As Integer |
| x=[B1] |
| y=[B2] |
| [A4]="x+y" |
| [B4]=x+y |
1行目のDimで始まる命令が,変数の宣言をしている部分である.ここでは,xもyも整数に限定することにし,As Integerという命令で,xやyがInteger(整数)だと宣言している.as integerと全部小文字で打ち込んでも,Enterキーを押すと自動的にAs Integerと最初の文字が大文字に変わる.逆に,変わらなかったらスペルミスなので見直そう.Integerに関しては,「in」まで入力すれば候補として「Integer」が表示されるので,その段階でTABキーを押せばIntegerと入力される.
2行目と3行目の[B1]や[B2]というのは,B1セルやB2セルを表す簡略式である.エクセルは複数のワークシートを扱えるし,セルには数字だけでなく,式やフォントやセルの大きさなどの情報までも含まれているので,詳しく指定するのであれば,x = Worksheets("sheet1").Range("B1").Valueとする.この演習では,なるべく簡易な命令でプログラムを見やすくするよう,省略できる命令は省略した形で示している.ネット情報を検索して出てくる一般的な書き方としては,x = Range("B1") をよく見かけると思う,いずれの方法でも,B1セルの値がxという変数に入力される.x = [b1]と小文字でもよい.Enterキーを押すと,=の両側には自動的にスペースが入る.
2行目のx=[B1]でB1セルの値がxに,3行目のy=[B2]でB2セルの値がyに代入される.「=」という記号を,ここでは代入という意味で使っている.右辺の値を左辺の変数やセルに入れるという意味で,数学の等号とは少し意味が違うので注意しよう.あとで出てくるが,n=n+1 という数学の等号としておかしい表現もプログラムではよく使われる.逆に,n+1=3 という表現は数学としては正しいが,プログラムでは間違いで,「=」の左には,代入される変数名1つしか書けない.
最後の4行目と5行目はよく似ているが,意味はまったく違う.4行目の[A4]="x+y"という表現は,A4セルに「x+y」という文字を入れなさいという命令である.一方,5行目の[B4]=x+yというのは,B4セルに x+y を計算して結果を入れなさいという命令になる.ダブルクォーテーション「"」で囲まれた部分は文字だと認識され,そのままの形でセルに出力される.5行目の[B4]=x+yの右辺には「"」がないので,x+yを計算しなさいという命令だと解釈され,結果がB4セルに出力される.
では,このプログラムを実行してみよう.編集画面の左上にあるエクセルに戻るアイコン「表示 Microsoft Excel (Alt+F11)」をクリックして,エクセルを表示させる.「表示」メニューから「マクロ」→「マクロの表示」でマクロ実行ウィンドウが表示される.
![]() |
![]() |
先ほど作ったexampleという名前のマクロ(プログラム)が選択されていることを確認し,「実行」ボタンを押す.プログラムに間違いがなければ,計算結果が表示されるはず.
![]() |
![]() |
【演習問題】B5~B7セルにそれぞれ,x-y,x*y,x/yを計算させるよう,プログラムに命令を追加すること.A5~A7セルにはそれぞれ,"x-y","x*y","x/y" という説明も出力すること.

今回の演習に関するレポート提出はないが,今回使ったファイルは program1.xlsm として自分のUSBディスクに保存しておくこと. 保存する場合,ファイルの種類を「Excelマクロ有効ブック(*.xlsm)」にすることを忘れずに.
プログラムを記述してエクセルシートに戻ってから,マクロの表示画面でexampleという名前をクリックしても「実行」ボタンが押せないときは,何らかの原因で正しい場所にプログラムが記述できていない場合がある.いったんエクセルを終了し,改めてエクセルを起動してからプログラムの記述をやり直すと,うまく行くことがある.