プログラミング初心者向けのVBA入門講座第20回です。
→過去の入門講座目次はこちら
前回までいくつかの関数を紹介してきましたがその中で紹介できていない関数で使用頻度が比較的高いと思われる関数をいくつか紹介していきます。
指定の書式に変換する関数(Format関数)
Format関数は数値や日付、文字列などを指定した書式に変換して返します。
Format(元の値, 書式)
引数「書式」には「セルの書式設定」の「表示形式」で指定する書式記号と同じ記号を用いることができます。
MsgBox Format(Now, “yyyy/m/d”) ‘//(例) 2019/10/9
MsgBox Format(Now, “ggge年m月d日”) ‘//(例) 令和1年10月9日
MsgBox Format(Now, “aaaa”) ‘//(例) 水曜日
MsgBox Format(Now, “hh:mm:ss”) ‘//(例) 10:45:09
MsgBox Format(2980, “#,##0円”) ‘//(例) 2,980円
データの種類を判定する関数(IsDate関数、IsNumeric関数)
IsDate(値)
IsNumeric(値)
IsDate関数は引数の値が日付または時刻として認識可能な場合にはTrueを返し、それ以外の場合にはFalseを返します。
IsNumeric関数は引数の値が数値として認識可能な場合にはTrueを返し、それ以外の場合にはFalseを返します。
次のコードではユーザーが入力した値が日付データかどうかを判別し、日付データだった場合に和暦の日付に変更します。
Sub sample1()
Dim adCal As Variant
Dim japCal As Variant
adCal = InputBox("西暦の日付(yyyy/m/d)を入力してください")
If IsDate(adCal) Then
japCal = Format(adCal, "ggge年m月d日")
MsgBox "西暦" & adCal & "は和暦で" & japCal & "です"
Else
MsgBox "日付を入力してください"
End If
End Sub
次のコードではセルA1の値が数値データかどうかを判別し、数値データだった場合にセルB1にA1の値を2倍した値を記入します。
Sub sample2()
If IsNumeric(Range("A1").Value) Then
Range("B1").Value = Range("A1").Value * 2
Else
MsgBox "セルA1に数値を入力してください", vbExclamation
End If
End Sub
ファイルが存在するときにファイル名を返す関数(Dir関数)
Dir(ファイル名)
引数の「ファイル名」はドライブ名やフォルダ名を含んだフルパスで指定します。ドライブ名、フォルダ名を省略した場合はカレントフォルダが適用されます。
Dir関数は引数で指定したファイル名のファイルが存在する場合にそのファイル名のみ(ドライブ名やフォルダ名を含まない)を返します。
ファイルが存在しない場合には空欄(“”)を返します。
次のコードではファイルが存在をすることを確認してからファイルを開くことでエラーが発生するのを回避しています。
Sub sample3()
Dim filePath As String
filePath = "D:test.xlsx"
If Dir(filePath) = "" Then
MsgBox filePath & "のファイルが存在しません", vbExclamation
Else
Workbooks.Open fileName:=filePath
End If
End Sub
コメント