故郷を離れて三十数年、関東で暮らす永遠の少年のどーってことない日記
xxSEARCHxx
プロフィール

ST☆FF

Author:ST☆FF
HTTといえばインテルの Hyper-Threading Technology!・・・ではなく、放課後ティータイムのことだと思います。

最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
ブロとも申請フォーム
ブログ内検索
RSSフィード
リンク

最近の記事


Excel VBAで動的ジャグ配列を使う 

2017/03/18 21:09/Sat
Excel VBAで動的ジャグ配列を使う必要に迫られ、その際にテストで書いたコードをメモしときます。
古いバージョンのExcelでも問題なく動くと思います。(検証はしていません。)

' ************************************************************
' Excel2016:VBAで動的ジャグ配列を使う
' 参照設定:なし
' ************************************************************
Option Explicit

' 動的ジャグ配列を返す関数(厳密には3次元配列)
Private Function foo() As Variant

' 構造体などのユーザー定義型は扱いになにかと制限が多いので使わない
' ここでは最小単位をLong値のペアとし要素数2の配列で表現する
' 開始インデックスはWorksheetと相性が良い One Origin とする

Dim arr1() As Variant ' 1次元目の配列(戻り値)
Dim arr2() As Variant ' 2次元目
Dim arr3(1 To 2) As Long ' 3次元目(最小単位)

' ******* arr1(1) *****************************
arr3(1) = 10: arr3(2) = 11 ' 最小単位を編集
ReDim Preserve arr2(1 To 1) ' 2次元目を初期化し
arr2(1) = arr3 ' そこに格納

arr3(1) = 20: arr3(2) = 21 ' 最小単位を編集
ReDim Preserve arr2(1 To 2) ' 2次元目を拡張し
arr2(2) = arr3 ' そこに格納
' -----------
ReDim Preserve arr1(1 To 1) ' 1次元目を初期化し
arr1(1) = arr2 ' そこに格納
' -----------

' ******* arr1(2) *****************************
arr3(1) = 30: arr3(2) = 31 ' 最小単位を編集
ReDim Preserve arr2(1 To 1) ' 2次元目を初期化し
arr2(1) = arr3 ' そこに格納
' -----------
ReDim Preserve arr1(1 To 2) ' 1次元目を拡張し
arr1(2) = arr2 ' そこに格納
' -----------

' ******* arr1(3) *****************************
arr3(1) = 40: arr3(2) = 41 ' 最小単位を編集
ReDim Preserve arr2(1 To 1) ' 2次元目を初期化し
arr2(1) = arr3 ' そこに格納

arr3(1) = 50: arr3(2) = 51 ' 最小単位を編集
ReDim Preserve arr2(1 To 2) ' 2次元目を拡張し
arr2(2) = arr3 ' そこに格納

arr3(1) = 60: arr3(2) = 61 ' 最小単位を編集
ReDim Preserve arr2(1 To 3) ' 2次元目を拡張し
arr2(3) = arr3 ' そこに格納
' -----------
ReDim Preserve arr1(1 To 3) ' 1次元目を拡張し
arr1(3) = arr2 ' そこに格納
' -----------

' 戻り値
foo = arr1

End Function

Private Sub main()

' 表示用変数
Dim strMsg As String
Dim boundary As String
boundary = "------ 開始 ------"

' 作業用中間オブジェクト
Dim arrArr, arr As Variant

' 動的ジャグ配列を受け取る
arrArr = foo()

' ジャグ配列の内容を文字列に書き出す
Dim i, j As Integer
For i = 1 To UBound(arrArr, 1)
strMsg = strMsg + boundary + vbCrLf

arr = arrArr(i)
For j = 1 To UBound(arr, 1)
strMsg = strMsg + CStr(arr(j)(1)) + " - " + CStr(arr(j)(2)) + vbCrLf
Next
boundary = "------ 境界 ------"
Next
strMsg = strMsg + "------ 終了 ------"

' 結果表示
Call MsgBox(strMsg)

End Sub
' ************************************************************


実行結果です。
実行結果20170318




スポンサーサイト

CATEGORY:仕事関係 | CM(0) | TB(0) |
xx HOME xx
トラックバックURL
→http://3335.blog106.fc2.com/tb.php/303-49b8821d

コメントの投稿














xx HOME xx