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
'programing' 카테고리의 다른 글
WPF 사용자 컨트롤에서의 데이터 바인딩 (0) | 2023.04.21 |
---|---|
maxRequestLength와 maxAllowedContentLength 중 어느 쪽이 우선도가 됩니까? (0) | 2023.04.21 |
속성 문자열을 사용하여 텍스트를 굵게 표시 (0) | 2023.04.21 |
Query Explorer를 통해 조건에 따라 CosmosDB에서 문서 삭제 (0) | 2023.04.21 |
Azure Table 스토리지에 유지되는 속성을 제외하려면 어떻게 해야 합니까? (0) | 2023.04.21 |