【excel vba】指定範囲のデータをVariant変数の配列で返す
'**************************************************
'名称 :F_GetArrayRange 指定範囲のデータを配列で返す
'引数 :robjSheet (I ) Worksheet
' :vlRowMax (I ) Long:行番号To
' :vlColMax (I ) Long:列番号To
' :vlRowMin (I ) Long:行番号From
' :vlColMin (I ) Long:列番号From
' :rvReturn ( O) Variant:(返却用)配列
' :rsMsg ( O) String:エラーメッセージ
'戻り値:True=成功, False=どこかでエラーになった
'作成 :Kinaccco
'**************************************************
Public Function F_GetArrayRange(ByRef robjSheet As Worksheet _
, ByVal vlRowMax As Long _
, ByVal vlColMax As Long _
, Optional ByVal vlRowMin As Long = 1 _
, Optional ByVal vlColMin As Long = 1 _
, Optional ByRef rvReturn As Variant = "" _
, Optional ByRef rsMsg As String = "") As Boolean
On Error GoTo Sub_Err
Dim lbRet As Boolean
Dim llRowsCount As Long
Dim llColumnsCount As Long
Dim lvArray As Variant
'--- 初期値セット ---
lbRet = False
rsMsg = ""
'--- パラメータチェック ---
If robjSheet Is Nothing Then
rsMsg = "[ERR-01]Worksheet参照の受け渡しに失敗しました"
GoTo Sub_Exit
End If
If vlRowMax <= 0 Then
rsMsg = "[ERR-02]範囲最終行の受け渡しに失敗しました"
GoTo Sub_Exit
End If
If vlColMax <= 0 Then
rsMsg = "[ERR-03]範囲最終列の受け渡しに失敗しました"
GoTo Sub_Exit
End If
If vlRowMin <= 0 Then
rsMsg = "[ERR-04]範囲先頭行の受け渡しに失敗しました"
GoTo Sub_Exit
End If
If vlColMin <= 0 Then
rsMsg = "[ERR-05]範囲先頭列の受け渡しに失敗しました"
GoTo Sub_Exit
End If
'--- シートの最大行・列を取得する ---
With robjSheet
llRowsCount = .Rows.Count
llColumnsCount = .Columns.Count
End With
'--- 行・列番号チェック ---
If vlRowMin > llRowsCount Then
rsMsg = "範囲先頭行の値が正しくありません(" & CStr(llRowsCount) & "を超える)"
GoTo Sub_Exit
End If
If vlRowMax > llRowsCount Then
rsMsg = "範囲最終行の値が正しくありません(" & CStr(llRowsCount) & "を超える)"
GoTo Sub_Exit
End If
If vlColMin > llColumnsCount Then
rsMsg = "範囲先頭列の値が正しくありません(" & CStr(llColumnsCount) & "を超える)"
GoTo Sub_Exit
End If
If vlColMax > llColumnsCount Then
rsMsg = "範囲最終行の値が正しくありません(" & CStr(llColumnsCount) & "を超える)"
GoTo Sub_Exit
End If
'--- 指定範囲の値を取得する ---
With robjSheet
lvArray = .Range(.Cells(vlRowMin, vlColMin), .Cells(vlRowMax, vlColMax))
End With
If IsArray(lvArray) = False Then GoTo Sub_Exit
'--- 返却用変数に格納する ---
rvReturn = lvArray
'--- 正常終了 ---
lbRet = True
Sub_Exit:
On Error Resume Next
F_GetArrayRange = lbRet
Exit Function
Sub_Err:
rsMsg = "予期せぬエラーが発生しました" & vbCrLf & _
"プロシージャ名:F_GetArrayRange" & vbCrLf & _
"エラー番号:" & Err.Number & vbCrLf & _
"エラー内容:" & Err.Description
GoTo Sub_Exit
End Function