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の勝ち(改修のときは注意)。