arrays - 함수 - 엑셀 vba 셀 범위 배열




VBA의 범위에서 배열 만들기 (3)

변수를 변형으로 정의하고 동일하게 만드십시오.

Dim DirArray As Variant
DirArray = Range("a1:a5").Value

Array 명령이 필요 없습니다.

겉보기에는 기본적인 문제가 있지만 문제를 해결하는 리소스를 찾을 수 없습니다.

간단히 말해서, 셀 범위 (모든 열)의 내용을 배열에로드하고 싶습니다.

나는 이것을 통해 이것을 달성 할 수있다

DirArray = Array(Range("A1"), Range("A2"))

그러나 어떤 이유로 든 다음과 같이 표현하면 배열을 만들 수 없습니다.

DirArray = Array(Range("A1:A2"))

내 실제 범위는 훨씬 길고 길이가 다를 수 있으므로이 방법으로 셀을 개별적으로 열거하고 싶지 않습니다. 누구든지 전체 범위를 배열에 올바르게로드하는 방법을 말해 줄 수 있습니까?

후자의 코드로 :

MsgBox UBound(DirArray, 1)

MsgBox UBound(DirArray)

전자는 1을 반환하지만 0은 0을 반환합니다.


우리가 이렇게하면 :

Dim myArr as Variant
myArr = Range("A1:A10")

새로운 배열은 2 차원입니다. 어떤 식 으로든 작업하기가 항상 편하지는 않습니다.

2 차원을 피하기 위해 단일 열을 배열로 가져올 때 내장 Excel 함수 "조옮김"을 사용할 수 있습니다. 이를 통해 데이터는 한 차원이됩니다.

행에 데이터가 있으면 단일 전치로 작업을 수행하지 않습니다. Transpose 함수를 두 번 사용해야합니다.


Value2 사용하면 성능이 향상됩니다. Charles Williams 블로그에 따라

Range.Value2는 Range.Value와 동일한 방식으로 작동하지만 셀 형식을 확인하지 않고 Date 또는 Currency로 변환됩니다. 그리고 아마도 숫자를 검색 할 때 .Value보다 빠릅니다.

그래서

DirArray = [a1:a5].Value2

보너스 독서

  • Range.Value : 지정된 범위의 값을 나타내는 Variant 값을 반환하거나 설정합니다.
  • Range.Value2 : 이 속성과 Value 속성의 유일한 차이점은 Value2 속성이 Currency 및 Date 데이터 형식을 사용하지 않는다는 것입니다.




range