'***************************************************************************************************
' セル範囲から配列変数への転記サンプル Module1(Module)
'
' 作成者:井上治 URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
'変更日付 Rev 変更履歴内容------------------------------------------------------------------------>
'04/02/11(1.00)新規作成
'16/11/19(1.10)*.xlsm化
'20/01/17(1.11)記述整理等
'***************************************************************************************************
Option Explicit
'***************************************************************************************************
' ■■■ シート側からの呼び出し処理 ■■■
'***************************************************************************************************
'* 処理名 :TEST9
'* 機能 :セル範囲から配列変数への転記
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2004年02月11日
'* 作成者 :井上 治
'* 更新日 :2020年01月17日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:ブックを明示していないのでアクティブなブックに対して作用します
'***************************************************************************************************
Sub TEST9()
'-----------------------------------------------------------------------------------------------
Dim objSh1 As Worksheet ' Sheet2
Dim tblVal(1 To 3, 1 To 4) As String ' 3×4の2次元配列
Set objSh1 = Worksheets("Sheet1")
' セル範囲を一気に配列に転記
tblVal = objSh1.Cells(1, 1).Resize(3, 4).Value
' 処理結果をメッセージ表示
MsgBox "tblVal(1, 1) = " & tblVal(1, 1) & vbCr & _
"tblVal(1, 2) = " & tblVal(1, 2) & vbCr & _
"tblVal(1, 3) = " & tblVal(1, 3) & vbCr & _
"tblVal(1, 4) = " & tblVal(1, 4) & vbCr & _
"tblVal(2, 1) = " & tblVal(2, 1) & vbCr & _
"tblVal(2, 2) = " & tblVal(2, 2) & vbCr & _
"tblVal(2, 3) = " & tblVal(2, 3) & vbCr & _
"tblVal(2, 4) = " & tblVal(2, 4) & vbCr & _
"tblVal(3, 1) = " & tblVal(3, 1) & vbCr & _
"tblVal(3, 2) = " & tblVal(3, 2) & vbCr & _
"tblVal(3, 3) = " & tblVal(3, 3) & vbCr & _
"tblVal(3, 4) = " & tblVal(3, 4)
End Sub
'***************************************************************************************************
' ■■■ シート側からの呼び出し処理 ■■■
'***************************************************************************************************
'* 処理名 :TEST9
'* 機能 :セル範囲から配列変数への転記
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2004年02月11日
'* 作成者 :井上 治
'* 更新日 :2020年01月17日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:ブックを明示していないのでアクティブなブックに対して作用します
'***************************************************************************************************
Sub TEST9()
'-----------------------------------------------------------------------------------------------
Dim objSh1 As Worksheet ' Sheet2
' Dim tblVal(1 To 3, 1 To 4) As String ' 3×4の2次元配列
Dim tblVal As Variant ' 配列で宣言するとエラーになる
Set objSh1 = Worksheets("Sheet1")
' セル範囲を一気に配列に転記
tblVal = objSh1.Cells(1, 1).Resize(3, 4).Value
' 処理結果をメッセージ表示
MsgBox "tblVal(1, 1) = " & tblVal(1, 1) & vbCr & _
"tblVal(1, 2) = " & tblVal(1, 2) & vbCr & _
"tblVal(1, 3) = " & tblVal(1, 3) & vbCr & _
"tblVal(1, 4) = " & tblVal(1, 4) & vbCr & _
"tblVal(2, 1) = " & tblVal(2, 1) & vbCr & _
"tblVal(2, 2) = " & tblVal(2, 2) & vbCr & _
"tblVal(2, 3) = " & tblVal(2, 3) & vbCr & _
"tblVal(2, 4) = " & tblVal(2, 4) & vbCr & _
"tblVal(3, 1) = " & tblVal(3, 1) & vbCr & _
"tblVal(3, 2) = " & tblVal(3, 2) & vbCr & _
"tblVal(3, 3) = " & tblVal(3, 3) & vbCr & _
"tblVal(3, 4) = " & tblVal(3, 4)
End Sub
'***************************************************************************************************
' シートto配列1(テスト)
'***************************************************************************************************
Sub シートto配列1()
'-----------------------------------------------------------------------------------------------
Dim objIchiran As Range ' 下の表のセル範囲
Dim vntIchiran1(1 To 1, 1 To 3) As Variant ' 年齢一覧1
Dim vntIchiran2 As Variant ' 年齢一覧2
Dim vntIchiran3 As Variant ' 年齢一覧3
Dim strResult As String ' 結果表示用
' 対象セル範囲の取得
Set objIchiran = ThisWorkbook.Worksheets("Sheet1").Range("$A$10:$C$20")
' 検査値の取得
With objIchiran
' 年齢一覧1
vntIchiran1(1, 1) = .Cells(1, 1).Value
vntIchiran1(1, 2) = .Cells(1, 2).Value
vntIchiran1(1, 3) = .Cells(1, 3).Value
' 年齢一覧2
vntIchiran2 = .Range("$A$1:$C$1").Value
' 年齢一覧3
vntIchiran3 = .Range(.Cells(1, 1), .Cells(1, 3)).Value ' ←19行(№10)が取り込まれる!?
End With
' 処理結果のメッセージ編集
strResult = "年齢一覧1"
strResult = strResult & vbTab & vntIchiran1(1, 1)
strResult = strResult & vbTab & vntIchiran1(1, 2)
strResult = strResult & vbTab & vntIchiran1(1, 3)
strResult = strResult & vbCrLf
'-----------------------------
strResult = strResult & "年齢一覧2"
strResult = strResult & vbTab & vntIchiran2(1, 1)
strResult = strResult & vbTab & vntIchiran2(1, 2)
strResult = strResult & vbTab & vntIchiran2(1, 3)
strResult = strResult & vbCrLf
'-----------------------------
strResult = strResult & "年齢一覧3"
strResult = strResult & vbTab & vntIchiran3(1, 1)
strResult = strResult & vbTab & vntIchiran3(1, 2)
strResult = strResult & vbTab & vntIchiran3(1, 3)
' 処理結果の表示
MsgBox strResult
End Sub
' 対象セル範囲の取得
Set objIchiran = ThisWorkbook.Worksheets("Sheet1").Range("$A$10:$C$20")
' 検査値の取得
With objIchiran
' 年齢一覧1
vntIchiran1(1, 1) = .Cells(1, 1).Value
vntIchiran1(1, 2) = .Cells(1, 2).Value
vntIchiran1(1, 3) = .Cells(1, 3).Value
' 年齢一覧2
vntIchiran2 = .Range("$A$1:$C$1").Value
' 年齢一覧3
vntIchiran3 = .Range(.Cells(1, 1), .Cells(1, 3)).Value ' ←19行(№10)が取り込まれる!?
End With
'***************************************************************************************************
' シートto配列2(テスト)
'***************************************************************************************************
Sub シートto配列2()
'-----------------------------------------------------------------------------------------------
Dim objIchiran As Range ' 下の表のセル範囲
Dim vntIchiran1(1 To 1, 1 To 3) As Variant ' 年齢一覧1
Dim vntIchiran2 As Variant ' 年齢一覧2
Dim vntIchiran3 As Variant ' 年齢一覧3
Dim strResult As String ' 結果表示用
' 対象セル範囲の取得
Set objIchiran = ThisWorkbook.Worksheets("Sheet1").Range("$A$2:$C$12")
' 検査値の取得
With objIchiran
' 年齢一覧1
vntIchiran1(1, 1) = .Cells(1, 1).Value
vntIchiran1(1, 2) = .Cells(1, 2).Value
vntIchiran1(1, 3) = .Cells(1, 3).Value
' 年齢一覧2
vntIchiran2 = .Range("$A$1:$C$1").Value
' 年齢一覧3
vntIchiran3 = .Range(.Cells(1, 1), .Cells(1, 3)).Value ' ←3行(№2)が取り込まれる!?
End With
' 処理結果のメッセージ編集
strResult = "年齢一覧1"
strResult = strResult & vbTab & vntIchiran1(1, 1)
strResult = strResult & vbTab & vntIchiran1(1, 2)
strResult = strResult & vbTab & vntIchiran1(1, 3)
strResult = strResult & vbCrLf
'-----------------------------
strResult = strResult & "年齢一覧2"
strResult = strResult & vbTab & vntIchiran2(1, 1)
strResult = strResult & vbTab & vntIchiran2(1, 2)
strResult = strResult & vbTab & vntIchiran2(1, 3)
strResult = strResult & vbCrLf
'-----------------------------
strResult = strResult & "年齢一覧3"
strResult = strResult & vbTab & vntIchiran3(1, 1)
strResult = strResult & vbTab & vntIchiran3(1, 2)
strResult = strResult & vbTab & vntIchiran3(1, 3)
' 処理結果の表示
MsgBox strResult
End Sub
Option Explicit
'***************************************************************************************************
' シートto配列3(テスト)
'***************************************************************************************************
Sub シートto配列3()
'-----------------------------------------------------------------------------------------------
Dim objSh As Worksheet ' 対象シート
Dim objIchiran As Range ' 下の表のセル範囲
Dim vntIchiran1(1 To 1, 1 To 3) As Variant ' 年齢一覧1
Dim vntIchiran2 As Variant ' 年齢一覧2
Dim vntIchiran3 As Variant ' 年齢一覧3
Dim vntIchiran4 As Variant ' 年齢一覧4
Dim strResult As String ' 結果表示用
' 対象シートの取得
Set objSh = ThisWorkbook.Worksheets("Sheet1")
' 対象セル範囲の取得
Set objIchiran = objSh.Range("$A$10:$C$20")
' 検査値の取得
With objIchiran
' 年齢一覧1
vntIchiran1(1, 1) = .Cells(1, 1).Value
vntIchiran1(1, 2) = .Cells(1, 2).Value
vntIchiran1(1, 3) = .Cells(1, 3).Value
' 年齢一覧2
vntIchiran2 = .Range("$A$1:$C$1").Value
' 年齢一覧3
vntIchiran3 = .Range(.Cells(1, 1), .Cells(1, 3)).Value ' ←19行(№10)が取り込まれる!?
'-------------------------------------------------------------※追加
' 年齢一覧4
vntIchiran4 = .Range(objSh.Cells(1, 1), objSh.Cells(1, 3)).Value
'-------------------------------------------------------------※追加
End With
' 処理結果のメッセージ編集
strResult = "年齢一覧1"
strResult = strResult & vbTab & vntIchiran1(1, 1)
strResult = strResult & vbTab & vntIchiran1(1, 2)
strResult = strResult & vbTab & vntIchiran1(1, 3)
strResult = strResult & vbCrLf
'-----------------------------
strResult = strResult & "年齢一覧2"
strResult = strResult & vbTab & vntIchiran2(1, 1)
strResult = strResult & vbTab & vntIchiran2(1, 2)
strResult = strResult & vbTab & vntIchiran2(1, 3)
strResult = strResult & vbCrLf
'-----------------------------
strResult = strResult & "年齢一覧3"
strResult = strResult & vbTab & vntIchiran3(1, 1)
strResult = strResult & vbTab & vntIchiran3(1, 2)
strResult = strResult & vbTab & vntIchiran3(1, 3)
strResult = strResult & vbCrLf
'-----------------------------
strResult = strResult & "年齢一覧4"
strResult = strResult & vbTab & vntIchiran4(1, 1)
strResult = strResult & vbTab & vntIchiran4(1, 2)
strResult = strResult & vbTab & vntIchiran4(1, 3)
' 処理結果の表示
MsgBox strResult
End Sub
' 年齢一覧4
vntIchiran4 = .Range(objSh.Cells(1, 1), objSh.Cells(1, 3)).Value