본문 바로가기
언어 참조

Let 문

2023. 7. 29.

변수 또는 프로퍼티에 표현식 값을 할당합니다.

Syntax

Let ] varname = expression

Let : Let 키워드의 명시적 사용은 스타일의 문제이지만 일반적으로 생략됩니다.선택 사항입니다.

varname : 변수 또는 속성의 이름입니다. 표준 변수 명명 규칙을 따릅니다.필수입니다.

expression : 변수 또는 속성에 할당된 값입니다.필수입니다.

값 표현식은 변수와 호환되는 데이터 유형인 경우에만 변수 또는 속성에 할당할 수 있습니다. 숫자 변수에 문자열 표현식을 할당할 수 없으며, 문자열 변수에 숫자 표현식을 할당할 수 없습니다. 그렇게 하면 컴파일 시 오류가 발생합니다.

Sub ExampleProcedure()
    Dim numericVariable As Integer
    Dim stringVariable As String

    ' 데이터 유형이 호환되는 경우
    numericVariable = 10
    stringVariable = "Hello"

    ' 데이터 유형이 호환되지 않는 경우 (오류 발생)
    numericVariable = "Hello" ' 오류: String을 Integer에 할당할 수 없음
    stringVariable = 20 ' 오류: Integer를 String에 할당할 수 없음
End Sub

Variant 변수는 문자열 또는 숫자 표현식에 할당할 수 있습니다. 하지만 그 반대가 항상 맞는 것은 아닙니다. 문자열 변수에는 Null을 제외한 모든 변형을 할당할 수 있지만, 숫자 변수에는 값이 숫자로 해석될 수 있는 변수만 할당할 수 있습니다. Variant를 숫자로 변환할 수 있는지 확인하려면 IsNumeric 함수를 사용하세요.

Sub ExampleProcedure()
    Dim stringValue As String

    ' 문자열 변수에 다양한 데이터 유형 할당
    stringValue = "Hello" ' 문자열 할당
    Debug.Print "String Value: " & stringValue ' 출력: "String Value: Hello"

    stringValue = 123 ' 숫자 할당 (자동으로 문자열로 변환)
    Debug.Print "String Value: " & stringValue ' 출력: "String Value: 123"

    stringValue = 3.14 ' 실수(숫자) 할당 (자동으로 문자열로 변환)
    Debug.Print "String Value: " & stringValue ' 출력: "String Value: 3.14"

    stringValue = True ' 불리언 값 할당 (자동으로 문자열로 변환)
    Debug.Print "String Value: " & stringValue ' 출력: "String Value: True"

    stringValue = Date ' 날짜 값 할당 (자동으로 문자열로 변환)
    Debug.Print "String Value: " & stringValue ' 출력: "String Value: 날짜 값"
    
    ' 초기화 없이 빈 문자열로 초기화 가능
    stringValue = ""
    Debug.Print "String Value: " & stringValue ' 출력: "String Value: "

    stringValue = Null ' 에러
    Debug.Print "String Value: " & stringValue

    
End Sub

 

IsNull을 이용하여 에러를 수정한 코드입니다.

Sub ExampleProcedure()
    Dim stringValue As String

    ' 문자열 변수에 다양한 데이터 유형 할당
    stringValue = "Hello" ' 문자열 할당
    Debug.Print "String Value: " & stringValue ' 출력: "String Value: Hello"

    stringValue = 123 ' 숫자 할당 (자동으로 문자열로 변환)
    Debug.Print "String Value: " & stringValue ' 출력: "String Value: 123"

    stringValue = 3.14 ' 실수(숫자) 할당 (자동으로 문자열로 변환)
    Debug.Print "String Value: " & stringValue ' 출력: "String Value: 3.14"

    stringValue = True ' 불리언 값 할당 (자동으로 문자열로 변환)
    Debug.Print "String Value: " & stringValue ' 출력: "String Value: True"

    stringValue = Date ' 날짜 값 할당 (자동으로 문자열로 변환)
    Debug.Print "String Value: " & stringValue ' 출력: "String Value: 날짜 값"

    ' 문자열 변수에 Null 할당 (Null은 문자열로 변환되지 않음)
    Dim variantValue As Variant
    variantValue = Null

    If IsNull(variantValue) Then
        stringValue = "" ' Null을 빈 문자열로 변환하여 문자열 변수에 할당
    Else
        stringValue = CStr(variantValue) ' Variant 변수를 사용하여 Null을 문자열로 변환
    End If

    Debug.Print "String Value: " & stringValue ' 출력: "String Value: "
End Sub

Sub ExampleProcedure()
    Dim numericVariable As Integer
    Dim stringValue As String
    Dim variantValue As Variant

    ' 숫자 변수에 숫자로 해석 가능한 값을 할당
    numericVariable = 10
    Debug.Print "Numeric Value: " & numericVariable ' 출력: "Numeric Value: 10"

    stringValue = "123"
    ' IsNumeric 함수를 사용하여 문자열이 숫자로 해석 가능한지 확인
    If IsNumeric(stringValue) Then
        numericVariable = CInt(stringValue) ' 문자열을 정수로 변환하여 숫자 변수에 할당
        Debug.Print "Numeric Value: " & numericVariable ' 출력: "Numeric Value: 123"
    Else
        Debug.Print "The value cannot be converted to a numeric type."
    End If

    variantValue = "3.14"
    ' IsNumeric 함수를 사용하여 Variant 값이 숫자로 해석 가능한지 확인
    If IsNumeric(variantValue) Then
        numericVariable = CInt(variantValue) ' Variant 값을 정수로 변환하여 숫자 변수에 할당
        Debug.Print "Numeric Value: " & numericVariable ' 출력: "Numeric Value: 3"
    Else
        Debug.Print "The value cannot be converted to a numeric type."
    End If

    variantValue = "ABC"
    ' IsNumeric 함수를 사용하여 Variant 값이 숫자로 해석 가능한지 확인
    If IsNumeric(variantValue) Then
        numericVariable = CInt(variantValue) ' 오류: Variant 값이 숫자로 변환될 수 없음
    Else
        Debug.Print "The value cannot be converted to a numeric type."
    End If
End Sub

한 숫자 유형의 표현식을 다른 숫자 유형의 변수에 할당하면 표현식의 값이 결과 변수의 숫자 유형으로 강제로 적용됩니다.

Sub ExampleProcedure()
    Dim intValue As Integer
    Dim doubleValue As Double

    ' 정수형 변수 intValue에 실수형 값을 할당
    doubleValue = 3.14
    intValue = doubleValue
    Debug.Print "intValue: " & intValue ' 출력: intValue: 3

    ' 실수형 변수 doubleValue에 정수형 값을 할당
    intValue = 5
    doubleValue = intValue
    Debug.Print "doubleValue: " & doubleValue ' 출력: doubleValue: 5

    ' 정수형 변수 intValue에 문자열 값을 할당 (자동으로 변환)
    intValue = "10"
    Debug.Print "intValue: " & intValue ' 출력: intValue: 10

    ' 실수형 변수 doubleValue에 문자열 값을 할당 (자동으로 변환)
    doubleValue = "3.14"
    Debug.Print "doubleValue: " & doubleValue ' 출력: doubleValue: 3.14
End Sub

Let 문은 두 변수가 동일한 사용자 정의 유형인 경우에만 한 레코드 변수를 다른 레코드 변수에 할당하는 데 사용할 수 있습니다.

Type Person
    Name As String
    Age As Integer
End Type

Sub ExampleProcedure()
    Dim person1 As Person
    Dim person2 As Person

    ' 레코드 변수 person1에 값 할당
    person1.Name = "John"
    person1.Age = 30

    ' 레코드 변수 person1의 값으로 레코드 변수 person2를 할당 (Let 문 사용)
    Let person2 = person1

    ' person2는 person1과 동일한 값을 가짐
    Debug.Print "person2 Name: " & person2.Name ' 출력: "person2 Name: John"
    Debug.Print "person2 Age: " & person2.Age ' 출력: "person2 Age: 30"
End Sub

마지막으로 Let이 있는 코드와 없는 코드를 비교하는 것으로 이 글을 마무리합니다.

Sub ExampleWithLet()
    Dim myVar As Integer
    Let myVar = 10
    MsgBox "myVar의 값은 " & myVar & " 입니다."
End Sub
Sub ExampleWithoutLet()
    Dim myVar As Integer
    myVar = 10
    MsgBox "myVar의 값은 " & myVar & " 입니다."
End Sub

 

Type Person
    Name As String
    Age As Integer
    Email As String
End Type

Sub ExampleProcedureWithLet()
    Dim person1 As Person ' user-defined type variable
    Dim person2 As Person ' user-defined type variable

    ' Assign values to fields of person1 using the Let statement (optional)
    Let person1.Name = "John"
    Let person1.Age = 30
    Let person1.Email = "john@example.com"

    ' Use the Let statement to assign person1 to person2
    Let person2 = person1

    ' Now person2 contains the same values as person1
    Debug.Print "person2 Name: " & person2.Name ' Output: "person2 Name: John"
    Debug.Print "person2 Age: " & person2.Age ' Output: "person2 Age: 30"
    Debug.Print "person2 Email: " & person2.Email ' Output: "person2 Email: john@example.com"
End Sub

 

Type Person
    Name As String
    Age As Integer
    Email As String
End Type

Sub ExampleProcedureWithoutLet()
    Dim person1 As Person ' user-defined type variable
    Dim person2 As Person ' user-defined type variable

    ' Assign values to fields of person1 without using the Let statement
    person1.Name = "John"
    person1.Age = 30
    person1.Email = "john@example.com"

    ' Directly assign person1 to person2 (without using the Let statement)
    person2 = person1

    ' Now person2 contains the same values as person1
    Debug.Print "person2 Name: " & person2.Name ' Output: "person2 Name: John"
    Debug.Print "person2 Age: " & person2.Age ' Output: "person2 Age: 30"
    Debug.Print "person2 Email: " & person2.Email ' Output: "person2 Email: john@example.com"
End Sub

도움말 출처

 

 

Let statement (VBA)

Office VBA reference topic

learn.microsoft.com

 

'언어 참조' 카테고리의 다른 글

개체 변수 만들기  (0) 2023.07.29
Set 문  (0) 2023.07.29
대입문 작성  (0) 2023.07.29
변수의 수명 이해  (0) 2023.07.29
범위와 가시성 이해하기  (0) 2023.07.28