見出し画像

Excelの関数で頑張るのか、コードを書くのか。そもそもExcelを使わないのか

おはようございます、いつきです。
最近訳があって、8年ぶりくらいにExcelのVBAでコードを書きました。
記憶にある限り最後に書いたのが2015年…w

追加コストがかけられない状況で、手元にはExcelはある…今回はそんな状況に出くわしたので、記事にしました。

最初に結論だけ言ってしまうと、できるだけクラウドサービスを利用する、次いでExcelの関数、最後にVBAを利用するのが個人的なおススメです。
その上で、今回のケースでVBAをなぜ使ったのか?を書いていきます。

この他にもRPAを活用する手もありますが、VBAと同じおススメ順位かなと思っています。

Excel VBAってどうなの?

まず最初に、VBAを久々書いてみた所感からですが、さすがに昔からよく使われているだけあり、とても書きやすかったです。
ChatGTPが使えるのも大きな変化かもしれません。今回は、ChatGTPにベースとなるコードを書いてもらい、追加機能やエラー対応をネットで探して実装しました。

また、ChatGTPではコメントも入れてくれるので視認性も高かったです。
たとえば、以下は特定のシートを複製して、新しいExcelファイルを作成するコードを作成してもらった例です。

あなたはExcel VBAのプログラマーです。後任の方がわかるように次の機能を満たすコードを書いてください。
【機能】ExcelのSheet1、Sheet2を新しいワークブックにコピーして保存する。保存先は変数で指定できるようにしてください。
【前提】ExcelにはSheet1、Sheet2、Sheet3があります。

ChatGTPへの入力内容
Sub CopySheetsToNewWorkbook()
    Dim NewWorkbook As Workbook
    Dim FilePath As String

    ' ワークブックを作成します
    Set NewWorkbook = Workbooks.Add

    ' コピー元のシート1とシート2を指定のワークブックにコピーします
    ThisWorkbook.Sheets("Sheet1").Copy Before:=NewWorkbook.Sheets(1)
    ThisWorkbook.Sheets("Sheet2").Copy Before:=NewWorkbook.Sheets(2)

    ' 新しいワークブックの保存先ファイルパスを指定します
    FilePath = "C:\パス\ファイル名.xlsx" ' 保存先を適切なファイルパスに変更してください

    ' 新しいワークブックを保存します
    NewWorkbook.SaveAs FilePath

    ' 新しいワークブックを閉じます
    NewWorkbook.Close

    ' メッセージボックスを表示して完了を通知します
    MsgBox "Sheet1とSheet2が新しいワークブックにコピーされ、保存されました。", vbInformation
End Sub

という感じで、ぱっと見使いやすいのですが、機能が増えてきたり色々やろうとすると当然ながらコードを書く難易度があがってきます。また、機能が増えればバグも増えますし、後任の方への引き継ぎも難しくなります。

上記背景もあり、わたしはVBAなどコーディングを必要とする機能実装はできるだけしないようにしてきました。※運用保守含め外注する場合は別です。

それらを踏まて、わたしは以下の条件場合にのみVBAを選択しています。

・インターネット環境がない。もしくはクラウドサービスのアカウントが利用できない
・オフラインで利用できる使いやすいデスクトップアプリがない
・関数で対応できない処理がある
・関数で対応すると処理が重くなる
AND
・人件費以外の予算がかけられない

運用を考えたらクラウドサービスが最適

正直、運用保守のことを考えたらクラウドサービスが最適だと思います。
クラウドサービスといってもkintoneやSalesforceなどカスタマイズ性が高いサービスというより、SmartHRやfreeeなど機能領域が明確なサービスになります。

たとえば、マイナンバー対応、電子帳簿保存法対応や、インボイス制度対応などの法対応があった場合、機能領域が明確なクラウドサービスでは基本的には当たり前のように対応してくれます。
これを自前でやろうとするのは厳しいです。そもそも超優秀なエンジニアが何人もいる組織でも苦労するのが法対応です。

※関係のない話ですが、わたしはSalesforceもExcelも大好きです。

クラウドサービスを選定できないケースがある

多くの場合、予算が取れずにクラウドサービスを利用できないケースがあります。次いで、実現できる機能を提供しているサービスがないケースです。

その場合、いま使っているサービスの範囲で何とかするしかありません。そこで白羽の矢が立つのがExcelやGoogle スプレッドシートになります。どちらも使っていない企業は日本でほぼないのではないでしょうか。

ただし、「クラウドサービスの予算がでない」からというだけの理由でExcelを利用するは悪手です。一時しのぎで使うのは良いものの恒久的に使うのはできるだけ避けましょう。

最初は良いです。機能も少なくて、数時間~1日もあれば求めているものを作れます。でも、組織が大きくなったときや、作成した人が辞めたときに対応しきれなくなります。結果、中長期を見れば、クラウドサービスを利用するより人件費の方が大きくなることがほとんどです。

この時、関数を利用した場合の方がVBAなどよりまだまし。ということです。あまりに複雑な関数を除けば、VBAよりも習得難易度が低く、ぱっと見でわかりやすいためです。初回の実装時間や機能アップデートの時間もVBAよりは短く済むケースが多いです。

中長期計画もセットでExcelを使うことを選択する

ここまで書いてきた通り、Excelを無邪気やたらに使うことについてはあまり賛成できません。個人的なおススメはしっかりと中長期計画もセットにした上で、Excelを短期的な解決策として活用することです。

  1. Excel、RPAで目の前の課題を解決する

  2. 恒久対応(クラウドサービスの導入など)を検討し、次年度予算に組み込む

  3. 恒久対応を実施し、展開する

課題を解決できなければ意味がないですし、課題解決に時間をかけても現場は困り続けています。一方で課題解決をしたつもりが、新しい課題(運用保守の負担)が生まれてしまうのはきるだけ避けたいです。

このあたりの判断は組織によって全然異なりますが、こういう考え方もあるんだなと知ってもらえたらと思います。組織の課題が解決され、負債も残りにくい解決策を選定できるように願っています。

それではまた来週!

この記事が気に入ったらサポートをしてみませんか?