日本語名

部品_値変換_実数

英語名

ConvertToDouble

URL

https://feelcodelab.com/vba_parts/converttodouble/

用途

・値(Variant)を、実数(Double:小数を含む数)に変換して返す
・変換できない値は、False や空の値ではなく、原因を示すエラーで止まる(Err.Raise)

基礎区分

土台

用途区分

取得

操作対象区分

セル

前提条件

・【最重要】変換の前に、VLOOKUP値取得の戻り値が、見つからない(#N/A)場合でないかを、呼び出し側が確認する
  → 確認の書き方:If IsError(v) Then MsgBox "見つかりませんでした": Exit Sub
・数値(整数・小数)、および、数字として読める文字列("1,000.5"、全角の "123"、前後の空白付きなど)を変換できる
・空白(Empty)・空文字・Null・エラー値(#N/A など)・日付・True/False・オブジェクト・配列は、変換できない値として、エラーで止まる(1018)
・整数(Long)として受け取りたい場合は、値変換_整数を使う(別の部品。小数は、エラーになる)
・変換できない値は、原因を示すエラーで止まる(Err.Raise)。呼び出し側の起点で受けて、Err.Description を表示する
    - 値が、実数に変換できない(数字として読めない・空白・Null・エラー値・日付・True/False など)(vbObjectError + 1018)
・Offset / Find / Resize / With は禁止

依存関係(部品)

・他の部品を参照しない(土台)
・組み合わせ:VLOOKUP値取得 → 値変換_実数
  (VLOOKUP値取得の戻り値を、IsError で確認してから、この部品で変換する)

依存関係(シート)

・特定のシートや表には、依存しない(値を受け取って、型を変換するだけ。VLOOKUP値取得などの戻り値(Variant)を想定している)

引数

vValue : 変換する値(Variant)。VLOOKUP値取得の戻り値や、セルの値

戻り値

Double : 変換した値

戻り値の型

Double

コード全文

Function 部品_値変換_実数(ByVal vValue As Variant) As Double

    部品_値変換_実数 = f_ConvertToDouble(vValue)

End Function

Function f_ConvertToDouble(ByVal vValue As Variant) As Double

    Dim d As Double
    Dim s As String
    Dim errNo As Long

    f_ConvertToDouble = 0

    If IsObject(vValue) Or IsArray(vValue) Then
        Err.Raise vbObjectError + 1018, "f_ConvertToDouble", _
                  "値が、オブジェクトまたは配列のため、実数(Double)に変換できません。"
    End If

    If IsError(vValue) Then
        Err.Raise vbObjectError + 1018, "f_ConvertToDouble", _
                  "値が、エラー値(#N/A など)のため、実数(Double)に変換できません" & _
                  "(VLOOKUP値取得の戻り値は、先に IsError で確認してください)。"
    End If

    If IsNull(vValue) Then
        Err.Raise vbObjectError + 1018, "f_ConvertToDouble", _
                  "値が Null のため、実数(Double)に変換できません。"
    End If

    If IsEmpty(vValue) Then
        Err.Raise vbObjectError + 1018, "f_ConvertToDouble", _
                  "値が空白(Empty)のため、実数(Double)に変換できません。"
    End If

    Select Case VarType(vValue)

        Case vbString
            s = Trim(vValue)
            If Len(s) = 0 Or Left(s, 1) = "&" Or IsNumeric(s) = False Then
                Err.Raise vbObjectError + 1018, "f_ConvertToDouble", _
                          "文字列「" & Left(vValue, 50) & "」は、数字として読めないため、実数(Double)に変換できません。"
            End If

            On Error Resume Next
            d = CDbl(s)
            errNo = Err.Number
            On Error GoTo 0

            If errNo <> 0 Then
                Err.Raise vbObjectError + 1018, "f_ConvertToDouble", _
                          "文字列「" & Left(vValue, 50) & "」は、大きすぎる(または小さすぎる)ため、実数(Double)に変換できません。"
            End If

        Case vbByte, vbInteger, vbLong, vbSingle, vbDouble, vbCurrency, vbDecimal
            d = CDbl(vValue)

        Case Else
            Err.Raise vbObjectError + 1018, "f_ConvertToDouble", _
                      "値の型(" & TypeName(vValue) & ")は、実数(Double)に変換できません" & _
                      "(日付・True/False は、数値として扱いません)。"

    End Select

    f_ConvertToDouble = d

End Function

呼び出し・活用事例

◆VLOOKUP値取得の結果を変換する◆
Dim v    As Variant
Dim rate As Double

v = 部品_VLOOKUP値取得(rng, "A-001", 5)
If IsError(v) Then MsgBox "見つかりませんでした": Exit Sub    '先に、見つからない場合を確認する

rate = 部品_値変換_実数(v)                                 '変換できない値は、エラーで止まる

※ 変換できない値の場合は、原因を示すエラーで止まる(起点で On Error で受けて、Err.Description を表示する)

BASファイル(ダウンロード)

ConvertToDouble.bas

バージョン

1.0

更新日

2026-10-29