Excelの作業は、手作業、関数、VBAのどれで進めるのが一番ラクなのでしょうか。
この回では、日付入力、書式変更、大量コピー、罫線、行列の挿入、列幅、フィルターといった定番の操作を、VBAと手作業・関数で比べた前半戦の結果を紹介します。
Excelの効率化に興味がある方は、ぜひ読んで下さい!
勝負のルール
セルの挿入・削除や、行・列の追加といった、おなじみのExcel操作をVBAでやると、どうなるかを比較しました。
せっかくの機会なので、Excel関数の使い方もおさらいします。
すべて載せるとページ数が膨大になるので、よく使うものに絞っています。
何でもVBAに置き換えればよいわけではありません。
関数で処理したほうが、効率がよい場面もあります。
同じ操作を、関数とVBAの両方で説明するので、使いやすいほうを試して下さい。
勝負の結果は、【今回の勝負】として決めていきます。
なお、ChatGPTのコードの出来は、原稿を書いた2023年7月ごろの、当時のモデルでの結果です。
今のモデルなら、やり取りの回数が変わる可能性があります。
関数を使わない操作は「手入力」と表記しています。
日付まわりの勝負
①今日の日付を入力する。
仕事でよく使う、今日の日付の入力です。
ひょっとすると、「12/3」のように、毎回手で打ち込んでいるかもしれません。
今後は、関数やVBAで処理しましょう。
ChatGPTには「関数を教えてください」とだけ聞いたのに、VBAのコードもセットで教えてくれました。
今後は最初から、「関数とVBAの両方で教えてください」と頼むほうが、手間がかかりません。
関数とVBAの両方で試すと、同じ結果になりました。
A1セルには、この原稿を書いた日の「2023/7/11」が表示されます。
表示形式を変えたいときは、A1セルを右クリックして「セルの書式設定」から、好きなフォーマットを選びます。
一覧に希望のフォーマットがなければ、自分でカスタマイズします。
【今回の勝負】手作業(関数)の勝ち。
日付を入れるだけなら、関数が便利です。
②今日の日付の表示形式を変える。
日付を入れたあとに、フォーマットを変えたいことがありますよね。
たとえば、「2023/7/11」を「令和5年7月11日(火)」に変えたい場合です。
「日付」の中のフォーマットには、該当するものがありません。
そこでChatGPTの出番です。
セルの書式設定で行う手順はかなり複雑で、手入力のほうが早いので省略します。
コードを出してもらうと、曜日が英語で表示される、全角にならないといった問題があり、2〜3回修正を頼みました。
ネット検索で見つけたコードが間違っていても、直してはもらえません。
ChatGPTなら、出力したコードの修正までやってもらえます。
プログラミングの知識がなければ使えない、というイメージがあるかもしれません。
ですが、ChatGPTへの修正依頼のコツをつかめば、プログラミング未経験でもVBAを使いこなせます。
依頼の仕方はとても簡単です。
曜日の表記がおかしければ、「令和5年7月11日 (Tue)になりました」と、VBAを実行した結果だけを教えればよいのです。
ほかにも希望があれば、「〇〇にしたい場合はどうすればよいでしょうか?」
と聞くだけで、たいてい答えてくれます。
【今回の勝負】VBAの不戦勝。
日付の書式が複雑になるなら、VBAを使うか、手で入力するほうが確実です。
データのコピーと罫線
③同じ値を10,000行に入力する。
A1〜A10000セルに「1」を入れる作業を、手入力とVBAで比べてみました。
データのコピーは、意外と面倒です。
A1に「1」と入力し、A1セルの右下の黒い「+」をA10000セルまでドラッグするか、A10000セルまで移動して「1」を入れ、CtrlキーとShiftキーと上矢印キーを押してからペーストします。
どちらもひと手間かかります。
VBAなら、コードをコピーして実行するだけで、10000行分の「1」があっさり入りました。
【今回の勝負】VBAの勝ち。
大量のデータを複製するなら、VBAに軍配が上がります。
さらに、1行目に「1」、2行目に「2」と、1ずつ増やしながら入力することもできます。
手作業なら、③の作業のあと、セルの右下のアイコンから「連続データ」を選びますが、VBAならコードのコピペだけで完了します。
数値のコピーや連番づくりをよくする方は、この機会にVBAを試してみてはどうでしょう。
④罫線を引く。
Excelで罫線を引いて資料を作る場面は、多いですよね。
手作業とVBAの両方で、同じ罫線を引いてみました。
手作業なら、範囲を選択して罫線のボタンを押すだけで完成します。
正直、罫線を引くVBAのコードは、うまく出してもらうのが難しいです。
罫線の種類が違ったり、引きたいところに引かれていなかったりして、調整が大変です。
【今回の勝負】手作業の勝ち。
行列の挿入、列幅、範囲のクリア、フィルター
⑤行や列を挿入する。
1行目と2行目の間に1行、A列とB列の間に2列を挿入する作業を、手作業とVBAで比べました。
行と列が入ったことが分かるよう、A1〜C3セルを黄色で塗りつぶしています。
手作業なら、行と列を選んで「挿入」を押すだけです。
VBAは、前の例よりコードが簡単ですが、VBEに貼り付けてマクロを実行する手間がかかります。
ちょっとした作業なら、手作業のほうが気楽かもしれません(笑)。
ただ、一連の処理の途中で行や列を挿入する場合は、VBAで対応したほうが効率的なこともあります。
【今回の勝負】手作業の勝ち(VBAが有利な場合もあり)。
列幅の設定と範囲のクリア
⑥列幅を決まったパターンに変える。
列を足すだけなら、手作業のほうが速いです。
では、A列を20ピクセル、B列を50ピクセルにして、J列まで同じ繰り返しにする場合はどうでしょう。
すべての列を同じ幅にするのは簡単です。
しかし、別々の幅にするのは面倒くさいです。
Excelで資料を作ったことのある方なら、その面倒さはすぐ想像できるはずです。
VBAなら、簡単な処理でできるかもしれません。
ChatGPTから正しいコードを引き出すまでに、5〜6回のやり取りが必要でした。
幅はピクセルではなくポイントで設定します(20ピクセルが18.8ポイント、50ピクセルが5.63ポイント)。
ポイントで指定する手間はあるものの、手作業よりずっと楽です。
【今回の勝負】VBAの勝ち(微調整は必要)。
ちなみに、Shiftキーを押しながら複数の列を選べば、まとめて幅を変えることもできます。
⑦指定範囲のセルの値を消す。
消すだけなら手作業でもできますが、範囲が広いと面倒になります。
Excelの最大行数は1,048,576行、最大列数は16,384列です(Excel 2007以降)。
私は以前の仕事で、30万行以上のデータを扱ったことがありますが、範囲が広がるほど処理は重くなります。
VBAで処理しても時間はかかります。
でも、一度実行したらPCのそばを離れられるので、休憩前などに処理する、という使い方もできます。
今回は、分かりやすくA1〜E5セルの値を消す例で試しました。
とてもシンプルなソースコードで、実行すると、A1〜E5セルの値がちゃんとクリアされました。
【今回の勝負】引き分け(範囲しだい)。
フィルターで絞り込む勝負
⑧1つの列でフィルターをかける。
データ集計の仕事をしている方なら、フィルター機能はほとんどの方が使っているでしょう。
じつはフィルターも、VBAで実行できます。
IT会社の商品一覧で、担当支店が「大阪支店」のものだけを絞り込みました。
手作業では、「データ」→「フィルター」で、「担当支店」を「大阪支店」だけにします。
VBAを実行しても、手作業と同じ結果になりました。
ただし、VBAを動かす手間を考えると、手作業のほうが楽な場合もあります。
【今回の勝負】手作業の勝ち。
⑨複数の列でフィルターをかける。
では、絞り込む条件が2つ以上あるときはどうでしょう。
手作業だと、少し手間になりそうです。
担当支店が「東京支店」で、商品名が「LP制作」のものだけを抜き出します。
手作業では、B列を「東京支店」、C列を「LP制作」にして、それぞれフィルターをかけます。
VBAのコードは少し長いものの、ChatGPTが自動で出してくれるので助かります。
複数の列でフィルターをかけるときは、VBAのほうが向いているかもしれません。
ただし、列を挿入・削除するとVBAの修正も必要になるので、その点は注意して下さい。
【今回の勝負】VBAの勝ち(改修のときは注意)。