Windows PCを使って普段仕事をしている方は、Excelなどのオフィスソフトを利用する機会も多いのではないでしょうか。
さらに事務を担当している方は、プログラマーではなくてもExcelに標準で用意されているマクロやVBAを業務効率化の目的で使う場合もあるかもしれません。
とりあえずネットで情報を調べてみても、今自分が使用したい機能が見つからない…なんてこともあるかと思います。
せっかく業務効率化を目指していても、調べることに時間がかかりすぎてしまい、本来の目的を果たせないのはもったいないですよね。
今回は実際の業務でもすぐに使うことができるVBAの主要な文法を取り上げてみたいと思うので、自分がこれだ!と思うものを見つけてみて頂きたいと思います。
VBA文法一覧
VBAの全ての文法を紹介することは困難ですが、業務でよく使うものを想定し、ランダムに紹介していきます。
読み取り専用でブック(エクセルファイル)を開く
共用のサーバーに置いてあるエクセルファイルを開くときに、すでに誰かが閲覧していると編集不可の読み取り専用で開いた経験があるのではないでしょうか。
読み取り専用でファイルを開く設定にするのもVBAで行うことが可能です。
例えばあるファイルAを参照して、別のファイルBにデータを読み込みたい時など、双方のファイルは開くけれど、
参照するファイル(この場合ファイルA)には誤って変更を施さないようにしたい場合に活用できます。
1 2 3 4 5 6 7 8 9 |
'読み取り専用でエクセルブックを開く '例) Dim OpenFileName As String OpenFileName="サンプル.xlsx" Workbooks.Open Filename:=OpenFileName, ReadOnly:=True '結果) "サンプル.xlsx"という名前のファイルが読み取り専用で開かれる |
読み取り専用でエクセルファイルを開けば編集することができないため、思わぬ上書きを防ぐことができます。
VBAの処理時間を計測する
作成したコードが開始から終了するまでにどれくらい時間がかかるのかを測りたいときに使うことができます。
すぐ調べれば出てきそうですが、あらゆる書き方が存在し、特にVBA初心者の方は迷ってしまうと思います。
基本的には以下の書き方で処理の計測を行うことができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
'開始時間取得 startTime = Timer '何かしらの処理をここに記述する。 '終了時間取得 endTime = Timer '処理時間表示 processTime = endTime - startTime MsgBox "処理時間:" & processTime & "秒" '例) startTime = Timer If Not BlankRow Is Nothing Then BlankRow.Delete End If endTime = Timer processTime = endTime - startTime MsgBox "処理時間:" & processTime & "秒" '結果) '処理にかかった時間が"○○秒"で表示される。 |
計測が完了したらメッセージダイアローグで【処理時間: ○○秒】と表示されるようになっているので、計測時間もひと目でわかるプログラムです。
VBAは作業時間短縮のために活用するので、どのくらい時間をかけずに処理を行うことができるようになったかを調査することも必要ですね。
開いているシートで、値が入っているセルの最終行を求める
何らかの数値が入っているセルの最後の行が先頭行からみて何行目に当たるのかを突き止めるプログラムになります。
1行目から最終行までの間で、何らかのFor文の処理を行いたい時などによく使われます。
1 2 3 4 5 |
'最終行を求める 変数名 = Cells(Rows.Count, 1).End(xlUp).Row '例) LastRow=Cells(Rows.Count, 1).End(xlUp).Row |
“LastRow”は任意の変数名なので、自分がわかればどのような名前をつけても大丈夫です。
“Cells(Rows.Count, 1).End(xlUp).Row”で最終行が求められるということを認識しておきましょう。
開いているシートで、値が入っているセルの最終列を求める
今度は行ではなく、何らかの数値が入っているセルの最終列が、先頭列から見て何列目に当たるのかを突き止めるプログラムになります。
最終行の場合とよく似た文法になり、
1 2 3 4 5 |
'最終列を求める 変数名 = Cells(1, Columns.Count).End(xlToLeft).Column '例) LastCol=Cells(1, Columns.Count).End(xlToLeft).Column |
行の時と同様に、
“Cells(1,Columns.Count).End(xlToLeft).Column”で最終列が求められるといった定型文法を覚えておくと役に立つと思います。
半角英数字に変換可能であれば変換する
英数字は全角と半角が存在します。
例えば何らかのフォームに入力を行う場合には半角が好まれるケースが多いですよね。
全角の”AAA”を半角の”AAA”として処理したい場合には、
1 2 3 4 5 6 7 8 9 10 11 12 |
'半角英数字に変換可能であれば変換する 変数名2 = StrConv(変数名1, vbNarrow) '例) Dim FullChar As String BigChar = "AAA" Dim HalfChar As String HalfChar = StrConv(BigChar, vbNarrow) '結果) HalfChar = "AAA" |
StrConv関数を利用することによって、全角英数字を半角英数字に変換することができます。
あるシートの全角文字を別のシートに半角データとして転記する場合にも活用することができるので、覚えておくことをオススメします。
カンマ区切りで入力されている値を配列に入れる
配列を使うとプログラミング要素が少し強くなる気がするのではないでしょうか。
1つの変数に複数のデータがカンマ区切りで入っており、それらを個別のデータとして扱いたいという場合に使えます。
難しいことではないので、こちらもすぐに活用することができると思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
'カンマ区切りで入力されている値を配列に入れる 配列名=Split(変数名,"、") '例) Dim Region As String Region="東京、大阪、名古屋" Dim RegionList As Variant RegionList = Split(Region, "、") '結果) RegionList[0]="東京" RegionList[1]="大阪" RegionList[2]="名古屋" |
配列にまず格納して、その後インデックス番号で一つ一つの要素として取り出すことが可能です。
今回は”、”で紹介しましたが、”東京 大阪 名古屋”のようなスペース区切り(” “)の場合も、
配列名=Split(変数名,” “) の形で1つずつ分割することができるので、色々な分割パターンを覚えておくと便利です。
配列の要素数を数える
こちらも配列つながりです。
作った配列の中には要素がいくつあるのか調べたい場合に使うことができます。
先ほどの”RegionList”を使って実践してみると、
1 2 3 4 5 6 7 8 |
'配列の要素数を数える UBound(配列名) '例) UBound(RegionList) '結果) UBound(RegionList)=3 |
先ほど作った”RegionList”には”東京”、”大阪”、”名古屋”の3つの要素が入っていたので、答えは”3″になります。
まとめ
今回は業務でよく使うVBAの文法について取り上げてきました。
ほんの一部ではありますが、VBA業務では頻繁に見かけるものが多いので、マスターできるようにしましょう。
特にプログラマーではない事務担当者がVBAやマクロを扱うことは、なかなか難しく感じるかもしれません。
ロジックを考えることも大切ですが、時間がない場合はすでに出来上がっているプログラムをうまい具合に使用することも一つの手だと思います。
VBA文法を上手に活用し、業務効率化を目指していきましょう。
普段僕が使用しているVBAのテキストについても掲載しておきます。
コメント