GeminiでExcel VBAを修正してみました。

こんにちは! イマジネットPCサポートの橋崎です。

今回はお客様の依頼もありGoogleのAI、GeminiでExcel VBAを修正してみました。

修正したい内容をご説明

以前の担当者が作成したExcelファイルの修正依頼です。

確認するとExcelファイルに組み込んでいるVBAはそれほど複雑な仕組みではありません。

データのない白紙シートのExcelファイルにAccessからデータをインポートします。
次にデータを印刷するために整列や罫線を自動で加工する処理をExcel VBAで行っています。最終的にはこのExcelファイルでデータを保存する必要はありません。このファイルはこの処理をするためだけに作成されているものです。

例えばインポートされたデータがこのように配置されています。

VBAを実行すると

データがある範囲だけに列幅、行幅を調整、そして罫線を表示しています。

しかし、現状では次のような不具合もあり、できれば修正したいとご希望です。

例えば上のような状態でファイルを上書き保存したとします。

次に新たなデータをインポートした状態が以下のようだとします。
今回は下の行データがない状態ですね。

これに罫線を表示するVBAを実行すると

あれっ
本来であればデータのない行の罫線は表示したくないのですが、残ってしまいます。
元々、罫線が以前の状態で保存されていたので、それが原因かと思い、罫線を消去してから再実行してみましょう。

やはり、消えませんね。
更に罫線を消した状態を保存してもやはり思った通りにはなりませんでした。

今回はGeminiに手伝ってもらいましょう。

当店のExcel VBAのスキルは本当に大昔、少し勉強した程度です。

基本的にはExcelよりもAccessを扱う事が多いためAccess VBAは一定のスキルはあります。一般的にはAccess VBAがわかるのであればExcel VBAも同じではと思うでしょうが、やはり微妙に違いがあり、そう上手くはいきません。

だからと言って今更、Excel VBAを勉強したり、調べたりするような時間の余裕もありません。

しかし、今は最強ツールがありますよね。

そうです。

AIです。

今回はGeminiに手伝ってもらいましょう。

何故、Gemini?

詳しい方ならそのような疑問もあるでしょうね、理由はただ単純に日ごろ使用しているのがGeminiだからです。しかも課金もしていませんし当然、Officeと連携もしていません。

只々、そこにある道具を自分なりに使うだけです。

では、やっていきましょう。

ActiveSheet.UsedRangeが意外な落とし穴

VBAを確認するとデータが入力されている範囲を調べるために「ActiveSheet.UsedRange」を使用してるので、Geminiにこの役割を聞いてみたところ

現在開いているシート(アクティブシート)の中で、「一度でもデータが入力されたり、書式(色や罫線など)が設定されたりしたセルが存在する全体の範囲」 を取得(参照)するプロパティです。言い換えると、「そのシートで現在使われているデータエリアの全体(左上のセルから右下のセルまで)」 を意味します。

なるほど、一度でも入力された場合、そのセル内のデータをクリアしてもそれを「ナシ」とは判断しない可能性があるような記載ですね。

これでは初回のみ正しく実行される事は間違いないですが、次回も正しく動作させるためには完全にデータを消去するリセット機能を考えなければいけません。

これでは使いづらいと感じるのは仕方ないでしょう。

ただ、全ての既存のVBAを書き換えるよりも確実にデータが抹消できないか、そこに目を付けました。

Excelで次のような動作を発見しました。

はたしてデータは完全には抹消できないのでしょうか。様々な削除方法を試してみましょう。

実際に操作すると確かにクリアしただけではセル内のデータは完全に削除された事にはならないようですね。

何度かセル内のデータを「Delete」キーで削除しても、やはり罫線は表示されます。

しかし、次の動作をすると完全に削除されるようです。

下画像のように行ごと選択して右クリックで削除します。

削除してから上書き保存をして再度、罫線を表示するとデータがないセルに対して罫線は表示されませんでした。

なるほどね

完全抹消ができそうですね!

この動作の命令文を調べましょう。

勿論、Geminiで!

ws.Rows.Deleteで完全消去

どうやら、Excelはパフォーマンス向上のため、「過去に一度でも使われた最後のセル」をキャッシュするようです。

つまり、罫線であれば書式の設定から表示をクリアしただけではダメで、やはり行や列ごと削除して更に削除した部分を詰める作業をする必要があるようです。

その命令文は「ws.Rows.Delete」である事もGeminiが教えてくれました。

では、実行してみましょう。

確かに罫線は表示しなくなりましたが、VBAが登録されているコマンドボタンも消えてしまいました。

回避方法も実行したのですが、どうやら上手く動かないので、今回はリボンにVBAを登録して実行するようにしました。勿論、方法はGeminiに聞きました。

その他、リセット方法の処理もGeminiが教えてくれました。

どうやら、納品できるレベルにはなったきたようで、ホッとしました。

あとがきとAIについて

実はGeminiを使用してVBAの作成は今回が初めてではありません。

先月にはお客様に以前、納品したAccess VBAを変更するときにも使用しました。

感想としては今後Officeの学習は基本的にはする必要はないです。そう言い切ってもよいほどにGeminiの回答はそのまま実装できる素晴らしいものでした。

と、言うかこれからは様々な分野で学習すると言う事がなくなる世の中になるのではないでしょうか。どうしたらいいのでしょうか。少し心配になりますね。

何故かと言えば当店はOfficeとの連携はしていませんが、連携するとAIがExcelを操作する事もするようです。例えば当店のような使用方法ではコードをExcelにコピペする必要があります。

しかし、コピペするのはExcelのどこペーストすればよいのか、そこの知識がないとわかりませんよね。

しかし連携すると、その知識さえも必要がありません。つまり当店はたまたまExcelの知識があっただけで、これから初めてExcelを操作する人は学習よりも連携をして何をどうしたいのかをAIに伝えるだけでよいのです。

確かにAccess VBAの時には若干、手作業で修正する必要があったのも事実です。これはAccess VBAの知識がないと修正できないでしょう。しかし生成AIの学習スピードはおそるべき速さです。当店もそれではこの処理ができないとGeminiに伝えていますので、解決方法はもう見出しているでしょう。

これからの5年が今までの30年の進化を凌駕する事になると思います。

準備は大丈夫ですか?

それでは、お疲れ様でした。

ご注意

記事内容についてのご質問の受付は時間が取れませんので行っておりません。

ご自身が使用しているパソコンの状態・環境により、同じような症状であっても同じとは限りません。したがって記事に書かれている内容を行う事で必ずトラブルが解消されるとは限りません。またこの記事を参考に作業される場合は自己責任でお願いします。作業された場合での損害や障害が発生しても当店は一切責任は負いませんのでご了承下さい。

この記事の内容は投稿日時点での内容です。時期によっては仕様などの変更により、この記事のとおりではない場合もございます。