以下のいずれかが可能ですか?
配列を定数として宣言する
OR
回避策を使用して、要素の追加、削除、または変更から保護されている配列を宣言します。したがって、マクロの存続期間中は機能的に一定ですか。
もちろん、私はこれを行うことができます:
Const myConstant1 As Integer = 2
Const myConstant2 As Integer = 13
Const myConstant3 As Integer = 17
Const myConstant4 ...and so on
...しかし、配列を扱う優雅さを失います。定数を配列にロードし、使用するたびにリロードすることもできますが、使用前にこれらの定数値で配列をリロードしないと、コードが変更された「定数」値にさらされる可能性があります。
実行可能な答えは大歓迎ですが、理想的な答えは、一度セットアップすれば、他のコードが変更されたときに変更やメンテナンスを必要としないものです。
機能化してみませんか?といった:
Public Function myConstant(ByVal idx As Integer) As Integer
myConstant = Array(2, 13, 17, 23)(idx - 1)
End Function
Sub Test()
Debug.Print myConstant(1)
Debug.Print myConstant(2)
Debug.Print myConstant(3)
Debug.Print myConstant(4)
End Sub
誰も変更したり、サイズを変更したり、コンテンツを編集したりすることはできません...さらに、1行だけで定数を定義できます!
"1,2,3,4,5"
のString
定数を宣言し、Split
を使用して新しい配列を作成しました。
Public Const myArray = "1,2,3,4,5"
Public Sub createArray()
Dim i As Integer
A = Split(myArray, ",")
For i = LBound(A) To UBound(A)
Debug.Print A(i)
Next i
End Sub
ReDim
でA
またはReDim Preserve
を使用しようとしたとき、それは許可されませんでした。このメソッドの欠点は、サイズを変更できない場合でも、配列の値を編集できることです。
特定のVBA環境がExcel-VBAの場合、ExcelアプリケーションのEvaluateメソッドから角括弧に短縮できるNice構文を利用できます。
これ見て
Sub XlSerialization1()
Dim v
v = [{1,2;"foo",4.5}]
Debug.Assert v(1, 1) = 1
Debug.Assert v(1, 2) = 2
Debug.Assert v(2, 1) = "foo"
Debug.Assert v(2, 2) = 4.5
'* write all cells in one line
Sheet1.Cells(1, 1).Resize(2, 2).Value2 = v
End Sub
いいえ-配列を定数として宣言することはできませんが、回避策を使用できます。
必要な配列を返す関数を作成できます
http://www.vbaexpress.com/forum/showthread.php?1233-Solved-Declare-a-Constant-Array
これがいつ変更されたかはわかりませんが、Excel 365では、これは機能します(または、少なくともコンパイラエラーを生成しません):Const table1Defs As Variant = Array( "value 1"、42、Range( "A1:D20" ))
配列を定数として宣言できますか?いや.
回避策-私が考えることができる最も簡単な方法は、定数をdelimで定義し、Split
関数を使用して配列を作成することです。
Const myConstant = "2,13,17"
Sub Test()
i = Split(myConstant, ",")
For j = LBound(i) To UBound(i)
Debug.Print i(j)
Next
End Sub
これは単純すぎますか?
PUBLIC CONST MyArray = "1,2,3,4"
その後、モジュールで:
Dim Arr as Variant
SET Arr = split(MyArray,",")
毎回新しいインスタンスが必要ない場合は、Static
ローカル変数を使用して、複数のオブジェクトの作成と初期化を回避できます。
Private Function MyConstants()
Static constants As Variant
If IsEmpty(constants) Then
constants = Array(2, 13, 17)
End If
MyConstants = constants
End Function