programing

Excel Range의 1차원 배열

linuxpc 2023. 4. 21. 20:18
반응형

Excel Range의 1차원 배열

현재 어레이 Securities에 다음 코드를 채우고 있습니다.

Option Base 1
Securities = Array(Worksheets(3).Range("A8:A" & SymbolCount).Value)

그러면 모든 주소가 (1...1,1...)인 2차원 배열이 생성됩니다.N. 1차원 배열(1...)을 원합니다.N)

어떻게 하면 (a) 증권을 1차원 배열로 채우거나 (b) 증권을 1차원 배열로 효율적으로 분리할 수 있는가(각 루프에서 a에 갇혀 있다).

이미 답변을 수락한 것은 알지만, 여기 간단한 코드가 있습니다.

(여러 열이 있는) 단일 행을 가져올 경우 다음을 사용합니다.

Securities = application.transpose(application.transpose _
             (Worksheets(3).Range("A8:A" & SymbolCount).Value))

단일 열(복수 행 포함)을 가져올 경우 다음을 사용합니다.

Securities = application.transpose(Worksheets(3).Range("A8:A" & SymbolCount).Value)

따라서 기본적으로 행에 대해 두 번, 열에 대해 한 번만 전치하면 됩니다.

업데이트:

이 솔루션에서는 큰 테이블이 동작하지 않을 수 있습니다(아래 코멘트 참조).

큰 테이블에서 이 솔루션을 사용했는데, 이 트릭에는 제한이 있습니다.Application.Transpose(Range("D6:D65541").Value)오류는 없지만Application.Transpose(Range("D6:D65542").Value)런타임 오류 13 유형 불일치

업데이트 2:

코멘트에 기재되어 있는 다른 문제가 있습니다.

255자를 넘으면 이 기능은 실패합니다.

Excel VBA와 함께 작업한 지 오래되었지만, 이것이 데이터에 대한 일반적인 접근 제한일 수 있습니다.

Sub test2()
    Dim arTmp
    Dim securities()
    Dim counter As Long, i As Long
    arTmp = Range("a1").CurrentRegion
    counter = UBound(arTmp, 1)
    ReDim securities(1 To counter)
    For i = 1 To counter
        securities(i) = arTmp(i, 1)
    Next i
    MsgBox "done"
End Sub

이것은 iDevlop의 답변을 반영합니다만, 그 기능에 대해 몇 가지 추가 정보를 제공하고 싶습니다.

Dim tmpArray As Variant
Dim Securities As Variant

'Dump the range into a 2D array
tmpArray = Sheets(3).Range("A8:A" & symbolcount).Value

'Resize the 1D array
ReDim Securities(1 To UBound(tmpArray, 1))

'Convert 2D to 1D
For i = 1 To UBound(Securities, 1)
    Securities(i) = tmpArray(i, 1)
Next

범위에서 1D 어레이를 얻는 가장 빠른 방법은 범위를 2D 어레이로 덤프하여 1D 어레이로 변환하는 것입니다.이는 두 번째 배리언트를 선언하고ReDim범위를 첫 번째 배리언트에 덤프한 후 적절한 크기로 크기를 변경하기 위해 (Array()를 사용할 필요가 없습니다.상기와 같이 할 수 있습니다.이것은 보다 명확하게 설명하겠습니다).

는 각 요소를 1D 어레이에 배치하여 2D 어레이를 루프하기만 하면 됩니다.

이게 도움이 됐으면 좋겠어요.

1개의 컬럼에서 어레이로 값을 읽어들이면 어레이에 액세스 할 필요가 있다고 생각합니다.array(1, n)구문을 사용합니다.

또는 데이터 내의 모든 셀을 루프하여 배열에 추가할 수 있습니다.

Sub ReadIntoArray()
    Dim myArray(), myData As Range, cl As Range, cnt As Integer, i As Integer
    Set myData = Worksheets(3).Range("A8:A" & SymbolCount) //Not sure how you get SymbolCount

    ReDim myArray(myData.Count)

    cnt = 0
    For Each cl In myData
        myArray(cnt) = cl
        cnt = cnt + 1
    Next cl

    For i = 0 To UBound(myArray) //Print out the values in the array as check...
        Debug.Print myArray(i)
    Next i
End Sub

언급URL : https://stackoverflow.com/questions/7649046/one-dimensional-array-from-excel-range

반응형