部品_値変換_整数
ConvertToLong
https://feelcodelab.com/vba_parts/converttolong/
・値(Variant)を、整数(Long)に変換して返す ・変換できない値は、False や空の値ではなく、原因を示すエラーで止まる(Err.Raise)
土台
取得
セル
・【最重要】変換の前に、VLOOKUP値取得の戻り値が、見つからない(#N/A)場合でないかを、呼び出し側が確認する
→ 確認の書き方:If IsError(v) Then MsgBox "見つかりませんでした": Exit Sub
・数値、および、数字として読める文字列("1,000"、全角の "123"、前後の空白付きなど)を変換できる
・小数(1.5 など)は、丸めずに、エラーで止まる(1019)。黙って丸めると、気づきにくい誤りになるため
・Long の範囲(-2,147,483,648 ~ 2,147,483,647)を超える値は、エラーで止まる(1018)
・空白(Empty)・空文字・Null・エラー値(#N/A など)・日付・True/False・オブジェクト・配列は、変換できない値として、エラーで止まる(1018)
・実数(小数を含む数)として受け取りたい場合は、値変換_実数を使う(別の部品)
・変換できない値は、原因を示すエラーで止まる(Err.Raise)。呼び出し側の起点で受けて、Err.Description を表示する
- 値が、整数に変換できない(数字として読めない・範囲外・空白・Null・エラー値・日付・True/False など)(vbObjectError + 1018)
- 値が、小数のため、整数に変換できない(丸めない)(vbObjectError + 1019)
・Offset / Find / Resize / With は禁止・他の部品を参照しない(土台) ・組み合わせ:VLOOKUP値取得 → 値変換_整数 (VLOOKUP値取得の戻り値を、IsError で確認してから、この部品で変換する)
・特定のシートや表には、依存しない(値を受け取って、型を変換するだけ。VLOOKUP値取得などの戻り値(Variant)を想定している)
vValue : 変換する値(Variant)。VLOOKUP値取得の戻り値や、セルの値
Long : 変換した値
Long
Function 部品_値変換_整数(ByVal vValue As Variant) As Long
部品_値変換_整数 = f_ConvertToLong(vValue)
End Function
Function f_ConvertToLong(ByVal vValue As Variant) As Long
Dim d As Double
Dim s As String
Dim errNo As Long
f_ConvertToLong = 0
If IsObject(vValue) Or IsArray(vValue) Then
Err.Raise vbObjectError + 1018, "f_ConvertToLong", _
"値が、オブジェクトまたは配列のため、整数(Long)に変換できません。"
End If
If IsError(vValue) Then
Err.Raise vbObjectError + 1018, "f_ConvertToLong", _
"値が、エラー値(#N/A など)のため、整数(Long)に変換できません" & _
"(VLOOKUP値取得の戻り値は、先に IsError で確認してください)。"
End If
If IsNull(vValue) Then
Err.Raise vbObjectError + 1018, "f_ConvertToLong", _
"値が Null のため、整数(Long)に変換できません。"
End If
If IsEmpty(vValue) Then
Err.Raise vbObjectError + 1018, "f_ConvertToLong", _
"値が空白(Empty)のため、整数(Long)に変換できません。"
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_ConvertToLong", _
"文字列「" & Left(vValue, 50) & "」は、数字として読めないため、整数(Long)に変換できません。"
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_ConvertToLong", _
"文字列「" & Left(vValue, 50) & "」は、大きすぎる(または小さすぎる)ため、整数(Long)に変換できません。"
End If
Case vbByte, vbInteger, vbLong, vbSingle, vbDouble, vbCurrency, vbDecimal
d = CDbl(vValue)
Case Else
Err.Raise vbObjectError + 1018, "f_ConvertToLong", _
"値の型(" & TypeName(vValue) & ")は、整数(Long)に変換できません" & _
"(日付・True/False は、数値として扱いません)。"
End Select
If d <> Fix(d) Then
Err.Raise vbObjectError + 1019, "f_ConvertToLong", _
"値(" & d & ")は、小数のため、整数に変換できません(丸めません)。"
End If
If d < -2147483648# Or d > 2147483647# Then
Err.Raise vbObjectError + 1018, "f_ConvertToLong", _
"値(" & d & ")は、Long の範囲(-2,147,483,648 ~ 2,147,483,647)を超えています。"
End If
f_ConvertToLong = CLng(d)
End Function◆VLOOKUP値取得の結果を変換する◆ Dim v As Variant Dim qty As Long v = 部品_VLOOKUP値取得(rng, "A-001", 4) If IsError(v) Then MsgBox "見つかりませんでした": Exit Sub '先に、見つからない場合を確認する qty = 部品_値変換_整数(v) '変換できない値は、エラーで止まる ※ 変換できない値の場合は、原因を示すエラーで止まる(起点で On Error で受けて、Err.Description を表示する)
1.0
2026-10-29