【VBA備忘録】オリジナル関数を作って月の英語表記を数字に変更する
JAN、FEB、MAR…を1、2、3に変更したい…!!!
A列に月の英語表記の略字が入力されているのでB列にその月の数字を入力するプログラムを作ります。
今回はFunctionでJANだったら1、FEBだったら2と戻り値を指定する方法を使います。
Functionは言わばオリジナルの関数です!同じ処理が何回も登場するようなプログラムの場合はとても便利になるので使い方を覚えておくといいと思います。
B列を最後の行までループし英語表記の隣に数字を入力する
標準モジュールまたはThisWorkbookまたは各シートなど、使いやすいところに下記を記載してください。
Sub 月を調べる()
Dim mon As String
Dim a As Long
'1. B列を最後の行までループする
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
'2. 英語表記をmonに格納
mon = Cells(i, 1)
'3. Functionにmonを引数として渡す
'5. aにChooseMを格納
a = ChooseM(mon)
'6. B列にChooseMで取得した戻り値の数字が入る
Cells(i, 2) = a
'7. 1.に戻る
Next i
End Sub
標準モジュールに下記を記載してください。
なぜ標準モジュールなのかは後述します。
Function ChooseM(mon)
'4. monが何かによってChooseMが変わる
Select Case mon
Case "JAN"
ChooseM = 1
Case "FEB"
ChooseM = 2
Case "MAR"
ChooseM = 3
Case "APR"
ChooseM = 4
Case "MAY"
ChooseM = 5
Case "JUN"
ChooseM = 6
Case "JUL"
ChooseM = 7
Case "AUG"
ChooseM = 8
Case "SEP"
ChooseM = 9
Case "OCT"
ChooseM = 10
Case "NOV"
ChooseM = 11
Case "DEC"
ChooseM = 12
End Select
End Function
実行すると
1. B列を最後の行までループする
2. 英語表記をmonに格納
3. Functionにmonを引数として渡す
4. monが何かによってChooseMが変わる(Function プロシージャへ)
5. aにChooseMを格納(Sub プロシージャへ)
6. B列にChooseMで取得した戻り値の数字が入る
7. 1.のループに戻る
の順に動いていき、順番にB列へ数字を入れていき、最終行まで入れたところで止まります。
Functionはどこに書くの?
先ほどFunctionは標準モジュールに記載しろ!と書きましたが
なんと標準モジュールに記載することで、Excelの関数としても使えちゃうのです!
上記Function プロシージャのChooseM部分が関数になります
実際にC列に入れてみました。
わ!同じ値が入ってる!!