ChatGPTはExcelの使い方を教えてくれるし、Excelの数式も作れるし、マクロのコード・VBAも作れます。
特にVBAが作れるというのはかなり強力で衝撃的でした。しかし、それを作っただけでは、使いやすくなっているのか、というと、ただ作られただけになってしまいます。
そこで、使いやすくするために、クイックアクセスツールバーとキーボードのショートカットから、そのVBAを起動できるようにしておきます。
VBAをChatGPTに作ってもらう意味
VBAをChatGPTに作ってもらえるというと、本当のExcelの初心者で何もわからない人が、VBAを作ることができる、と期待してしまいますが、実際のところはそうなっていません。
やはりExcelのそれぞれの機能のことは知っておかなければなりませんし、もし作成したものが動かなかったらどうすればいいか混乱すると思います。
VBAを止めればいいんだよ、と思うかもしれません。しかし、そのVBAを止める操作は、本当の初心者にとっては、大丈夫かな?という不安があると思うのです。そういう意味で、ものすごくストレスがかかりますし、ハードルも高いと思います。
おそらくChatGPTでVBAを作ってもらう意味は、VBAがすでにできる人で、調べれば作ることはできるのだけど、プロパティやメソッドをいちいち調べるのが面倒なので、作ってもらって動かなければ、微調整しようかな、という使い方になってくると思います。
まだChatGPTは万全ではないので、今はまだVBAがある程度使える人が面倒だから使う、という感じになると思います。
初心者がVBAをChatGPTに作らせたいのであれば、はやる気持ちは理解できますが、その前にExcelで何ができるかを習得して、VBAの基本がわかるという状態になってから使うのが良いでしょう。
これからChatGPTが進化して、一言指示すれば大掛かりな注文システムを作ってくれるという時代になれば、その時は、本当に何も知らない状態から作れるようになります。
ChatGPTに作ってもらうVBAの規模
ChatGPTに、商品発注システムを丸ごと作ってもらうことはできません。特にExcelで作成するには、多くのVBAのサブルーチンが必要になります。フォームも必要になります。それらをChatGPTに一回から数回の指示だけで作ることはできません。
ChatGPTにお願いできるのは、せいぜい1つのメインルーチンとそれに付随する1つのサブルーチンまでです。
元来、ExcelのVBAは、大規模なシステムを作るものではないと考えています。今リボンにある機能をいちいち呼び出すのは面倒なので、一回の操作でできるようにまとめる、というExcel機能のカスタマイズという側面の方が大きいと思います。
毎回、図示するための3ptの枠線で塗りつぶしなしの四角形を作成するのは大変です。挿入タブをクリックしてその中の四角性を選択し、ドラッグして、図形の書式を設定していく、それを何度も何度も行っていくと、この作業ワンクリックでできないかな?と考えて、それでマクロやVBAを作成すると思うのですが、その規模がChatGPTでVBAを作成する規模です。
もし、大規模なシステムを作成したのであれば、そのためにどんなVBAが必要か考えて、それをひとつひとつChatGPTに作られて行って、それを人間が一つにまとめるとことが必要で、そこまでいくとAIで作るよりも、自分で作った方が早いように思えます。
VBAを作ってもらうためのプロンプト
ChatGPTにおいて、何かを指示する文章のことを「プロンプト」と呼んでいて、このプロンプトがわかりやすいものであればきちんとしたものが出来上がりますが、そうではない場合は、ちょっと怪しいものが出来上がります。
本来AIなので、私たちの意図を読み取ってどんな文章でもきちんとしたものが出来上がってくれればよいのですが、そこまでにはなっていません。
現状では、このプロンプトをどういう文章にするのかは気にしていかないといけないのです。特にExcelではいろいろな方法で同じ結果が出せるので、より具体的な指示が必要です。
少なくとも、最後には「というVBA」で締める文章になるでしょう。
MOSの問題文がかなりプロンプトとして優秀です。以下に例を挙げます。
「A5からC10のセル範囲をE1からの範囲に貼り付け、貼り付け先をテーブルに変換します。テーブルは○○の書式のものを使います」
MOSの問題文は誤解があるような書き方ではいけません。誰が読んでもExcelの知識さえあれば間違いなく読解できるようになっています。
このような文章を構成する力が必要で、そのためにはMOSの勉強があってもいいかもしれません。
上記の説明を箇条書きで表現してもよいでしょう。
- A5からC10のセル範囲をコピー
- 5からの範囲に貼り付け
- 貼り付けた範囲をテーブルにする
- テーブルの書式は○○とする
以上の作業をするVBA
このようなプロンプトが望ましいです。
VBAをChatGPTに作らせる
では実際にVBAをChatGPTに作らせます。
今回は、選択したセルを目立たせるために、アクティブセルに対し、セルと同じ大きさの赤の3ptの枠線でピンクの塗りつぶしの半透明の四角形を作成するVBAを作成します。
これを手動で作成するには、挿入タブから四角形を挿入し、図形の書式で線の太さと色、塗りつぶしの色、さらに透明度の設定をしなければなりません。これを1操作でできるようにします。
まず、プロンプトですが、次のように考えました。
「アクティブセルにセルと同じサイズの線の太さが3ptの赤、塗りつぶしピンクで透明度が50%の四角形を作成するVBA」
半透明は50%の透明度という具体的な表現にしました。
その答えが次の回答です。
このコードをコピーします。
ExcelでAlt+F11キーでVBEを起動し、挿入メニューからモジュールを挿入します。そしてそのモジュールにこのVBAを貼り付けます。
Excelの表示タブのマクロの表示で、この「CreateRectangleInActiveCell」を指定し、実行します。
そうすると次のエラーが出て動きません。
今回のコードを見てみると、普通ではあまり考えられないようなエラーを踏んだVBAが作成されています。
まず、ActiveCellは、アクティブセルを指すRange型のオブジェクトを意味するものとしてあらかじめ決まっています。
それに対し、「activeCell」なる変数をRange型として宣言し、さらにそれをアクティブセルとして認識させるために、Set文で「ActiveCell」ではない「activeCell」と連携しています。
まず、大前提として、VBAの変数名は大文字と小文字を混在させることができません。また上記で記したように、ActiveCellははじめから決まっているものなので、宣言も変数として再取り込みする必要がありません。
下記のマーカー部分は不要なので消すことができます。
その下のコードでも、「activeCell」変数に対して動作をするように考えられています。
その宣言をしなくなったことで、その下のコードの「activeCell」は頭が大文字である初めから設定している「ActiveCell」を参照するようになります。
今、できるだけわかりやすいようにこの間違いを説明したのですが、お分かりになりましたでしょうか。少し自分で書いていても理由が複雑だと感じました。
このようないわば非常識なコードをChatGPTは作り出してしまうので、VBAを読み解く力が中途半端だと、たったこれだけの設定をするのにも、なぜこうなっているか、原因を探れなくなってしまいます。
そのため、ある程度VBAに精通していないとChatGPTでVBAを作るということは難しいであろうと思っているのです。
VBAのできる人でもこれだけの長いコードを考えて打ち込むにはある程度の時間が必要です。それがChatGPTを使うことで、動作チェックしておかしなところを直すだけでできるという効率化をすることができます。このようにVBAがわかる人にとってはChatGPTは武器になると思います。
ともあれ、これでVBAはきちんと動作する状態になりました。
VBEのリセットボタンを押し、VBAの動作をリセットした後に、Excelの表示タブのマクロの表示で、「CreateRectangleInActiveCell」を指定し実行し、動作を確認します。
これではまだ使いにくい
私が本当に伝えたいのはここからの使い方なのです。現段階では、この動作をさせるにはマクロの表示で「CreateRectangleInActiveCell」を指定し実行することが必要です。
たったこれだけの動作をさせるのに、手作業よりは楽になったとはいえ、何度もこの作業をするには、手間がかかりすぎていると思いませんか?
もっと一回のクリック、一回の操作だけで動くようにしていなければ、仕事にならないのです。
そこで、活用できるのはクイックアクセスツールバー、またはショートカットキーです。
クイックアクセスツールバーは右クリックで様々なリボンにある機能や、Excelで操作できる機能を一発で呼び出すことができるようになっています。このクイックアクセスツールバーには、作成したVBAやマクロも登録できるのです。
また、マクロにはショートカットキーを設定することもできます。
そのどちらかに設定しておくことで、その機能を1操作で呼び出せるのです。
クイックアクセスツールバーにVBAを登録する
クイックアクセスツールバーの設定は、クイックアクセスツールバーを右クリックし、「クイックアクセスツールバーのユーザー設定」をクリックします。
左のコマンドの選択で「マクロ」、その下からクイックアクセスツールバーに登録したいVBAを選択、右のクイックアクセスツールバーのユーザー設定で、今VBAを登録したブック名に適用するようにし、真ん中の追加ボタンをクリックし、右下の「変更」をクリックします。
ここでは、クイックアクセスツールバーに表示するボタンの絵と名前を設定できます。わかりやすい短い名前にしましょう。
最後にOKボタンをクリックすると、クイックアクセスツールバーにボタンとして追加されます。
これをクリックするだけで、このVBAが実行されます。
ショートカットキーにVBAを登録する
ショートカットキーにVBAを登録するには、表示タブの中のマクロの「マクロの表示」で登録したマクロを選択して、「オプション」ボタンをクリックします。
ショートカットキーとして設定するキーを入力します。Shiftキーを押したままのキーに追加することもできます。OKボタンをクリックします。
マクロの画面ではこれ以上何もしないので、キャンセルします。
これで、Ctrlキーと設定したショートカットキーを押せば、このVBAが実行されます。
テンプレート保存
以上の手順で設定したVBA、クイックアクセスツールバーの設定は、今開いているブックを開いている時だけ有効になります。このブックを開いていなければ、作ったVBAの操作はできません。
だから、この設定は、ある程度、計算の仕組みが設定されている計算書のブックに設定すると効果的です。このブックを開いて、元データだけを入れ替えれば何かの集計表が自動的にできる、そのうえで、目立たせたいセルに色を付けるVBAを仕込むといった具合です。
そうすればそのブックを開いて、元データを貼り付けたあと、目で見て目立たせたいところにその処理をすればいいだけなのです。
この元の設定がされたブックを保存しておいて、何度も使いまわすうちに、設定をおかしくしてしまうことがあります。
それを防止するには、完全にこの設定が終わったブックをひな形ファイル化するとよいでしょう。ひな形ファイルのことを「テンプレート」と呼びます。
これはこのブックを保存するとき、F12のショートカットキーで「名前を付けて保存」にし、そのテンプレート形式で保存することになります。テンプレート形式の保存は2通りあって、今回はVBAが含まれる保存なので「Excelマクロ有効テンプレート」として、保存します。
テンプレートにして保存すると、保存する場所が自動で変更になりますが、それがお使いのパソコンのテンプレートの格納場所になるので、そのままのフォルダで保存します。
この形式で保存されると、そのテンプレートで保存したものは新規作成で開くことになります。
ファイルタブの新規をクリックし「個人用」をクリックすると、その中に入っています。今回は「赤枠挿入」というファイル名で保存したのです。
設定によっては、次のようにマクロセキュリティ警告が出ます。マクロを有効にするにしないとVBAは動作しません。
この状態で開かれたテンプレートは、テンプレートそのものではなく、テンプレートのコピーを新規作成で開いたものなのです。よって、テンプレートの元データを直接操作しないので、元のファイルが壊れるということが起きません。
まとめ
ChatGPTで作るVBAの規模は、リボンで出来るようなことを新しく自分で作りたいというものくらいまでで、大掛かりなシステム作成には不向きというお話、ChatGPTではコードを作るめんどうくささからは解放されますが、動かなかったときの対処は必要となるため、VBAの知識は必要というお話をしました。
また、ChatGPTでVBAが作成して、その時点で終わりではなく、それをいかに早く呼び出せるようにするのか、そのためのクイックアクセスツールバーとショートカットキーの設定方法をお話ししました。
このクイックアクセスツールバーとショートカットキーの設定は、ChatGPTで作成したものだけではなく、マクロの記録で作成したマクロでもできるので、記録したほうが早い操作に関してはそちらで作成したほうがより確実に動作するものが作れますし、スキルが高くなくても作成できると思います。
今回のような、作成した図形の書式を変えるという場合、マクロの記録をしている場合の注意点として、図形を作成したら最後まで選択を外さないことが重要です。選択を一回外してから書式を設定すると、再度その図形を選択したときに、その図形を選択するというアクションが加わるので、次にまた図形を作成したときも、記録した時点の図形にしか書式が設定されなくなります。選択を外さなければターゲットになる図形は選択されているもののままになるので、問題なくなります。
このようなことから、図形やグラフ、アクティブセル、アクティブシートに対するVBAはマクロの記録で作るよりもChatGPTできちんと考えてくれるようにして作成した方がいいでしょう。