Excelマクロではよく「変数」を使うことがありますが、変数を宣言したあとにその変数に対して「型」を指定することがよくあります。
税理士業務でよく使うExcelマクロの変数の「型」に関して自分の知識を整理してみます。
Excelマクロの変数の「型」とはどんなものか
今回の記事で触れるExcelマクロの変数の「型」とは、変数を宣言した後に記載する文字のことで、具体的にはこんなやつです↓
変数を「宣言」するときにはDimを使用しますが、変数を宣言した後に「As String」などと記載しているこの部分が変数の「型」になります。
Excelマクロで変数を宣言したら「型」を指定するほうがいい理由
Excelマクロで変数を宣言した場合には「型」を指定する方がいいと考えています。
というのも型を指定することでその変数に対してどんなデータが入っているのか、または入るのかをパッと見て理解することができるからです。
例えば変数の「型」が「As String」と記載されている場合にはその変数には「文字データ」が入ることになります。
なので、変数の「型」が「As String」の場合に数値データなどの文字データ以外がその変数に格納された場合にはエラーになります。
また、変数の「型」が「As Long」と記載されている場合にはその変数には「数値データ」が入ることになります。
なので変数の「型」が「As Long」の場合に文字などの数値データ以外がその変数に格納された場合にはエラーになります。
上の画像でいうとこんな感じです↓
このように変数の「型」を指定することで、エラー・バグの防止や、マクロを見たときのわかりやすさ(可読性っていうんですかね?)を上げることができます。
これが変数の「型」を指定することのメリットだと思います。
で、この「型」ですが数字データや文字データなどなんでもデータを格納することができる万能な「型」があります。それが「variant」型になります。
上の画像でいうところのこれです↓
この場合変数「WSH」には文字データや数値データなど、ありとあらゆる種類のデータを格納することができます。
便利な反面、どんな種類のデータが変数に格納されているのかパッと見ではわからないという点が難点です。
税理士業務で使用するExcelマクロでよく使う変数の「型」
自分が今まで作ってきた税理士業務周りで使用するExcelマクロでよく使っている変数の型ですが、数自体は多くありません。大体片手で足りるくらいです。
① Long型
数値データを変数に格納するときに宣言するのが「Long型」です。税理士業務周りのExcelマクロでは一番使用する「型」です。8割くらいの変数がこの型のような気がします。それくらいよく使う「型」です。
よく使う場面としてはデータの最終行を取得する際によく使います。
例えばこんなデータがある場合で
データの最終行が何行目かを取得したい時にはこんな感じのマクロを書いてよく使います。
このマクロに関しては本当によく使うテッパンのマクロになります。
Option Explicit
Sub test()
'A列の最終データが何行目かを調べてメッセージボックスに表示する
Dim i As Long
i = Cells(Rows.Count, 1).End(xlUp).Row
MsgBox i
End Sub
変数「i」を宣言してLong型を設定するとその変数「i」には数値データのみ格納することができます。
マクロを実行するとこんな感じで表示されます。ちゃんと最終行のデータが何行目かを取得できています。
そしてこの変数「i」はLong型なので数値データしか格納できません。文字データを入れるとエラーになります。
そこで試しにこのマクロを書き換えて変数「i」に対して文字データを格納してマクロを実行してみます。
Option Explicit
Sub test()
Dim i As Long
i = "税理士"
MsgBox i
End Sub
このマクロは数値データしか受け付けない変数「i」に対して文字データである「税理士」という文字データを格納し、それをメッセージボックスに表示させるマクロです。
このマクロを実行するとこのような画面が表示されます。
数値データしか受け付けない変数「i」に対して文字データである「税理士」を格納して実行したため変数の「型」が一致せず、マクロが実行できない。つまりエラーになったということです。
② Range型
Long型の次によく使う型が「Range型」です。「Range型」にはセルやセル範囲を格納することができます。
よく使う場面としてはセルの検索をする際などによく使います。
具体的にはこんな感じでデータがあった場合に
「電気代」と記載されたセルを探してそのセルの隣に「電気代 九州電力」と記載したい場合にはこんな感じでマクロを書くとやりたいことが実現できます↓
Option Explicit
Sub test()
'A列から「電気代」というセルを探して変数「rng」に格納する
'見つけたセルの右側に「電気代 九州電力」と入力するマクロ
Dim rng As Range
Set rng = Range("a:a").Find(what:="電気代")
rng.Offset(0, 1).Value = rng & " 九州電力"
End Sub
マクロを実行するとこうなります↓
インターネットバンキングのデータを会計ソフトにインポートする際にこの方法を使って摘要データを加工しています。
感覚的にはクラウド会計ソフトの自動仕訳ルールに近いものがあるのではないでしょうか。
③ String型
たまに使うのがこの「String型」です。
よく使う場面としてはPath(パス)を取得するときやフォームなどに入力されたデータをセルに転記したりするときによく使います。
次のマクロはインプットボックスに入力された文字をA1セルに入力(転記)するマクロになります↓
Option Explicit
Sub test()
Dim answer As String
answer = InputBox("すきな食べ物は?")
Range("a1").Value = answer
End Sub
実行するとこのようにインプットボックスが表示され
回答を入力してOKをクリックすると
A1セルに転記されます↓
他にも「Worksheet型」や「Boolean型」などたま~に使っている型がありますが頻繁につかうのは上の3つくらいです。
あとは全部「variant型」でやっています。
まとめ
税理士業務でExcelマクロを使用する際に変数を宣言したあとの「型」に関して自分の見解や、知識を整理するために記事を書いてみました。
マクロに関する書籍などをみると、変数宣言をした際の型に関して、よくわからなかったらとりあえず「variant」型にしておけ。みたいに書かれていることがあります。
自分もその考えには半分くらい賛成で、「Long」と「String」くらいは使い分けて、あとわからなかったら「variant」でいいんじゃないかと思っています。わかってきたら少しずつ型の指定もできるようになればいいのではないでしょうか。
そもそも税理士業務周りのExcelであればそこまで神経質にならなくてもなんとかなりますから。
【本日の近況報告】
美容室にて人生初の全自動シャンプー機なるものを体験。
まぁまぁな強さの水圧で頭皮をシャンプーされるので洗われている感がすごかったです。
【本日の1曲】
Tiggs Da Author/work it out
関東に住む先輩から、不意に送られてきたLINEで教えていただいたアーティストがこちら。
元ネタはスウェーデン出身のシーザーズってロックバンドの「jerk it out」って曲です。
確か昔アップルのiPodのCM曲として使われヒットした曲です。それをサンプリング?して歌をのっけているんですがこれはこれでカッコいい仕上がりになっています。
多分ヒップホップの人なんでしょうが、アルバムを聴いてみるとヒップホップだけじゃない多様な曲をやっていて聴きやすいです。