日々の仕事の中でエクセルを使った単純な繰り返し作業のパソコン業務はありませんか?
必要なデータだけ抜き出して、別のエクセルに貼り付けるとかあったなぁ
そのような業務はエクセルに標準で搭載されている機能で全て自動化出来るかもしれません。
この記事ではエクセルの標準機能で使用できるVBAというプログラミング言語を使用する方法と、例としていくつかプログラムを紹介していきます。
そもそもプログラミングとはどんなものかを知りたい方はこちらもどうぞ
プログラミングをエクセルで行う?
プログラミングは「関数」とは違います
エクセルでプログラミングっぽいものといってすぐに浮かぶのは、セルに入力する「=SUM(A1:C1)」や「=if(・・・」のような関数ではないでしょうか?
これもプログラミングの一種と言っても良いかもしれませんが、この記事で紹介するエクセルでのプログラミングというのはもう少し複雑なものです。
特定のファイルをプログラムから開いてデータを処理したり、データを並べ替えたり、グラフを描画したりなど関数だけではできない処理も可能なものになります。
VBAというプログラミング言語を使用する
エクセルでのプログラミングには「VBA(Visual Basic for Applications)」というMicrosoftのOfficeシリーズで使用できる拡張機能で使用するプログラミング言語となります。
簡単にいうとOffice製品を操作できる専用のプログラミング言語です。
Office製品の拡張機能でもできる事はかなり豊富で、ファイルの操作はもちろん、ウィンドウなどを出す「GUI」を表示するプログラムも作れますし、Webからデータを取ってくる事も可能です。
複雑なものだと作るとなると必要な知識量は多くなりますし、作る作業量自体も多くなり大変になりますが、繰り返し作業の自動化など単純なプログラムであれば、少し勉強することでプログラミング素人でも作ることができるようになります。
Winスクールで無料体験・説明を受けてみる→
資格と仕事に強い!個人レッスンのプログラミングスクール【Winスクール】
プログラミングをエクセルで行う方法
エクセルでプログラミングを行うための設定をする
新しくインストールなどは行わず、表示する設定を行うだけです。
- 開発タブを表示させる
- マクロ有効ブックとして保存する
- 開発環境を開く
- 開発タブを表示させる
-
まずはプログラミングを行う機能にアクセスするため、「開発」というタブをエクセルに表示させます。
まずは、印刷や保存などを行う際に押す「ファイル」タブをクリックします。
印刷や保存などが並んでいる画面の左下に表示されている「オプション」をクリックします。
オプションをクリックするとオプション設定用の画面ができますので、そこで「リボンのユーザー設定」から「開発」にチェックマークを付けます。
これでエクセルでのプログラミングが可能な設定ができました。
- マクロ有効ブックとして保存する
-
一度保存を行いましょう。
「ファイル」から「名前をつけて保存」を選択します。
ファイル名を決めて保存を行うのですが、その際に「ファイルの種類」を「マクロ有効ブック.xlms」に設定します。
この設定を行わないと、プログラミングされた機能が保存されなくなりますので注意です。
- 開発環境を開く
-
先程追加した「開発タブ」を開き、左端の「Visial Basic」を選択します。
開発環境が開きますが、このままだとまだプログラムを打てない状態ですので「挿入」から「標準モジュール」を選択します。
これでいつでもプログラムを書き始めることが可能となりました。
プログラミングをエクセルで体験
プログラミングを行う準備は整いましたので、実際にエクセルでプログラミングを行ってみます。
ここでは基本的なものしか扱いませんが、実際にプログラムを作る際にはよく使われる文法を紹介します。
こちらも参考になるのでどうぞ
指定のセルに値を入れてみる
指定したセルに値を入力するプログラムです。このプログラムを実行するとExcelのセルA1に「あいうえお」セルA2に「かきくけこ」と入力されます。
Sub test()
'変数の宣言
Dim a As String
Dim b As String
'変数に値を代入
a = "あいうえお"
b = "かきくけこ"
'セルを指定して値を入力
Range("A1") = a
'セルを座標で指定して値を入力
Cells(2, 1) = b
End Sub
プログラムを解説していきます。
変数の宣言部
ここでは変数という、値の入れ物を宣言(作成)しています。
'変数の宣言
Dim a As String
Dim b As String
この部分の意味は「String型(文字列)」を入れるための「a」と「b」という変数(入れ物)を作成しています。
VBAでは宣言をしなくても動くのですが、後から読み返すことを考えると宣言を行うべきです。
変数へ値を代入
先ほど作成した変数aとbに値を入れています。
'変数に値を代入
a = "あいうえお"
b = "かきくけこ"
aに「あいうえお」bに「かきくけこ」という文字列を入れています。変数aとbは宣言部分で文字列(String)を入れるように作られた変数ですので数値は入れる事ができません。
セルを指定して値を入力
実際にエクセルのセルへ値を入力しています。
'セルを指定して値を入力
Range("A1") = a
'セルを座標で指定して値を入力
Cells(2, 1) = b
セルの指定方法には大きく分けて2種類あり「A1」「B1」のように指定する方法と、「1,1」「1,2」のように座標で指定する方法があります。
A1のような指定方法は、エクセルの行と列の部分のアルファベットと数字ですのでわかりやすいと思います。しかしプログラム上でセルの指定を行う場合は「1,1」のように座標で指定する場合が多いです。
セルの座標指定は「A1」を「1,1」として、「行No,列No」となっています。そのためB1を指定したい場合は「1,2」、A2を指定したい場合は「2,1」となります。
なぜプログラム上では座標指定なのかは、ループを使う部分で分かっていただけると思います。
プログラムを実行してみる
では実際にプログラムを動かしてみましょう。
プログラムをコピーして先ほど起動したエディタに貼り付け、開発環境上にある緑の再生マークみたいなものを押すと実行されます。
これ以降の条件分岐・ループも、同じ操作でプログラムを起動できます。
すると、A1に「あいうえお」がA2(行No2,列No1)に入力されています。
このようにセルを指定して値を入れていくことで、プログラムでの自動入力が行えるようになっています。
条件式を使ってみる
プログラミングの基本とも言える、条件分岐を行うために条件式をVBAで使ってみます。
このプログラムではセルA1に入力されている文字によって、B1に表示させる文章を変えるプログラムです。
Sub 条件分岐()
'セルA1がAであれば「Aです」とセルB1に表示し、その他は「Aではありません」と表示
If Range("A1") = "A" Then
Range("B1") = "Aです"
Else
Range("B1") = "Aではありません"
End If
End Sub
先ほど載せたセルに値を入力だけするものとは異なり、複雑になっているように見えるでしょうが、よく見ればシンプルな内容です。
条件式
If Range("A1") = "A" Then
Range("B1") = "Aです"
Else
Range("B1") = "Aではありません"
End If
「If」というのはプログラム上で「もし~ならば」というような英語と同じような意味で使用されます。
今回のものであれば「もしA1が「A」であれば(Range(“A1”) = “A”)、B1に「Aです」と入力する(Range(“B1”) = “Aです”)」という条件式になり、「Else」というのはその他の場合に処理される部分となります。
そのためAではない文字が入力されていた場合は「Aではありません」という文字がB1に入力されます(Range(“B1”) = “Aではありません”)。
プログラムの実行
では、プログラムを貼り付けて実行してみましょう。実行方法は先ほどと同様です。
まずはA1に「A」と入力した状態で実行してみます。
A1に「A」が入力されていることを判断し、「Aです」という文字列をB1に入力することができました。
セルA1に「A」が入っていることを認識しています。
次はA1に「B」と入力して実行してみます。
A1に入力されている文字が「A」ではないことを判断して「Aではありません」と表示されました。
実際にプログラムを動作させることにより、エクセル上のセルA1に入力されている文字を判断して条件分岐を行い、表示する文字を使い分けることが確認できました。
文字だけではなく数値の場合は「10以上で〇〇と表示する」など数値の大きさを判断することもできますので、様々な判断をプログラムにさせる事が可能です。
ループを使って連続でセルに値を入力してみる
こちらもプログラミングの基本文法であるループを使ってみます。
このプログラムは、セルA1からA5までに順番に1から5までを入れるものになります。
セル指定に座標を使用し、座標の指定には変数「i」を使用しているところがポイントです。
Sub ループ()
'変数の宣言
Dim i As Integer
'For文でiを1から始めて5になるまでループする
For i = 1 To 5
'セル座標 行Noにiを入れ、列は1(A列)に固定し、iの値を入れていく
Cells(i, 1) = i
Next
End Sub
変数の宣言
'変数の宣言
Dim i As Integer
ここでは「i」という変数を数値型の「Integer型」で作成しました。これはループの回数を記録するために使用する変数です。
ループの宣言部分
'For文でiを1から始めて5になるまでループする
For i = 1 To 5
'セル座標 行Noにiを入れ、列は1(A列)に固定し、iの値を入れていく
Cells(i, 1) = i
Next
For~Nextの間に入っている処理がループされます。
今回のForだと、先ほど作成した変数「i」に1を入れループ1周ごとに「i」に1を足していき、5になるまでループを繰り返すという設定になります。
1を足すという処理が書かれていないですが、1ずつ増分の場合は省略することが可能であり通常は明記しません。
明記する場合や1ではない数値で増やしていきたい場合は以下のように「Step」という命令で指定します。
For i = 1 To 5 Step 1
Stepの後の数字がiに足されていくことになりますので、もし2を指定した場合は1→3→5とiが増えていくことになります。
セルへ文字の入力
If文まではセルを指定する場合、「A1」や「(1,1)」のようにプログラムを書く際に指定していましたが今回のループでは変数を使用しています。
'セル座標 行Noにiを入れ、列は1(A列)に固定し、iの値を入れていく
Cells(i, 1) = i
変数「i」が使用されていますが、先ほどForの部分で説明した通りこの変数はループが回るたびに1ずつ増えていきます。
そのため「Cells」でしている座標も1ずつズレていくことになります。
Cellsで指定する最初の数字は行Noですので、(1,1)→(2,1)→(3,1)→(4,1)→(5,1)と指定セルが移動していきます。
また、入力する値もiを指定しているため、ループが回るごとに1→2→3→4→5と入力される値が変化していきます。
プログラムの実行
では貼り付けて実行してみましょう。
A1~A5に1~5が入力されました。iがループによって増えていくことで、入力セルが下にズレながらiの値が入力されていったことがわかります。
プログラムの動作は一瞬なので同時に入力されたように見えますが、実際には順番に入力されています。
ループを使用することでデータを順番に入力していったり、逆に入力されているデータを順番に抜き取っていったりという処理が行えるようになります。
Sub~End Subについて
ここまでプログラムの内容を紹介してきましたが、全て以下のように「Sub~End Sub」の間に書かれていたと思います。
Sub test()
If文などの処理
End Sub
これはSubプロシージャというもので、処理を一塊にするためのものです。今回でいうとA1とA2に文字列を入力するという処理を「test」という名前を付けてまとめたということになります。
まとめておくことで、ほかの処理のプログラムから呼び出すことが可能になります。
プログラムを呼び出してみる
Sub 呼び出し()
'B1に文字を入力
Range("B1") = "呼び出し"
'ループのプログラムを呼び出す
Call ループ()
End Sub
Sub ループ()
'変数の宣言
Dim i As Integer
'For文でiを1から始めて5になるまでループする
For i = 1 To 5
'セル座標 行Noにiを入れ、列は1(A列)に固定し、iの値を入れていく
Cells(i, 1) = i
Next
End Sub
新しく「Call」という命令を使用しています。
これは英語の意味と同じく呼び出す際に使用する命令で、今回のプログラムではループのプログラムを呼び出すものです。
プログラムを実行してみる
実際に実行してみましょう。
先ほどのプログラムには、ループが「呼び出し()」から動いたことがわかりやすいように、B1に「呼び出し」という文字が入るように「呼び出し()」のプログラム上に処理を入れておきました。
そのため、「呼び出し()」を実行したときのプログラムの流れは「”呼び出し”という文字列をセルB1に入力し、Callで「ループ()」を呼び出してセルA1~A5に1~5の数字を入力する」という動作になっています。
この処理を呼び出すというものも、プログラミングを行う上でよく出てくる文法になります。
プログラミングをエクセルでやってみる まとめ
今回はエクセルを使用してのプログラミングについての説明とサンプルコードの解説でした。
普段の仕事でエクセルを使う方、特に繰り返しの作業ではVBAでプログラムを作ることができるようになれば業務を大幅に効率化できます。
今回は基本文法の一部を紹介しましたが、これら組み合わせ応用することで様々な処理を行うことができるようになります。
実際に業務で使用するような「プログラムからエクセルファイルを開いてデータを抜き取り集計する」「エクセルデータの加工を自動化する」などの複雑なプログラムを作れるようになるには、もう少しプログラミングを学習する必要があります。
独学で試行錯誤しながら勉強していくのも良いですが、VBAの講座があるプログラミングスクールに通ってプロの講師に教わり、濃い内容を効率的に学ぶのも社会人であれば良いと思います。
Winスクールで無料体験・説明を受けてみる→
資格と仕事に強い!個人レッスンのプログラミングスクール【Winスクール】
単純な作業は機械にやらせて、もっと付加価値の高い仕事をおこなっていきましょう!