こんにちはhokkyokunです。
非IT企業の非IT部員が独学でVBAを学んだ感想を実例で紹介します。
- VBAを学んでよかったこと
- VBAを学んでできるようになったこと
- VBAを学ぶのは今からでも遅くはない点
- VBAの長所と短所を理解することが上達の近道
- VBAの短所を補うためには
- VBAの学習方法
この順番で紹介したいと思います。
ざっくり、要約すると
VBAは今からでも十分学ぶ価値のあるツールです。
しかし、短所もありますので、それをおぎないつつ
効率的な学習(おすすめはUdemy)で習得を目指しましょう。
学んでよかったこと:自分を消耗しなくなる
意味深な見出しですが(笑)
どういうことかというと
VBAを学ぶ前の私は生産性とは一生懸命に働くことだと思っていました。
例えば、いろんなファイルに散らばったデータをつなげて
意味のある資料を作成する業務を行う場合
- ファイルを開いてデータをコピーして
- (例外がある場合は)あるデータだけには特別な計算を処理し、
- 計算された表を別のファイルに貼り付けて
- それを所定のフォルダに格納して
- ファイルをある特定の人にメールして
という作業が必要です。
①何件も、②素早く、③ミスをせずに
頑張ることが正しいことと認識していました。
VBAを覚えるとこの程度の作業は(量にもよりますが)
1分とかからず終わります。
しかも自分は何もせずスマホを見ていても大丈夫です。
これは私の人生観を覆しました。
同じ生産性なら楽をするべきです。
こんな単純作業は卒業してます(笑)
もっとクリエイティブなことをやっているんだよ
例えば、部下の管理をする場合を考えてみましょう。
部下のスケジュールをアウトルックの予定表に書き込ませたとします。
- 部下のスケジュールをいちいちアウトルックを開いて
部下の人数分選択して見比べていますか? - まさかどこにどれくらい出張しているか
キーボードで入力していませんよね? - 会議を開きたいとき、
空きスケジュールはどうやって判断していますか? - やっと全員が空いてるスケジュールを見つけたけど
その時間に会議室の空きはありますか? - これを5分以内に部下全員にコンセンサスをとることは可能ですか?
VBAで全部できますよ
以下には具体的にできるようになったことと
VBAの良いところを上げていき、
非IT会社員にはぜひVBAを学んでいただきたいと思います。
できるようになったこと 実例〇〇
アウトルックの自動操作
会社でメーラーがアウトルックの方いらっしゃると思いますが、
以下のことはすべて可能です。
- メールの宛先を変えて自動送信
- 取引先ごとに内容や添付ファイルを変える
- 取得したメールの内容を取得して
エクセルに転記 - 取得メールの添付ファイルを所定のファイルに自動格納
メール操作はかなりコスパがいいです。
また、アウトルックで社員のスケジュール管理を
されている方も多いかと思います。
以下のようなことも可能です。
- 社員のスケジュールを取得し、エクセルに転記
- 複数の社員のスケジュールを同時に表示して一括管理
(アウトルック画面だと何人も同時表示するとかなり見づらくなります) - 複数の特定の社員に同じスケジュールを加筆
(会議などの予定を一括管理。
アウトルックでもできるが毎月の会議をいっきに入れられる)
覚えることは実はそんなに多くなく、
でも結構業務は大きく改善されたりします。
請求書作成
当社は一回の注文ごとに請求書を作る文化があり、
かつ、古いシステムを使っていたので、伝票番号順にしか作成できませんでした。
想像してみてほしいのですが、
一か月で何百枚、何千枚も発生する請求書の束を名前順に変える作業を…
これをVBAで自動生成することで
大幅に作業時間を圧縮しました。
実はこれ、私がVBAを学習すると決めたきっかけでもあります。
VBAはオワコン?今からでもVBAを学ぶべき理由
VBAは舐められることがほんとに多い(笑)
いまさらVBA(笑)
AIもあるし、業務効率化ならAIで十分
プログラミングを学ぶなら
PythonとかGASとか
のほうがいいんじゃない?
こういう意見ほんとに多い(笑)
ただ、間違っているとも思いません。
ですが、会社・組織の現状を考えるとVBAはまだまだ現役です。
そしてVBAで効率化しつくしてから、次の一手として他の手段を考えましょう。
VBAを今からでも学ぶべき理由は以下です。
- VBAはシステムの中継を行う最適ツール
- VBAは非ITエンジニアでも学びやすい
- VBAは比較的導入しやすい
VBAはシステムの中継を行うには最適のツール
SAAS(Software as a Service)ってご存じでしょうか?
「SaaS」(Software as a Service:「サース」または「サーズ」)とは、ソフトウェアを利用者(クライアント)側に導入するのではなく、提供者(サーバー)側で稼働しているソフトウェアを、インターネット等のネットワーク経由で、利用者がサービスとして利用する状況を指します。
IDCFrontier
SAASを導入することでエクセルは不要になると言われていますが、
現実的にはそんなことなく、
むしろVBAの価値が上がったんじゃないかと思っています。
私の会社でもSAASを導入していて
システムが乱立しています。
そうすると、以下のような悲惨な状況が発生します。
①についてピックアップしてみます。
例えば、株式会社野島ファイナンスの管理に
複数のシステムを利用していたと仮定します。
①売上処理でシステムA(ID:1000)
②顧客管理でシステムB(ID:AB1400)
③売上を加工するためのシステムC(要はSQLのノーコードツール、ID:SS500)
もし野島ファイナンスが野島金融に名前変更したら
全てのシステムを変更しなければいけません。
もしこれらのシステムがデータの取り込みと吐き出しができるシステムであれば
以下のようなエクセルとVBA管理をすれば管理を一元化できます。
Sub replace_name()
Dim ID As Long
Dim rename As String
''''''''''''''''''''''''''''''''''''''''''''''''''
'''IDに登録変更したい案件のID番号を入れておく
'''renameに変更したい名前を入れておく
''''''''''''''''''''''''''''''''''''''''''''''''''
ID = 1
rename = "野島金融(仮)"
'マスターから情報を取得
Dim table As ListObject
Dim r As Range
Dim row As Long
'テーブルからIDの行番号を取得
Set table = ThisWorkbook.Worksheets("マスター").ListObjects(1)
For Each r In table.ListColumns("ID").DataBodyRange
If r.Value = ID Then
row = r.row
Exit For
End If
Next
'それぞれのシステムの名前を変更
Dim i As Long
Dim maxRow As Long
Dim arr As Variant
For Each arr In Array("A", "B", "C")
With Workbooks(arr & ".xlsx").Worksheets(1)
maxRow = .Cells(Rows.Count, 1).End(xlUp).row
For i = 2 To maxRow
If .Cells(i, 1).Value = table.ListColumns(arr).Range(row).Value Then
.Cells(i, 2).Value = rename
Exit For
End If
Next
End With
Next
End Sub
ぶっちゃけこのコードは突っ込みどころ満載です(笑)
列を数字で指定しているので列の位置が変わるとエラー起こしますし、
コードもわかりにくいのでもっと関数で小分けするべきです。
ただ、こういったコードがさらっとかけることによって
SAASなど会社で導入されているツールをうまく業務効率化につなげることができます。
VBAは非ITエンジニアでも学びやすい
VBAは比較的学びやすいプログラミング言語です。
これはそのままVBAの長所となりますので、
詳細は後述します(こちらからジャンプします)が、
ざっくりいうと以下の通りです。
- 学習範囲が狭い
- コーディングとフィードバックが直感的
- 環境構築不要
- エディターがシンプル
VBAは比較的導入しやすい
エクセルを使用している会社は多いと思います。
基本的にはエクセルが使える環境であればVBAはなんの準備もせずすぐに使えます。
また、VBAはエクセルの延長であるため、
上司の理解も他のプログラミング言語より得られやすい傾向にあります。
これがPythonであれば、
PCの環境構築を行分ければならず、社内への許可が必須となります。
VBAを禁止しているところもあると思いますが
少なくとも個人業務の範囲であり、かつ、適切なプログラムが書けるのであれば
手動でやっているのと社内リスクは変わりません。
※これは私の意見です。
社内での導入は必ず自己責任でお願いいたします。
長所と短所を理解しよう【長所】
VBAを効率的に学ぶにはまずは
VBAの特徴(長所【メリット】とVBAの短所【デメリット】)を理解する必要があります。
まずはVBAの長所を整理してみましょう。
学習範囲が絞られる
VBAは基本的にエクセルやアウトルックなど
Office製品の自動処理を目的とします。
したがって、操作の範囲が限定的(感覚的には9割がエクセル)なので
必要な知識の範囲が絞られます。
例えばネットワークやサーバーへアクセスする知識が不要です。
VBAはWeb操作なども原理的には行えますが、
基本的にはこれらをおすすめはしません。
そういった操作はPythonなどを使うとはるかに簡単に書け、
かつ、メンテナンスもかなり楽になるからです。
家を作るのに大工さんはたくさんの道具を使い分けると思います。
簡単な犬小屋であればのこぎりとトンカチだけで何とかなるかもしれませんが、
家を作るのはかなり難しいと思います。
Office製品以外を操作したくなったらVBAの卒業時期と思うべきです。
Pythonの検討を考えましょう。
会社への導入説明が障壁となりますが、
おそらくここまで効率化できているのなら、
理解してもらえる可能性も低くないはずです。
コーディングとフィードバックが直感的
例えばシート「Sheet1」のA1に「テスト」と入力したいとします。
コードは以下のように書けます。
Sub test()
ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = "テスト"
End Sub
コード自体もかなり直感的だと思います。
また、このプログラムを実行した場合の結果ですが、
以下のようになります。
結果の確認もかなり直感的に進めることができます。
VBAだけやっているとなかなか気づかないですが、
私がPythonを学習しているとき、
サーバーへのアクセス(HTTP通信)が直感的には理解しづらく、苦労しました。
普段、HTTP通信を意識しながらインターネットを活用している人は少ないと思います。
そういう意味ではVBAはかなりなじみ易い言語といえます。
環境構築不要
もしVBAを始めたいと思い、かつ、エクセルを操作できる環境にあるなら
することはあと一つ!
エクセルを開いてAlt + F11 を押すだけ!!
これだけでもうプログラムを書く準備はできました。
おめでとうございます。
ちなみにPythonは
英語で書かれたサイトに行って
めちゃくちゃたくさんあるリンクの中からたった一つ正解のリンクをクリックして
必要なファイルをダウンロードして、インストールして
必要なライブラリをインストールして、
エディタをインストールして…
たぶん、初心者には高いハードルが何重にも存在します。。。。
エディターがシンプル
エディターとはプログラムを書くための
編集画面のことを指します。
VBAって実はかなり古いプログラミング言語で
アップデートもほとんどされていないそうです。
一見デメリットのようですが、
その分機能もかなりシンプルです。
私の実体験としては
エディターはシンプルな方が最初は迷わなくていいので
むしろありがたかったです。
長所と短所を理解しよう 【短所】
長所があれば短所が必ずあります。
VBAの短所もきちんと把握しておきましょう。
配列、辞書、クラスなどの機能が不親切
例としてVBAの配列の不親切さを説明します。
配列とは、数値や文字列をグループにして処理するための概念です。
例えば部署のメンバに佐藤さん、鈴木さん、田中さんがいる場合
[“佐藤”,”鈴木”,”田中”]となります。
これに加藤さんを追加する場合、
Pythonであれば一行で終わります。
VBAの場合は以下のことを考え、記述しなければいけません。
- 配列は空?それとももう何か入ってる?
- 配列の要素数(入っている数、[佐藤、鈴木、田中]であれば3つ)の変更
- 配列の追加コード
配列はプログラミングの基本なのに
こんな面倒なことをやらなければいけません。
この不便さを補うために関数をバンバン作って補っています。
こちらをクリックするとページ内の該当段落にジャンプします。
言語としての更新が止まっている
VBAは言語としてのアップデートがありません。
それにより機能がかなり古くなっています。
例えば、長所でも挙げたエディターについてですが、
私が普段から不満に思っている点の一部です。
エディターを使ったことがあれば理解してもらえると思いますが、
別になくてもいいが、ないとコーディングが遅くなる。
痒い所に手が届かないもどかしさがあります。
オンライン化に対応していない(定期実行が難しい)
VBAは基本的には定期実行には向きません。
基本的にはローカル(自分のPC内)で動かすことが前提となり、
実行するための条件(=トリガー)を設定するという概念もありません。
例えば、GASであればクラウド上で定期実行可能ですし、
Pythonなども環境を整えることで定期実行可能です。
VBAはこの定期実行を行うための構築がかなり難しい…
定期実行させるためにはPCを常時稼働させる必要があります。
例えば、メールを受信して即座に作動させるためには
PCを一台24時間稼働させる必要があります。
VBAの短所を補うためには
私は関数をばんばん作って処理をパーツ化しています。
不便な部分は自分で補っています。
配列を便利に使いやすくする関数いくつか作っていますので
よかったら見ていってください。
エクセルのテーブルも表の編集作業において強力なツールですが、
これも少し癖があったり、痒いところに手が届かないので、
いろいろ作りました。
VBAを学習するためには
VBAを学習するためにはUdemyがおすすめです。