パソコンスキル教科書

パソコンスキルの教科書

東京大学大学院卒。博士課程に進学を志すも、担当教授と折が合わず、無職になる。医者を目指すも結局断念。田舎で派遣社員として働く。「スキルがなければ、仕事ももらえない」と悟り、ビジネススキルを学ぶ。プログラミング、英語を学び、一部上場企業へ転職。年間100時間以上の業務効率化を行い、社内講師に抜擢。海外の案件を担当し、数億円のプロジェクトに携わる。個人の事業でも、月売上100万を達成。現在は、自分の価値を高めるためのスキル向上支援を行う

エクセル関数とエクセルマクロVBAの違いとは?7つの違い

f:id:gene320:20170706224557p:plain

・エクセル関数を勉強するか、エクセルマクロを学ぶか迷っている・・・
・職場でエクセルマクロを使っている人がいるけど、関数と、どう違うのか知りたい
・求人でマクロ・VBAとあったが、関数との違いが分からない

こんなことを感じていませんか?

この記事では、企業でパソコン講師をした経験がある私が、エクセル関数とエクセルマクロVBAの違いを解説します。事例を交えながら、詳しく紹介していきますので、ぜひこのまま読み進めていってください。

関数とマクロVBAの「7つ」の違い

エクセルマクロVBAとは?エクセル関数とは?

まずは、エクセルマクロVBAとは何か?エクセル関数とは何か?について、紹介します。

エクセルマクロVBAとは|プログラミング言語

エクセルマクロVBAとは、カンタンに言うと、「エクセルの操作を自動化するための技術、プログラム言語」です。

この自動処理システムを使えば、あなたがエクセルなどに一つ一つ手入力で打ち込む作業をなくすことができます。

たとえば、以下は、エクセルマクロで伝票を自動作成する事例です。


マクロVBAを使えば、エクセルを自動印刷、シートの削除、アウトルックから自動でメールを送ったりできます。

エクセル関数とは|エクセルにあらかじめ登録された計算の仕組み

エクセル関数とは、面倒な計算でも、カンタンに計算できるよう、エクセルにあらかじめ登録された計算の仕組みのことです。

例えば、10セル分の平均を求めるとき、

=(A1+B1+C1+D1+E1+F1+G1+H1+I1+J1)/10

と入力する必要があります。しかし、あらかじめ登録されたAVERAGE関数を使えば、下記の数式で、計算可能です。

=AVERAGE(A1:J1)

なお、関数は600近く存在し、使用する関数によって、使い方が異なります。

エクセルマクロとエクセル関数の7つの違い

まず、エクセルマクロとエクセル関数の7つの違いをカンタンに説明します。

項目 エクセルマクロ エクセル関数
1.出来ること ・エクセルの自動計算
・パワポを自動作成
・アウトルックからメール送信
・ウェブ情報の取得
・エクセルの自動計算
2.周囲の評価 とにかくすごい。魔法を使っているみたい・・・。と言われる すごい。この人はエクセル得意なんだ!
3.習得の難易度 難しい sum,if程度ならカンタン。関数を組み合わせると難しい
4.エクセルファイルへの負荷 マクロやVBAでは、ファイルへの負荷は少ない 関数を大量に使うと、ファイルが壊れる危険がある
5.とっつきやすさ とっつきにくい とっつきやすい
6.間違って消されるリスク VBAを知らない人は、VBAコードの保存先すら知らない 間違ってセルを削除されると、組んだ関数が消える
7.メンテナンス VBAを書ける人がいないとメンテナンスできない 関数が複雑になるとメンテナンスできない

それでは、一つずつ詳しく紹介していきます。

違い1|「エクセルマクロで出来ること」は「エクセル関数」より多い

項目 エクセルマクロ エクセル関数
1.出来ること ・データ集計
・報告書を自動作成
・グラフ作成
・報告書の自動印刷
・フォルダ作成
・メールの自動送信
・ウェブの情報を自動取得
・ワードの報告書を自動作成
・パワポ資料を自動作成
・データ集計
・報告書を自動作成

エクセルマクロとエクセル関数で、大きく違う点は、出来ることの幅が違うことです。

エクセル関数で、出来ることは、主にエクセルファイル内の計算や参照設定です。つまり、エクセルという世界の中でしか、応用の幅がありません。

一方で、エクセルマクロで出来ることは、エクセルファイル内での計算だけではありません。フォルダを作成、メール送信、ウェブ情報の取得のようなエクセルの世界を飛び越えて、さまざまなことができます。例えば、以下のことができます。興味がある方は、ぜひ合わせてよんでみてください。

エクセルVBAでoutlookを操作してメール送信する方法

www.fastclassinfo.com

エクセルVBAでインターネットに接続して情報を取得する方法

www.fastclassinfo.com

マクロVBAで月末処理する方法

www.fastclassinfo.com

違い2|マクロと関数では、周囲の評価が異なる

項目 エクセルマクロ エクセル関数
2.周囲の評価 とにかくすごい。魔法を使っているみたい…。と言われる すごい。この人はエクセル得意なんだ!

エクセルのスキルでよくいわれるのは
・vlookup関数
・ピボットテーブル
・マクロ・VBA
下に行くほど、レベルが高いスキルと言われる傾向にあります。

現実は、エクセル関数でvlookupを使えれば、それだけでエクセルが得意そうに見えますよね。あなたの職場でも考えてみてほしいのですが、vlookup関数を使いこなせる人は、あまりいませんよね。ですので、vlookupが使えるだけでも、エクセルが得意そうという評価をもらえます。

しかし、エクセルマクロを使いこなせるようになると、「魔法を使っているみたい」「なんだかすごい」「この人、できる…」という評価を受けます。それもそのはず。エクセルマクロをしっかり使えるようになれば、システムを作れるようになります。しかし、エクセル関数ではここまではできません。ですので、出来ることの幅が異なるので、得られる評価も当然、エクセルマクロの方が高くなります。

実際に、私の知り合いは、エクセルマクロで「レポート自動作成システム」を一人で構築し、そのシステムを利用して営業部が数十億の超大型契約を取りました。その結果、知り合いはシステム構築の実績が認められて、社内表彰を受けました。年収が200万近く上がったと喜んでいました。

違い3|マクロの習得は難しい。複雑処理をする関数の習得も難しい

項目 エクセルマクロ エクセル関数
3.習得の難易度 難しい sum,if程度ならカンタン。関数を組み合わせると難しい

エクセルマクロとエクセル関数を比べたら、エクセル関数は習得がカンタンと思われがちです。しかし、本当にそうでしょうか?

sum関数,if関数,vlookup関数くらいであれば、マクロの方がムズカシイ

もちろん、sum,if,vlookup程度のエクセル関数であれば、そこまで難しくはありません。ネットの情報を見れば、その場で見よう見まねで出来るはずです。

たとえば、ifを事例に考えてみましょう。

エクセル関数のif
=IF(A1>80,“合格”,“不合格)

と一行で終わりますが、しかし、エクセルマクロは5行分の記述が必要です

エクセルマクロのif
If Range(“A1”).Value > 80 Then
Range(“B1”).Value = “合格” Then
Else
Range(“B1”).Value = “不合格” Then
End If

ですので、sum関数,if関数,vlookup関数くらいであれば、マクロの方が難しいです。

本気で効率化したいなら、必要になる知識は、マクロも関数も同じくらい難しい

しかし、本気で業務効率化を考えたとき、sum,if,vlookupレベルのエクセル関数では足りません。それこそ、以下のような複雑な関数を組まないと、効率化の効果が見られないことが多いです。

=IFERROR(VLOOKUP($I$3&“-”&$C8,在庫入出記録!$C:$Q,MATCH(E$6,在庫入出記録!$C$4:$Q$4,0),0),“”)

もし、この複雑な関数をできるようになるなら、エクセルマクロとエクセル関数で、難易度はあまり変わりません。

たとえば、以下の画像のように

f:id:gene320:20170624020529p:plain

①で記載されている氏名を
②のように分離するとします

エクセル関数を使うと

D2~D7に
=LEFT(SUBSTITUTE(SUBSTITUTE(TRIM(B2),“/”,“ ”),“ ”,“ ”),FIND(“ ”,SUBSTITUTE(SUBSTITUTE(TRIM(B2),“/”,“ ”),“ ”,“ ”)))

E2~E7には、
=MID(SUBSTITUTE(SUBSTITUTE(TRIM(B2),“/”,“ ”),“ ”,“ ”),FIND(“ ”,SUBSTITUTE(SUBSTITUTE(TRIM(B2),“/”,“ ”),“ ”,“ ”))+1,100)

と入れ込む必要があります。

同じことをエクセルマクロで実行しようとすると、

Sub step3()
Dim kugiri,i As Long
Dim namae As String
    For i = 2 To 7
        namae = Trim(Range("B" & i).Value)
        namae = Replace(namae, "/", " ")
        namae = Replace(namae, " ","")
        kugiri = InStr(myonam, " ")
        Range("C" & i).Value = Left(namae, kugiri - 1)
        Range("D" & i).Value = Mid(namae, kugiri + 1)
    Next
End Sub

12行で書けます。

エクセルマクロとエクセル関数では、「記載する量」や「見やすさ」は、あまり変わりません。「エクセル関数はカンタン」「マクロはムズカシイ」と思われがちですが、必ずしもそうではありません。

つまり、効率化したい内容のレベルが高ければ高いほど、それを実現するためのマクロや関数も難しくなります。

関数で出来ないことをマクロでやるには、高いレベルが必要

すでに書いたとおり、エクセルマクロは、関数より出来ることが多いです。もし、関数で出来ないことをマクロでやりたいなら、高いレベルが必要です。それこそ、マクロ、VBAはプログラミング言語としての考え方をしっかり身につける必要があります。出来ることのレベルが高くなれば、学ぶ内容の難易度もあがります。

違い4|エクセル関数はファイルへの負荷が大きく、壊れやすくなる

項目 エクセルマクロ エクセル関数
4.エクセルファイルへの負荷 マクロやVBAでは、ファイルへの負荷は少ない 関数を大量に使うと、ファイルが壊れる危険がある

エクセル関数を使っていて、こんな式を見たことがありませんか?

=IFERROR(VLOOKUP($I$3&“-”&$C8,在庫入出記録!$C:$Q,MATCH(E$6,在庫入出記録!$C$4:$Q$4,0),0),“”)

このような式が、エクセルのセルの一つ一つに入力されている場合、エクセルファイルは、かなり重くなります。たしかにデータ数が100行程度であれば、影響は少ないです。しかし、200行,300行とデータが増えると、エクセルファイルへの負荷が大きくなります。

エクセルファイルへの負荷が大きくなると、どうなるか?

エクセルファイルの処理速度が遅くなり、エラーが出て、強制終了の頻度が増え、最悪の場合、ファイルが壊れます。せっかく蓄積したデータが壊れたら、かなりマズイ状況になります。

こちらの記事でも紹介していますが、エクセルの動作が重くなる原因の一つとして、エクセル関数の使いすぎがあります。

www.fastclassinfo.com

しかし、エクセルマクロVBAを使えば、ファイルへの負荷はほとんどありません。ですので、ファイルが壊れる危険も少ないです。

違い5|「関数」の方がとっつきやすい。マクロはとっつきにくい

項目 エクセルマクロ エクセル関数
5.とっつきやすさ とっつきにくい とっつきやすい

エクセル関数は、セルへの直接入力できるので、扱いがカンタンです。sum関数やif関数といったエクセル関数は、なじみがある方が多いので、とっつきやすい=カンタンそう。そんなイメージがあります。

しかし、マクロを使用するには、開発タブをリボンに追加して、Visual Basicを開いて、標準モジュールを開いて・・・と、マクロを使うまでに、なじみのない操作が必要です。これがとっつきにくさを生んでいる原因です。

違い6|「関数」は誤って消される危険があるが、マクロは消されない

項目 エクセルマクロ エクセル関数
6.間違って消されるリスク VBAを知らない人は、VBAコードの保存先すら知らない 間違ってセルを削除されると、組んだ関数が消える

エクセル関数は、セルに直接記述しますよね?これは、関数のメリットでもあり、デメリットでもあります。

セルへの直接記入は、カンタンに関数を組むことができるメリットがありますが、ほかの人がミスタイプしたら、カンタンに消えてしまうというデメリットもあります。

実際に「複雑な関数を組んだのに、間違って消されてしまって、誰もエクセル関数を元通りにできなくなった…」と嘆いている方とお話したことがあります。

しかし、エクセルマクロの場合、間違って消される可能性はほとんどありません。なぜなら、VBEで管理するため、マクロを知らない人は、マクロがどこに保管されているのかすら分からないからです。ですので、間違って消されることはないと言えます。もちろん、マクロを消そうと思ったら、削除する方法はあります。

間違って消してしまう…というリスクは、関数の方が高いです。

違い7|「複雑な関数」と「マクロ」は両方メンテナンスが難しい

項目 エクセルマクロ エクセル関数
7.メンテナンス VBAを書ける人がいないとメンテナンスできない 関数が複雑になるとメンテナンスできない

「違い3」でも記載しましたが、メンテナンスについては、

マクロ
そもそも使える人が少ないので、メンテナンスが難しい

関数
簡単な関数(sum,if,vlookup程度)であれば、メンテナンスは可能
複雑な関数はメンテナンスは難しい

ただ、メンテナンスが必要な場合、複雑なエクセル関数を組んでいることが多いです。ですので、メンテナンスは難しいでしょう。

実際に複雑なエクセル関数のメンテナンスする場合を考えてみましょう。たとえば、複雑なエクセル関数の例として、以下の関数をメンテナンスするとします。

D2~D7に
=LEFT(SUBSTITUTE(SUBSTITUTE(TRIM(B2),“/”,“ ”),“ ”,“ ”),FIND(“ ”,SUBSTITUTE(SUBSTITUTE(TRIM(B2),“/”,“ ”),“ ”,“ ”)))

E2~E7には、
=MID(SUBSTITUTE(SUBSTITUTE(TRIM(B2),“/”,“ ”),“ ”,“ ”),FIND(“ ”,SUBSTITUTE(SUBSTITUTE(TRIM(B2),“/”,“ ”),“ ”,“ ”))+1,100)

「"」「/」「,」「)」 という記号が多すぎて、何をどう直せばいいのか分かりません。しかも、横に伸びているため、見づらいです。さらに、どんな関数を使うのが適切か?を調べる必要もあります。かなりメンテナンスは大変です。

同じ場合をエクセルマクロで考えてみると、

Sub step3()
Dim kugiri,i As Long
Dim namae As String
    For i = 2 To 7
        namae = Trim(Range("B" & i).Value)
        namae = Replace(namae, "/", " ")
        namae = Replace(namae, " ","")
        kugiri = InStr(myonam, " ")
        Range("C" & i).Value = Left(namae, kugiri - 1)
        Range("D" & i).Value = Mid(namae, kugiri + 1)
    Next
End Sub

タテに並んでいるので、関数よりは見やすいです。また、マクロの場合、間違った部分が、ハイライトされる機能があるので、どこが間違っているかはカンタンに見分けが付きます。

しかし、VBAのキホンを知らないと、怖くてメンテナンスしようとする気すら起きないのが、初心者の正直な気持ちでしょう。

つまり、カンタンな関数なら、メンテナンスはカンタンです。しかし、複雑な関数やマクロをメンテナンスするのは、どちらも難しいです。

エクセル関数よりマクロを学ぶほうがおトク!

関数とマクロの違いについて、紹介してきました。いかがだったでしょうか?

一言でまとめると、

sum関数やif関数で見慣れている分、エクセル関数はカンタンに見えるが、複雑な関数で処理しようとすると難しい。エクセルマクロは、見慣れないことが多く、難しく見えてしまう。
マクロは関数より、出来ることが多いし、消えるリスクが少ない。習得するなら、マクロの方がおトク。

もし、「エクセルでの業務効率化をしたい」、「関数かマクロを勉強したい」と考えているのであれば、ぜひできることから実践していくことをオススメします。

私も最初はエクセル関数すら、まともに分からず、苦労しました。インターネットでcountifを調べて、なんとか使えるくらい…そんなレベルでした。しかし、調べながら、マクロの存在を知り、少しずつレベルアップしていきました。そして、いつのまにか、エクセルマクロで年間100時間以上の業務効率化を行い、教える側になりました。一番大変だったのは、最初の一歩でした。一歩を踏み出した後は、早かったのを覚えています。

もし何から実践すればいいのか分からない・・・というのであれば、書店やamazonで本を探すのもいいですし、身近にいるエクセル得意な人に質問してみるのもいいでしょう。私のオススメは、こちらの無料オンライン動画です。これを見れば、簡単なマクロなら作れるようになります。無料動画ですので、経済的にもやさしいですし、時間も節約できます。

しかし、何より大切なことは、あなた自身がこれだ!と思えるかどうかです。ぜひピンとくるものを探してみてくださいね。

「エクセルマクロ」とはそもそも何?というあなたへ

エクセルマクロについて詳しく知りたいなら、こちらの記事がオススメです。

www.fastclassinfo.com