IFで比較!Excelとマクロの考え方の違い

Excelとマクロの違いと、IFの事例で比較してみました。
Excelとマクロは、目的に合わせて使い分けるのがベストです。
Excel IF

Excelとマクロの違いは?

Excelは、人間が入力・クリックすることでExcel上の処理が行われます。
一方、マクロは、人間がプログラム(VBA)を書いて、そのプログラムを実行することでExcel上の処理が行われます。

どちらも同じExcelの処理ですので、結果は同じものになりますが、その過程や手間が大きく異なるのです。

マクロの方が、効率化の可能性は高く、より多くの処理を瞬時に行うことができます。
ただ、「プログラムを書く」という高い敷居があるのも事実です。

マクロを使わずに、Excelの機能で処理した方が、断然早いこともあります。
だからこそ、Excel→マクロという概念ではなく、
・Excel or マクロという選択ができるかどうか
・Excel & マクロという使い方ができるかどうか
が重要です。

マクロについては、こちらの記事を参考にしてください。
(古い記事なので近日中にリメイクします)
Excelマクロ入門ー実際にかんたんなマクロを書いてみましょうー

スクリーンショット 2015 02 06 9 54 15

ExcelのIFとマクロのIFの違い

IF関数で、Excelとマクロの違いを見てみましょう。

Excelでの処理

Excelでこういったデータがあり、「金額が10,000より大きかったら、判定欄へ1、そうでなかったら2を入れる」処理をします。
スクリーンショット 2015 02 06 10 04 43

Excelなら、こういう数式を入れるでしょう。
スクリーンショット 2015 02 06 10 05 53

すべてのデータにコピーする場合も、セルB2の右下隅でダブルクリックすれば、スクリーンショット 2015 02 06 10 07 25

瞬時にコピーできます。
スクリーンショット 2015 02 06 10 08 03

マクロでの処理

マクロだと、まずこう書く方法が考えられます。

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 &『インストラクターのネタ帳』管理人の伊藤さんが、こういったツイートをされていました。

通常は、こう書きます。

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のみを抽出し、コピーして別のシートへ貼り付けます。

スクリーンショット 2015 02 06 10 17 13

そこそこの手間です。

これをマクロでやるならば、次のようなプログラムを書きます。

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」へ書き出す」というプログラムです。
フィルター、コピーや貼り付けの手間はいりません。
ミスをすることもないです。

スクリーンショット 2015 02 06 10 20 25

さらには、「「もし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新」

■スポンサードリンク

一之江バーミヤン
ライフネット生命問い合わせ
ドラゴンボール ゼノバース