マクロ、活用していますか?
まず、あなたのExcelに[開発]タブはありますか?
もし、まだなければ、いますぐにこの[開発]タブを表示させましょう。ルーティンワークでの残業圧縮に、効果絶大な機能です。
[ファイル]→[オプション]→[リボンのユーザー設定]→[開発]にチェック→[OK]で設定完了です。
さて、[開発]タブのリボンの中にある[マクロの記録]は、Excel業務を劇的に効率化させるVBA(Visual Basic for Applications)の入り口となる機能です。プログラムを自分で書かない(書けない)人でも、このボタンはさわってみたことがあるのではないでしょうか?
このシリーズ【ノン・プログラマー、仕事のためのマクロ・VBA】では、自動記録を皮切りにして、これまでプログラム言語を勉強したことのない人が、Excel業務課題をVBAで解決するために、自分オリジナルのプログラムを書くところまで、段階を追って解説していきます。
[マクロの記録](自動記録)では、できないこと
[マクロの記録]は、単純作業をソフトウェアに記憶させておくためにとても便利な機能ですが、「繰り返し処理」や「条件分岐」、「マウス操作」などを記録することができない制約があります。「繰り返し」や「分岐」も含めて完全自動化しようとすると、自分自身でVisual Basicのプログラムを書く必要にせまられます。
しかし、仕事も続けながら、プログラミングの勉強って、正直ツラいですよね。「コンピュータ・プログラミングの独学には、9割の人が挫折する」という統計調査もあります。では、どうしたら良いでしょう?
悩んだら、心静かに「色即是空 空即是色」の精神で、ひたすら写経にいそしんでください。
次章以降で詳しくご説明します。
例:支店ごとの売上順位をランキングするマクロを自動記録
たとえば、とあるチェーン店の業務担当者が、支店ごとの月間売上にランキングをつける仕事を自動化するとしましょう。
[開発]タブのリボンの中の[マクロの記録]ボタンを押してから、売上の高い順に支店名を並べ変え、オートフィルで1から8位までの順位づけ、1-3位までに地色をつけた上で、もとの支店番号順に並べなおして[記録終了]とします。
作業結果は、上図の通りとなります。
[記録終了]をした後で、同じく[開発]タブの中の[Visual Basic]ボタンを押すと、プログラム・エディタの中に、こんなプログラムができていませんか?
Sub ranking()
'
' ranking Macro
'
'
Range("A3:C10").Select
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range("C3:C10") _
, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("A2:C10")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("D3").Select
ActiveCell.FormulaR1C1 = "1"
Range("D4").Select
ActiveCell.FormulaR1C1 = "2"
Range("D3:D4").Select
Selection.AutoFill Destination:=Range("D3:D10")
Range("D3:D10").Select
Range("D3:D5").Select
With Selection.Font
.Name = "游ゴシック"
.FontStyle = "太字"
.Size = 11
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
.ThemeFont = xlThemeFontMinor
End With
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent6
.TintAndShade = -0.249946592608417
.PatternTintAndShade = 0
End With
Range("A2:D10").Select
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Range("A3:A10") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("A2:D10")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A2").Select
End Sub
これが[マクロの記録](自動記録)で、いま自分が自動化した一連の流れを、Visual Basic言語で記録したプログラムとなります。中学生レベルの英語力があれば、中身のおおよその内容は推測できると思います。一方で、Visual Basicの細かな文法は習っていませんから、ひとつずつの正確な意味は解らないでしょう。
でもいいんです。まず最初の一歩は、このプログラムを、テキストエディタなどで、丸ごと正確に書き写して下さい(コピペでは勉強になりませんよ)。レポート用紙に手書きで書き写しても良いかもしれません。細かな内容は分からずとも、自分がExcelに対して指示した操作が、プログラム言語だと「こう記述されるのか…」という雰囲気がつかめればシメたものです。だまされた、と思って、ぜひ一度試してみてください。
まとめ
VBA学習の第一歩は、[マクロの記録]で作成した自分のプログラムをひたすら写経すること
「写経」という言葉を使うと、なにやらとても宗教がかったイメージを持ってしまう方もいるかもしれませんが、じつはこれはかなり正攻法の独学方法です)。
(参照:「最強のプログラミング勉強法が写経である理由」
プログラミング言語も、一種の「外国語」とみなすと、入門者はまず単語を覚えて、短文を書き写すところからはじめますよね。その学習法と同じです。
[マクロの自動記録]で保存されたプログラムは、必ずしも簡潔な構文にはなっておらず、分かりづらい部分や、余計な文言も多く含まれます。しかし、それは慣れてきてから書き直せば良いこと。これまで学校などでプログラミングを習ったことのない人が、いきなり正統派テキストで「コレクション」「オブジェクト」「プロシージャ」と聞いて、パタンと参考書を閉じてしまうよりは、はるかに分かりやすい学習の入り口です。
まずは、(1)自分の業務ファイルの中で[マクロの記録]ができそうな素材を探してみること、(2)[マクロの記録]でできあがったプログラムを、心静かに(?)写経してみること、この2点からはじめてみてください。Excel仙人への道のりも、書き写しの一歩から。
この第一歩から、少しでも皆さんの残業時間が下降トレンドに向かってくれることを祈念いたします!