source

Excel을 위해 vba에서 다차원 배열 변수를 초기화하는 방법

manycodes 2023. 9. 13. 22:50
반응형

Excel을 위해 vba에서 다차원 배열 변수를 초기화하는 방법

Microsoft 사이트에서는 다음 코드가 작동해야 한다고 제안합니다.

Dim numbers = {{1, 2}, {3, 4}, {5, 6}}

그런데 엑셀 VBA 모듈에서 사용하려고 하면 컴파일 오류가 발생합니다.1D 배열의 경우 다음이 작동합니다.

A = Array(1, 2, 3, 4, 5)

그러나 2D 어레이에 대해서는 동일한 방법을 찾을 수 없었습니다.무슨 생각 있어요?

다음을 활용하여 축약 형식을 사용할 수도 있습니다.Evaluate함수 및 정적 배열.아래 코드에서,varData설정된 위치[]의 약자입니다.Evaluate기능과.{...}식은 정적 배열을 나타냅니다.각 행은 다음 행으로 구분됩니다.;및 각 필드는 a로 구분됩니다.,. 시모코의 코드와 동일한 최종 결과를 얻을 수 있지만 원래 질문에 더 가까운 구문을 사용할 수 있습니다.

Sub ArrayShorthand()

    Dim varData As Variant
    Dim intCounter1 As Integer
    Dim intCounter2 As Integer

    ' set the array
    varData = [{1, 2, 3; 4, 5, 6; 7, 8, 9}]

    ' test
    For intCounter1 = 1 To UBound(varData, 1)
        For intCounter2 = 1 To UBound(varData, 2)
            Debug.Print varData(intCounter1, intCounter2)
        Next intCounter2
    Next intCounter1

End Sub

마이크로소프트 사이트에서는...

이 제안은 VB를 위한 것입니다.NET이지만 VBA는 아닙니다.

VBA의 경우 방향을 잘 잡으셨습니다.다음을 수행할 수 있습니다.

Dim A as Variant
A = Array(Array(1, 2), Array(3, 4), Array(5, 6))

대체 경유지Application.Index()

드미트리브 파블리브의 들쭉날쭉한 배열을 사용하여 (그리고 Robin Mackenzie의 짧은 손 접근법의 대안으로) 한 단계 더 발전하여 적용할 수 있습니다.Application.Index()이 배열 배열에서 (각각 동일한 원소 개수를 가진) - 이중 영점 인수에 유의하십시오!:

Sub Get2DimArray()
    Dim arr() As Variant
    'a) build array of arrays (aka as jagged array)
    arr = Array(Array(1, 2, 4), Array(4, 5, 6), Array(7, 8, 9))
    'b) make it 2-dimensional
    arr = Application.Index(arr, 0, 0)
End Sub

결과적으로 2차원(1 To 3, 1 To 3)이 됩니다. 여기서

   * Row 1 ~> 1|2|4
   * Row 2 ~> 4|5|6
   * Row 3 ~> 7|8|9

관련 링크

기능의 일부 특이점에 대한 추가 판독

따라서 여기서는 아무 것도 없이 배열을 생성합니다. 그 크기만 알려주면 됩니다.0은 배열에서 위치로 계산되므로 차원은 X+1입니다.

Dim MyArray(X, X) As Integer

예를 들어 그렇게 함으로써 그것을 채웁니다.

MyArray (0,0) = 1
MyArray (0,1) = 2
MyArray (1,0) = 3
MyArray (1,1) = 4

...

뭐 이런 거.

더 편리한 채우기 방법을 원하는 경우 채우고 있는 숫자에 고유한 논리가 있는 경우 For Cycles(주기에 대해)를 사용할 수 있습니다.

런 타임까지 사이즈를 알 수 없는 경우.

Dim nRows As Integer, nCols As Integer
...
Dim yourArray() As Integer
ReDim yourArray(1 to nRows, 1 to nCols) 'One base initialisation
'ReDim yourArray(0 to nRows - 1, 0 to nCols - 1) 'Zero base initialisation

그러면 다음과 같이 그리드를 초기화(또는 액세스)할 수 있습니다.

yourArray(1, 1) = ... 'set first cell

언급URL : https://stackoverflow.com/questions/24584088/how-to-initialize-a-multidimensional-array-variable-in-vba-for-excel

반응형