VBA에서 문자열 배열 선언 및 초기화


126

이것은 다른 스택 오버플로 게시물에 따라 작동하지만 그렇지는 않습니다.

Dim arrWsNames As String() = {"Value1", "Value2"}

누구든지 무엇이 잘못되었는지 알려줄 수 있습니까?


33
참고 : 중괄호 구문은 VBA에서 작동하지 않으며 VB.NET 용으로 설계되었습니다. 자신의 정신을 위해이 두 환경을 혼동하지 마십시오.
boomer57

2
Excel을 사용하고 있고 Variant 배열을 사용하는 컨텐츠 인 경우 다음을 사용할 수 있습니다.Dim x() As Variant: x = [{"Value1", "Value2"}]
ThunderFrame

1
거의 2 년 후에이 의견을보고있는 사람이라면 (나처럼). VBA / Excel에서 NOT 구문처럼 않는 것 같다 Dim x() As Variant: x = [{"Value1", "Value2"}] 당신은 즉, 경우에 ... 변수를 사용하는 경우 v1 = "Value1"; v2 = "Value2"다음 x = [{v1, v2}]반면, 오류가 발생합니다 x = [{"Value1", "Value2"}]하지 않습니다.
Chip R.

답변:


169

이 시도:

Dim myarray As Variant
myarray = Array("Cat", "Dog", "Rabbit")

20
기술적 으로 문자열 배열이 아닌 변형 배열을 만듭니다. 물론 변형 배열 문자열 만 배열 수 있지만이 방법은 문자열이 아닌 데이터 유형도 허용합니다.myArray = Array("A", "B", 12345, "D"...)
David Zemens

10
Dim myStringArray () As String의 경우 ... myStringArray = Array ( "Cat", "Dog", "Rabbit"). 변형-ck!
Andez

30
한 줄에 그것을 가지고 싶은 경우에, 당신은 선언 후 콜론을 사용할 수 있습니다 : Dim arrWsNames() As String: arrWsNames = Split("Value1,Value2", ",") 초기화를 코멘트에서 나를 위해 일을하지 않는 이상, 배열 ()가 변형되지 문자열의 배열 만들기 때문에
안드레이 Sramko

6
1과 안 좋은 않음)는 그것의 변형 함유 배열 2) 변종 VBA 가장 느린 데이터 유형
stifin

4
@stifin 및 3) VBA에는 문자열 배열 이니셜 라이저가 없습니다. 그러나 예를 들어 Split을 사용할 수 있습니다.
Eldar Agalarov

141

String 배열의 특정 경우 에는 Variant 배열이 아닌 String 배열을 반환 하므로 Split 함수 를 사용하여 배열을 초기화 할 수 있습니다 .

Dim arrWsNames() As String
arrWsNames = Split("Value1,Value2,Value3", ",")

이렇게하면 변형 데이터 유형을 사용하지 않고 arrWsNames에 원하는 유형을 유지할 수 있습니다.


3
이것은 분명히 다른 기능으로 전달합니다. 당신에게 메모리 절약은 말할 것도없고 ...
Jason R. Mick

23

여기서 문제는 배열의 길이가 정의되어 있지 않으며 배열이 명시 적으로 문자열로 정의되어 있으면 VBA를 혼란스럽게합니다. 그러나 변형은 필요에 따라 크기를 조정할 수있는 것으로 보입니다 (많은 기억을 가지고 있기 때문에 사람들은 일반적으로 여러 가지 이유로 피하지 않습니다).

다음 코드는 정상적으로 작동하지만 다른 언어와 비교하면 약간 수동입니다.

Dim SomeArray(3) As String

SomeArray(0) = "Zero"
SomeArray(1) = "One"
SomeArray(2) = "Two"
SomeArray(3) = "Three"

3
Dim myStringArray() As String
*code*
redim myStringArray(size_of_your_array)

그런 다음 다음과 같은 정적 작업을 수행 할 수 있습니다.

myStringArray = { item_1, item_2, ... }

또는 이와 같은 반복되는 것 :

Dim x
For x = 0 To size_of_your_array
    myStringArray(x) = data_source(x).Name
Next x

3
Public Function _
CreateTextArrayFromSourceTexts(ParamArray SourceTexts() As Variant) As String()

    ReDim TargetTextArray(0 To UBound(SourceTexts)) As String

    For SourceTextsCellNumber = 0 To UBound(SourceTexts)
        TargetTextArray(SourceTextsCellNumber) = SourceTexts(SourceTextsCellNumber)
    Next SourceTextsCellNumber

    CreateTextArrayFromSourceTexts = TargetTextArray
End Function

예:

Dim TT() As String
TT = CreateTextArrayFromSourceTexts("hi", "bye", "hi", "bcd", "bYe")

결과:

TT(0)="hi"
TT(1)="bye"
TT(2)="hi"
TT(3)="bcd"
TT(4)="bYe"

즐겨

편집 : 중복 된 텍스트 삭제 기능을 제거하고 코드를 작고 사용하기 쉽게 만들었습니다.


1
이것은 답이되어야합니다. 초기화하는 방법이 내장되어 있지는 않지만, 이렇게하는 전역 함수는 코드를 읽을 수있게 유지하며 정의가 다음과 variant
같아야

-7

사용

Dim myarray As Variant

작동하지만

Dim myarray As String

그래서 나는 변형에 sitck


8
myarray 끝에 괄호를 추가해야하기 때문입니다. 괄호는 VBA에게 그것이 배열임을 알려줍니다. 문자열로 흐리게하면 문자열 전용 배열이됩니다.
PermaNoob

배열의 경계를 선언해야합니다. 동적 Array : Dim MyArray() as String또는 고정 크기 Array : Dim MyArray(1 to 10) as String입니다.
Patrick Lepelletier
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.