読者です 読者をやめる 読者になる 読者になる

アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

整数かどうか、またその範囲をチェックする関数

整数かどうかを一発チェックしてくれる関数を探していたのですが見つからず。
…えっ、本当にない…? いやあるでしょ…?
しかし見つからなかったので、とりあえず作りました。誰か知ってたら教えてください。

せっかくなので範囲チェックもやってくれるオマケ付きです。

で、「範囲チェックが不要なときもあるので、引数の最小値・最大値が省略されたかどうか」を調べる方法を探し…
IsMissingという関数で調べることは可能というのは分かったのですが、引数がVariantでなければならない様子。うーむ…

参考
VB6・VBA関数メモ:IsMissing関数 | フィロの村note

関数

Private Function checkLong(ByVal vNum As Variant, Optional ByVal lMinNum, Optional ByVal lMaxNum)

    If CLng(vNum) <> vNum Then
        ' 引数が整数でない場合FALSE
        checkLong = False
        Exit Function
    End If
    
    If IsMissing(lMinNum) = False Then
        ' 最小値が指定されている場合
        If vNum < lMinNum Then
            ' 引数が最小値を下回っている場合FALSE
            checkLong = False
            Exit Function
        End If
    End If

    If IsMissing(lMaxNum) = False Then
        ' 最大値が指定されている場合
        If lMaxNum < vNum Then
            ' 引数が最大値を上回っている場合FALSE
            checkLong = False
            Exit Function
        End If
    End If

    checkLong = True

End Function

使用例

Debug.Print checkLong(5)       ' True :整数
Debug.Print checkLong(3.1)     ' False:整数でない
Debug.Print checkLong(5, 1, 9) ' True :整数(1~9の範囲内)
Debug.Print checkLong(5, 6, 9) ' False:整数(6~9の範囲外)