VBA編 導入 VBAって何だろう?
「VBA」って知ってます? Visual Basic for Applicationsの略で、要はExcelのプログラミング言語のことなんですが、これを使えば、今まで手作業で時間をかけてやっていたあんなことやこんなことが自動でできてしまう、という、話だけ聞くととてもすばらしい、スグレモノです。 でね、このVBAの学習・解説を、これからやっていこうかな、と思ってまして。
でもね、VBAのコードってこんな感じ※1なんですよ。
…う~ん、むずかしそう…。 何かいきなり拒否反応が…。
でも、僕個人の話をすると、僕にExcel教えてくれた人が、VBAの自動処理使ってたんですよ。
で、僕もそれをそばで見たり使わせてもらったりしてたんだけど、たしかに仕事速いし、手作業しないから楽だし、すごい便利だなー、と。
で、「コードを書く」ということも、素人から見ると全然理解できない、呪文のような記号の羅列を操っているわけで、すごく頭良さそうでかっこいいなーと思いまして。
で、憧れた、っていうのが、僕のVBA学習の出発点。
で、このページ読んでるみなさんの中にも、「VBA使えたらなー」って人、多いと思うんですよ。
じゃあ、どんなふうに勉強したら良いのか。
それを、僕なりの仕方で解説してみよう、というのが、この「VBA編」の趣旨です。
で、今回はその導入。
例えば。
こんな仕事を頼まれました。
「このデータさあ~、印刷したいんだけど」※2
ふんふん、印刷、すれば?
「でさあ~、文字をきっちり収めたいんだよね」
収めればいいじゃん、列幅広げて※3。
「いや、列幅は変えたくない。50固定」
じゃあ小さくする?※4 ※5
「それだと印刷したとき、小さい字が読みにくい」
なら、折り返しだ。
右クリック→セルの書式設定→配置タブから、「折り返して全体を表示する」を選択、と※6。
で、後は、全部の行を選び、行と行のあいだでカチカチッとダブルクリックしてやって、適切な高さに調節する※7 ※8、と。
これなら完ペキでしょ。でしょ?
「…う~ん、実はね、それだと、印刷したとき文字切れするんだよね」
え?
そうなの?
・
・
そうなんです。
画面上ではきちんと見えていても、印刷すると文字切れすることがしばしばあるんですよ。
こちらとしてはちゃんと、「折り返して表示する」にして、行の高さの自動調節もし、画面表示上はぴったり収まってる。
なのに、印刷するとダメなこと、あるんです。
みなさんの方でも試しに、似たようなデータを作って、印刷物とデータを見比べてみてください。
で、どうやらコレ、Excelの仕様みたいなんですね。
だから、「チッ、Excel使えねーなー」って言ってても事態は変わらないわけで、こちらがExcelの都合に合わせてあげないといけない。
「…だから、文字切れしない行の高さに調節してほしいんだよね」
…「文字切れしない行の高さ」って、どれくらいデスか?
「えーと、ぴったり収まってる状態からプラス1行分くらい余裕があれば、大丈夫かな」
ってことは、こういう感じ?※9
「そう!そういう感じ。じゃあ、後、やっといて。全部ね。」
・
・
頼むだけ頼んで、いなくなってしまいました。
でも、コレね、現状の高さプラス1行だから、1行のところは2行に、2行のところは3行に…、ってしないといけない。
だから、1行ずつ、ちまちまちま…と広げていくことになる※10、のだけれど…。
めんどくさい。正直。
ためしにおしりを確認したら、え~?603行もあるのかよ。
…仕方ない。
ちまちまやるか。
…ちまちま…
えーい!
やっぱり面倒だ!
文字切れしなきゃ良いんだろ!
文字切れさえしなきゃ!※11 ※12
「…紙のムダ使いになっちゃうからさあ、そういうの、やめて」
…やっぱり怒られてしまいました。
ハイハイ、1コ1コやりますよ、モウ。
・
・
・
・
終わりました、603行。
全部手作業ですよ※13。
20分かかりましたよ…。
「…ココ、やり忘れてるよ」※14
*おおっと*
・
・
例え話は、ここまで。
これまでのところは、「ちまちま手作業するの、面倒くさいよね」ってことを再確認するためのお話でした。
さて、みなさんの側でも、これと同じ作業ではないにせよ、似たようなちまちま手作業の経験、あると思います。
あるいは、まったく同じことでお悩みの方もいらっしゃるかと思いますが。
で、この作業、20分かかっていたわけですが、VBAで自動処理すれば、2分足らずで完了します。
しかも、手でちまちまやる必要はありません。
作業モレもありません。※15
(今回の文字切れ対策マクロは、其ノ10で紹介しております。
なので、このマクロが必要、という方は、なんとかそこまで読み進めてみてください。)
…もちろん、「2分で終わる」のは、「すでに組んであるマクロを動かすならば」です。
マクロを組むには、それなりの時間がかかります。
しかし、上の「印刷時文字切れ対策ちまちま手作業」が、毎日とか、せめて週に2回とか、それなりの頻度で発生するなら、コードを書いちゃう方が便利でしょう。
例えば、このコードを書くのに3時間かかったとしましょう。
でも、コードさえ書いてしまえば、あとは鼻歌うたってるあいだに作業は完了するのだから、「ちまちま手作業」10回で元が取れます。
11回目以降は、「空いた時間、何しようかな…」とうれしい悩みを抱えることになるでしょう。
VBAの利点って、こういうところにあるんじゃないでしょうか。
つまり、業務の効率化。
今回は、導入ということで、VBAのメリットについてお話しました。
次回はVBAの学習法について解説したいと思います。
あ、そうそう、「基礎編」にはひととおり目を通しておいてくださいね。
ある程度手作業でExcelを動かせる、っていう段階の次のステージに、「VBAによる自動化」は位置するので。
あと、今後コードをいくつか紹介していくと思うのですが、それらは自由に使ってくださって結構です。
練習用でも、仕事用でも、ご自由に。
ですが、結果は自己責任でお願いします。
他人様のPCのことまで、責任もてませんので。
スミマセン。
そうそう、上で例に挙げた「印刷時文字切れ対策」について。
上では、「ちまちま手作業」と「マクロによる自動化」を対比させるために話題にしたのですが、印刷対策としてなら、マクロを組まなくても、関数で対応可能です。
各セルのおしりに、char(10)を挿入してやれば良い※16 ※17。
char(10)って、Alt + enterと同じ、すなわちセル内改行と同じなんですよ。
だから、それを末尾にくっつけてやれば、おしりに1行増える、すなわちその分余裕ができて文字切れしなくなる、というワケなんですね。
ただし、改行コードを入れることになるので、もしかしたら、このExcelを別のアプリケーションへ2次利用する際などに、それが何か悪さをするかもしれません。
例えば、一度txtファイルにして、それを別データに貼り付け、なんて作業の際に、よけいな何かが発生する、とか…。
char(10)挿入は、あくまでも印刷対策として考えておいてください。
ご利用は計画的に。