Excelとマクロの違いと、IFの事例で比較してみました。
Excelとマクロは、目的に合わせて使い分けるのがベストです。
Excelとマクロの違いは?
Excelは、人間が入力・クリックすることでExcel上の処理が行われます。
一方、マクロは、人間がプログラム(VBA)を書いて、そのプログラムを実行することでExcel上の処理が行われます。
どちらも同じExcelの処理ですので、結果は同じものになりますが、その過程や手間が大きく異なるのです。
マクロの方が、効率化の可能性は高く、より多くの処理を瞬時に行うことができます。
ただ、「プログラムを書く」という高い敷居があるのも事実です。
マクロを使わずに、Excelの機能で処理した方が、断然早いこともあります。
だからこそ、Excel→マクロという概念ではなく、
・Excel or マクロという選択ができるかどうか
・Excel & マクロという使い方ができるかどうか
が重要です。
マクロについては、こちらの記事を参考にしてください。
(古い記事なので近日中にリメイクします)
Excelマクロ入門ー実際にかんたんなマクロを書いてみましょうー
ExcelのIFとマクロのIFの違い
IF関数で、Excelとマクロの違いを見てみましょう。
Excelでの処理
Excelでこういったデータがあり、「金額が10,000より大きかったら、判定欄へ1、そうでなかったら2を入れる」処理をします。
Excelなら、こういう数式を入れるでしょう。
すべてのデータにコピーする場合も、セルB2の右下隅でダブルクリックすれば、
瞬時にコピーできます。
マクロでの処理
マクロだと、まずこう書く方法が考えられます。
Sub test() Range("b2").Value = "=IF(A2>10000,1,2)" End Sub
そのまま、セルB2に「=IF(A2>10000,1,2)」という値を入れるのです。
Excelでの操作を忠実に再現するなら、こういうプログラムになります。
Sub test1() Range("b2").Value = "=IF(A2>10000,1,2)" Range("b2").AutoFill Destination:=Range("b2:b7") End Sub
ただ、後々の応用が利きません。
「Excel to マクロ」ではなく、「Excel & マクロ」と考えると、Excelとは切り離して、マクロ特有の考え方・書き方になじんでおくべきです。
ちょうど、MicrosoftMVP &『インストラクターのネタ帳』管理人の伊藤さんが、こういったツイートをされていました。
Excelマクロはループ処理を使わなくても、Range.AutoFillメソッドで近いことはできてしまうし、Excelに慣れた人の場合Range.AutoFillメソッドのほうが理解しやすいはずだけれど、そうすると、なかなかループ処理の考え方が身につかないはず。
— Kiyoto ITO (@kiyotoi) 2015, 2月 6
通常は、こう書きます。
Sub test2() If Range("a2") > 10000 Then Range("b2").Value = 1 Else Range("b2").Value = 2 End If End Sub
「If」 と 「End If」ではさんだ部分がIF文で、Excelの「=if( )」に該当します。
Excelでも「)」がつくように、マクロでもちゃんと「End If」で終わりましょう。
「Else」は、そうでなければ、という意味です。
すべてのデータに入力するならば、こういったプログラムにします。
2行目から7行目に繰り返し処理をするというプログラムです。
(通常はデータ数を数えて、データ数だけ処理を繰り返すというプログラムを書きます)
マクロだと、瞬時に、IFの処理とコピーができます。
Sub test3() Dim i For i = 2 To 7 If Range("a" & i) > 10000 Then Range("b" & i).Value = 1 Else Range("b" & i).Value = 2 End If Next End Sub
やはり、このプログラムをささっと書くのは敷居が高いと感じるかもしれません。
通常は、ExcelでIFを入力すれば十分です。
Excelとマクロの両方を使えるようにしておくのが理想
しかし、マクロはこの先の可能性があります。
たとえば、「判定が2のデータのみ、つまり10,000より大きいデータのみ別のシートへ取り出す」という例を考えてみましょう。
Excelでやるならば、IFを入れて、オートフィルターで2のみを抽出し、コピーして別のシートへ貼り付けます。
そこそこの手間です。
これをマクロでやるならば、次のようなプログラムを書きます。
Sub test4() Dim n n = 2 Dim i For i = 2 To 7 If Range("a" & i) > 10000 Then Worksheets("output1").Range("a" & n).Value = Range("a" & i).Value n = n + 1 End If Next End Sub
「もし10,000より大きかったら、シート「output1」へ書き出す」というプログラムです。
フィルター、コピーや貼り付けの手間はいりません。
ミスをすることもないです。
さらには、「「もし10,000より大きかったら、シート「output1」へ書き出し、そうでなかったら、シート「output2」へ書き出す」という事例ならどうでしょう。
Excelでやるとさらに手間が増え、大変です。
マクロなら、こう書きます。
(実際に使うならもっと効率的な書き方がありますが・・)
Sub test4() Dim n1 n1 = 2 Dim n2 n2 = 2 Dim i For i = 2 To 7 If Range("a" & i) > 10000 Then Worksheets("output1").Range("a" & n1).Value = Range("a" & i).Value n1 = n1 + 1 Else Worksheets("output2").Range("a" & n2).Value = Range("a" & i).Value n2 = n2 + 1 End If Next End Sub
その目的により、判断して使い分けていくのが理想です。
今回の事例なら、単に判定すればいいだけならExcelの機能で、シートやブックに関する処理があるならマクロでやるという判断をします。
毎月、毎日、毎年繰り返すなら、マクロを入れた方がいい場合も多いです。
超人的にプログラムが得意な人なら、マクロだけでもすべてをこなせますが、私も含めてそうでないなら、Excelの基本機能もしっかり使いましょう。
以前はマクロでしかできなかったことがExcelの機能だけでできるようになっているものもあります。
ストレッチを毎日の習慣にして、3週間ほど。
ちょっとずつ効果が出てきている気がしています。
トライアスロンの今シーズンの初のレースは1ヶ月後。
じっくり続けていきます。
(スイムもやらないと・・。今日行きます)
【昨日の1日1新】
※詳細は→「1日1新」
一之江バーミヤン
ライフネット生命問い合わせ
ドラゴンボール ゼノバース
■著書
『税理士のためのプログラミング -ChatGPTで知識ゼロから始める本-』
『すべてをがんばりすぎなくてもいい!顧問先の満足度を高める税理士業務の見極め方』
ひとり税理士のギモンに答える128問128答
【インボイス対応版】ひとり社長の経理の基本
「繁忙期」でもやりたいことを諦めない! 税理士のための業務効率化マニュアル
ひとり税理士の自宅仕事術
リモート経理完全マニュアル――小さな会社にお金を残す87のノウハウ
ひとり税理士のセーフティネットとリスクマネジメント
税理士のためのRPA入門~一歩踏み出せば変えられる!業務効率化の方法~
やってはいけないExcel――「やってはいけない」がわかると「Excelの正解」がわかる
AI時代のひとり税理士
新版 そのまま使える 経理&会計のためのExcel入門
フリーランスとひとり社長のための 経理をエクセルでトコトン楽にする本
新版 ひとり社長の経理の基本
『ひとり税理士の仕事術』
『フリーランスのための一生仕事に困らない本』
【監修】十人十色の「ひとり税理士」という生き方