AI時代に、なぜ今VBAなのか――数量計算書の1行から始めた小さな自動化
100ページを超えることもある数量計算書。その数式入力を少し減らすため、Excel経験の少なかった社員がAIと一緒にVBAを動かしました。会社がきっかけを作り、本人が一歩進んだ記録です。
以前の技術ノートで、AIを使いながら小さなExcelツールを作った社員の話を書きました。
その記事の最後に、
次はVBAや3次元へ。
と書きました。
今回、その「次」の一歩が少しだけ始まりました。
きっかけは、数量計算書を作るときの、ごく地味なExcel操作です。
数量計算書は、あえて少し手のかかる作り方をしている
数量計算書には、会社や発注者、業務内容によって、さまざまな様式があります。
計算式を一つのセルの中にまとめて表現する方法もあれば、数値や演算子を複数のセルに分けて構成する方法もあります。
どの方法が正しいという話ではありません。
当社では、数値や計算結果をできるだけセル参照でつなぎ、Excelブック全体として計算関係を追えるように作ることを重視しています。
例えば、ある行で求めた断面積を別の行から参照し、その値に延長を掛けて体積を求める。さらに、その体積を別の集計表から参照する。
このように、計算をつないでいきます。
この作り方は、最初に計算書を作るときには、それなりに手がかかります。
数値を入力し、演算子を配置し、参照セルを選び、計算式を組み立てていく必要があるからです。
それでもこの方法を採用しているのは、後から効いてくるメリットが大きいからです。
100ページを超える計算書で、元の数字まで追えるようにしたい
数量計算書が数ページなら、人間の記憶でもある程度管理できます。
しかし、業務によっては計算書が100ページを超え、場合によっては200ページ規模になることもあります。
シート数も20〜30程度になることがあり、その中で一つの条件を変更したとき、
この数字を使っているのはどこか。
この変更が、どの数量まで影響するのか。
を、人間だけで漏れなく追うのは簡単ではありません。
セル参照でつないであれば、上流側の数値を修正することで、関連する計算結果にも変更を反映できます。
また、参照元をたどれば、
この数字はどこから来たのか。
どの計算を経て、この数量になったのか。
も確認できます。
これは、作成者だけのメリットではありません。
成果品は元請のコンサルタントへ渡り、その先で発注者や工事関係者が確認することもあります。
作成した本人以外でも計算根拠を追えること。後から修正が発生しても、できるだけ関係を追えること。
そのために、作成時には多少手がかかっても、この構造を残す意味があると考えています。
でも、ROUNDを毎回手で作る必要まであるのか
一方で、計算書を作っているところを細かく見ると、技術的な判断とはあまり関係のない操作もかなりあります。
例えば、
=ROUND(セル×セル÷セル,2)
という式を作るだけでも、ROUNDを入力する。最初のセルを選ぶ。掛け算の記号を入れる。次のセルを選ぶ。割り算の記号を入れる。さらにセルを選び、最後に丸める桁数を入れる。
一つだけなら、大したことはありません。
私自身も、辞書登録を使って短い入力で ROUND( まで出せるようにするなど、少しでも入力を減らしていました。
それでも、その先のセル選択や四則演算子の入力は残ります。
これを何十行も繰り返せば、それなりの時間になります。しかも、セルを一つ間違える、掛け算と割り算を間違える、丸める桁数を間違える、といった単純なミスも起こり得ます。
そこで、
ここは、人間が毎回手を動かす必要があるのか。
という話になります。
半年前に私が作ったVBAを、今度は社員にも試してもらった
今回、突然VBAという発想が出てきたわけではありません。
半年ほど前、私自身がAIを使いながら、同じようなROUND式を生成するVBAを作ったことがありました。
それを社員にも見せ、
こういうことをすると、作業はかなり速くなる。
という話もしていました。
ただ、その時点では、社員自身がVBAを作るところまでは進んでいませんでした。
最近は、社内でも全社員が生成AIを業務で使える環境を整えています。AIを使うこと自体が、一部の人だけのものではなくなってきました。
そのような中で、今回、似た数量計算書の作業に触れる機会がありました。
そこで私から社員へ、
以前見せたものと似た処理だから、自分でもAIと会話しながら作ってみたらどうか。
と声をかけ、試してもらいました。
Excel経験がほとんどなかった社員が、まず1行を動かした
今回試した社員は、入社当時、Excel自体の経験もほとんどありませんでした。
入社して約3年。日常業務の中でExcelを使うことにはかなり慣れてきましたが、VBAのコードを書いてきた人ではありません。
今回も、VBAの参考書を最初から読み、文法を覚えてから始めたわけではありません。
自分が普段行っている操作をAIへ説明し、
この処理をVBAでできないか。
と相談しながら作っていきました。
そして、まず一行だけではありますが、ROUNDを含む計算式を作る処理が動きました。
ここで大事なのは、社員が最初から自分で「この作業を自動化したい」と発案したわけではないという点です。
今回、きっかけを出したのは会社側です。そのうえで、実際にAIへ説明し、コードを試し、一行を動かしたのは本人でした。
自発的に大きな改善を始めたという話ではありません。ただ、用意されたきっかけを受けて、自分で手を動かし、一歩進んだ。その事実には意味があると思っています。
「仕事とはこういうもの」と思うと、自動化の発想に行きにくい
日常業務には、昔から同じ方法で続けている作業がたくさんあります。
毎回同じところをクリックする。同じ文字を入力する。似たような式を何度も組み立てる。同じ情報を別の場所へ転記する。
毎日行っている本人ほど、それを「面倒な作業」として認識していないことがあります。
特に、仕事として教えられた手順であれば、なおさらです。
この作業は、こうやるものだ。
仕事なのだから、これくらい手がかかるのは普通だ。
そう思っていると、その作業を自動化する、あるいは別の方法へ変えるという発想そのものが出にくくなります。
未経験から仕事を覚えた人であれば、まず求められるのは、教わった手順を正しくこなすことです。
その段階で、
この手順は本当にすべて必要なのか。
ここは、人間が毎回行う必要があるのか。
と考えるのは簡単ではありません。「自分の判断で、教わった手順を変えてよいのか」という迷いもあると思います。
今回の社員も、おそらくそれに近かったのだと思います。
ROUND式を毎回手で組み立てるのは面倒だから、自動化したい。
というところから始まったわけではありません。
教わった方法で仕事をして、それを正しくこなす。それが日常業務として定着していました。
だからこそ、会社側が、
そこは変えてもよい。
その作業は、もう少し楽にできるかもしれない。
AIに相談してみたらどうか。
と、改善してよいこと自体を示す必要があるのだと思います。
AIを業務で活用するうえでは、AIの使い方を覚えること以前に、今行っている仕事を一度疑ってみること、そして、今のやり方を変えてもよいと思えることが重要なのだと感じています。
まだ一行しか動かない。それでも、次が見えてきた
最初にできたものは、実務ツールとしてはまだ途中です。
一行処理するたびに Alt+F8 を押してマクロを選び、実行する。
これでは、手作業より多少速くなっても、大きな効率化とは言えません。
そこで、次の話になります。
- 一行ではなく、選択した範囲をまとめて処理できないか
- 開いているシートの中から、対象になる行を判定できないか
- ROUNDの桁数を、その都度指定できないか
- ショートカット一つで実行できないか
実際に使ってみると、次に直したいところが見えてきます。
これは以前の技術ノートでも書いた、
作る → 使う → 気づく → 改善する
という流れそのものです。
最初から完成したシステムを作る必要はありません。まず一行を動かしてみる。そこからでよいと思っています。
AIによって「VBAを書ける人」の意味が変わってきた
以前であれば、
これを自動化したら楽になる。
と思っても、そこでVBAという壁がありました。
コードが書けない。社内に詳しい人がいない。外部へ頼むほど大きな仕事でもない。
そうすると、小さな改善ほど、
まあ、手でやればいいか。
で終わってしまいます。
AIによって、この壁はかなり低くなりました。
VBAを最初から理解していなくても、
- 今はこのような操作をしている
- このセルを使い、この計算式を作りたい
- 空欄だったら処理しないでほしい
- 選択している範囲だけを対象にしたい
と条件を説明しながら、コードを作り、試せるようになったからです。
もちろん、AIが作ったコードをそのまま信用すればよいわけではありません。
計算結果が正しいか。違う条件でも正しく動くか。想定外のセルを変更していないか。
最後に確認するのは人間です。特に設計成果では、そこをAI任せにはできません。
それでも、**「コードが書けないから、自動化できない」**という状況は変わってきたように感じます。
AIがあっても、決まった繰り返しにはVBAが使いやすい
最近は、AIへ自然な言葉で指示し、Excelの内容を確認したり、セルや数式を操作したりすることもできるようになってきました。
そうなると、
そのうちVBAはいらなくなるのではないか。
という考え方もあると思います。
私は、少なくとも今すぐそうなるとは考えていません。
例えば、
このブックを見て、今回の条件に該当する場所を探し、修正方法を考えてほしい。
という、その都度条件が変わる処理はAIに向いています。
一方、
この範囲を選んだら、毎回同じルールでROUND式を作る。
という処理をするたびに、AIへ同じ条件を説明するのも効率的ではありません。
一度ルールが固まった処理であれば、VBAなどの道具にしておき、ショートカット一つで毎回同じ処理をする方が速く、再現性もあります。
AIはVBAを不要にするだけではなく、VBAを作るための負担を下げているとも考えられます。
これまでならプログラミング経験者でなければ作りにくかった小さな社内ツールを、実務を知っている人が、AIと一緒に作れる。
そこに大きな変化があると思っています。
VBAは作成時だけ使い、成果品は通常のExcelにできる
もう一つ、自動化するときに気になるのが成果品です。
VBAを使うというと、
納品するExcelも、マクロ有効形式にしなければならないのではないか。
受け取った相手にも、同じ環境が必要なのではないか。
と思うかもしれません。
今回考えている使い方は、そうではありません。
VBAそのものに数量計算をさせるのではなく、VBAにはExcelの標準数式を作らせます。
例えばVBAを実行した結果、セルに、
=ROUND(B12*D12/F12,2)
という通常のExcel数式が入れば、その後の計算にはVBAは必要ありません。
VBAは、あくまで作成時の入力支援です。
さらに、こうした道具を .xlam というExcelアドイン形式にまとめ、作業するPC側に持たせる方法もあります。
そうすれば、
- 社内ではVBAを使って作業を効率化する
- 元請会社へ渡す数量計算書自体は、通常の
.xlsxとして残す
という切り分けもできます。
自動化を考えるときには、自分たちが速く作れるかだけではなく、受け取った人が特別な環境なしで確認できるかまで考えておく必要があります。
全自動ではなく、人が考えなくてよい操作を減らす
ここから先、機能はいくらでも増やせそうです。
シート全体を処理する。選択範囲だけを処理する。現在の一行だけを再処理する。ROUNDの桁数を切り替える。ショートカットから呼び出す。計算式を文字で入力したら、数値や演算子を各セルへ展開する。
考え始めると、いろいろできます。
しかし、できるから全部やる、ではありません。
数量計算書には例外があります。様式も違います。一行では収まらない計算もあります。途中で一度断面積を求め、その答えを別の行から参照して次の計算をする場合もあります。
すべてを自動判定させようとすると、今度は道具を作り、維持するための負担が大きくなります。
だから、
- 簡単なところは機械に任せる
- 特殊なところは人が直す
- 必要なら選択範囲だけ処理する
- うまく処理できない行は、最初から人に残す
そのくらいの距離感で十分だと思っています。
自動化の目的は、全自動にすることではありません。
人が手を動かす必要の薄いところを減らし、人が考えるべきところに時間を使えるようにすること。
そこを間違えないようにしたいと思います。
一つ動かすと、今までの仕事が少し違って見えてくる
AIを業務で使いたいと思っても、
自分の仕事のどこで使えばよいのか分からない。
という人は多いと思います。
その場合は、難しく考える必要はありません。
普段のExcel作業を一度見る。何度も同じ場所をクリックしていないか。同じような数式を何度も作っていないか。同じ情報を別の場所へ転記していないか。そこに技術的な判断は必要なのか。ただ手を動かしているだけではないのか。
一つでも見つかったら、
この操作を少し減らせないか。
とAIに聞いてみる。
最初は一行だけでも構いません。
完成したものを最初から目指すのではなく、一つ作る。使う。不便なところを見つける。もう少し直す。その積み重ねで十分です。
そして、最初から自分で改善点を見つけられなくても構わないと思っています。
誰かから、
ここは変えられるかもしれない。
と教えられ、まず一度やってみる。その経験から、
では、これはどうだろう。
と、次の改善点を自分で見つけられるようになればよい。
VBAを知らなかった人でも、AIと一緒なら最初の一歩を踏み出せます。そして一度、**「今まで手でやっていた仕事は、自分でも変えられる」**という経験をすると、当たり前だと思っていた仕事の見え方も、少し変わってくるのではないかと思っています。
今回できたのは、まだ一行の処理です。
でも、その一行から、もう少し育ててみます。
次は、AIの読み取りと決まった処理を組み合わせてみる
今回とは少し違うところで、もう一つ試してみたいことがあります。
配筋図を作成した後に作る鉄筋加工図と、そこから作成する鉄筋重量表です。
鉄筋番号、鉄筋径、長さ、本数。加工図のPDFには、重量表を作るために必要な情報があります。
では、その情報をAIに読み取らせ、既存のExcel帳票を壊すことなく、必要な数字だけを所定の場所へ渡せないか。
AIに完成したExcelを自由に編集させるのではなく、AIが得意な読み取りと、決まった処理をする道具を組み合わせる。
この方法についても、実際の業務を前提に考えてみたいと思います。
続きは、また別の技術ノートで書きます。