programing

배열을 상수로 선언할 수 있습니까?

bestprogram 2023. 5. 27. 12:01

배열을 상수로 선언할 수 있습니까?

다음 중 하나를 수행할 수 있습니까?

  1. 배열을 상수로 선언

    OR

  2. 해결 방법을 사용하여 요소 추가, 삭제 또는 변경으로부터 보호되며, 따라서 매크로가 실행되는 동안 기능적으로 일정한 어레이를 선언하시겠습니까?

물론 이렇게 할 수 있습니다.

Const myConstant1 As Integer = 2
Const myConstant2 As Integer = 13
Const myConstant3 As Integer = 17
Const myConstant4 ...and so on

...하지만 어레이로 작업하는 우아함을 잃습니다.또한 상수를 배열에 로드하고 사용할 때마다 다시 로드할 수 있지만, 사용하기 전에 해당 상수 값으로 배열을 다시 로드하지 않으면 코드가 변경된 "상수" 값에 노출될 수 있습니다.

실행 가능한 모든 답변을 환영하지만 이상적인 답변은 한 번 설정할 수 있으며 다른 코드를 수정할 때 변경/유지보수가 필요하지 않은 답변입니다.

함수를 사용하여 배열을 반환하고 해당 함수를 배열로 사용할 수 있습니다.

Function ContantArray()
    ContantArray = Array(2, 13, 17)
End Function

여기에 이미지 설명 입력

여기에 이미지 설명 입력

그것을 함수로 만드는 것은 어떻습니까?예:

Public Function myConstant(ByVal idx As Integer) As Integer
    myConstant = Array(2, 13, 17, 23)(idx - 1)
End Function

Sub Test()
    Debug.Print myConstant(1)
    Debug.Print myConstant(2)
    Debug.Print myConstant(3)
    Debug.Print myConstant(4)
End Sub

누구도 변경하거나 크기를 조정하거나 내용을 편집할 수 없습니다.또한 한 줄에 상수를 정의할 수 있습니다!

나는 선언했습니다.String의 상수."1,2,3,4,5"그리고 사용되었습니다.Split다음과 같이 새 배열을 만듭니다.

Public Const myArray = "1,2,3,4,5"

Public Sub createArray()

        Dim i As Integer
        A = Split(myArray, ",")

        For i = LBound(A) To UBound(A)
                Debug.Print A(i)
        Next i

End Sub

사용하려고 했을 때ReDim또는ReDim PreserveA그것은 나를 허락하지 않았습니다.이 방법의 단점은 크기를 변경할 수 없더라도 배열 값을 편집할 수 있다는 것입니다.

특정 VBA 환경이 Excel-VBA인 경우에는 각괄호로 단축할 수 있는 Excel 응용 프로그램의 Evaluate 메서드에서 적절한 구문을 사용할 수 있습니다.

이것 좀 봐요.

Sub XlSerialization1()
    Dim v
    v = [{1,2;"foo",4.5}]

    Debug.Assert v(1, 1) = 1
    Debug.Assert v(1, 2) = 2
    Debug.Assert v(2, 1) = "foo"
    Debug.Assert v(2, 2) = 4.5

    '* write all cells in one line
    Sheet1.Cells(1, 1).Resize(2, 2).Value2 = v
End Sub

사용할 때마다 새 인스턴스가 필요하지 않은 경우Static다중 개체 생성 및 초기화를 방지하는 로컬 변수:

Private Function MyConstants()
    Static constants As Variant

    If IsEmpty(constants) Then
        constants = Array(2, 13, 17)
    End If

    MyConstants = constants
End Function

배열을 상수로 선언할 수 있습니까?아니요.

해결 방법 - 가장 간단한 방법은 구분 기호를 사용하여 상수를 정의한 다음 사용하는 것입니다.Split배열을 생성하는 함수입니다.

Const myConstant = "2,13,17"

Sub Test()
    i = Split(myConstant, ",")

    For j = LBound(i) To UBound(i)
        Debug.Print i(j)
    Next
End Sub

너무 단순한 건가요?

PUBLIC CONST MyArray = "1,2,3,4"

모듈의 뒷부분에 표시됩니다.

Dim Arr as Variant

SET Arr = split(MyArray,",")

이것이 오래된 질문이라는 것을 알지만, 이 아카이브들은 게시된 후 수년간 스캔되는 경우가 많기 때문에 출처 날짜가 한참 지난 후에 추가하는 것은 문제가 없다고 봅니다.

읽기 전용 속성이 'array' 값을 반환하는 클래스를 만드는 것은 어떻습니까?배열 인덱스와 동일한 구문을 사용하여 매개 변수를 지정할 수 있으며 GET 속성만 정의하면 사실상 읽기 전용이 됩니다.클래스 내부의 상수 값을 정의하면 실제 구성이 다르더라도 상수 배열처럼 작동합니다.

아니오 - 어레이를 상수로 선언할 수는 없지만 해결 방법을 사용할 수 있습니다.

원하는 배열을 반환하는 함수를 만들 수 있습니다.

http://www.vbaexpress.com/forum/showthread.php?1233-Solved-Declare-a-Constant-Array

위의 정보를 이용하여 독일어를 사용하는 Excel과 무관하게 한 달의 짧은 텍스트 정보를 비교하기 위한 작업 솔루션을 다음과 같이 결정했습니다.

콘스탄 모나테 = ",얀, 2월, 메르츠, 4월, 마이, 준, 줄, 8월, 9월, 옥트, 11월, 데즈"

코드의 뒷부분에 있습니다.

    If StringToCompare = Split(MONATE, ",")(Month(dt)) Then

참고: 분할 배열은 색인 0으로 시작하므로 처음에 쉼표를 추가했습니다.

이것이 언제 바뀌었는지는 모르지만, 엑셀 365에서는 이것이 작동합니다(또는 적어도 컴파일러 오류는 발생하지 않습니다).

Const table1Defs As Variant = Array("value 1", 42, Range("A1:D20"))

언급URL : https://stackoverflow.com/questions/41046174/can-an-array-be-declared-as-a-constant