programing

Excel의 VBA 기능이 범위를 반환할 수 있습니까?

abcjava 2023. 5. 21. 10:45
반응형

Excel의 VBA 기능이 범위를 반환할 수 있습니까?

다음과 같은 작업을 시도할 때 유형 불일치 오류가 발생하는 것 같습니다.

새 워크북:

A1 B1
5  4

Function Test1() As Integer
    Dim rg As Range
    Set rg = Test2()
    Test1 = rg.Cells(1, 1).Value
End Function
Function Test2() As Range
    Dim rg As Range
    Set rg = Range("A1:B1")
    Test2 = rg
End Function

= Test1()을 추가하면 5가 반환되지만 test2에서 범위가 반환되면 코드가 종료되는 것 같습니다.범위를 반환하는 것이 가능합니까?

범위는 개체입니다.개체를 할당하려면 SET 키워드를 사용해야 하며 Test2 기능에서 하나를 잊은 것 같습니다.

Function Test1() As Integer
    Dim rg As Range
    Set rg = Test2()
    Test1 = rg.Cells(1, 1).Value
End Function

Function Test2() As Range
    Dim rg As Range
    Set rg = Range("A1:B1")
    Set Test2 = rg         '<-- Don't forget the SET here'
End Function

다음을 반환할 수도 있습니다.Variant()값 배열을 나타냅니다.다음은 범위의 값을 새 범위로 되돌리는 함수의 예입니다.

Public Function ReverseValues(ByRef r_values As Range) As Variant()
    Dim i As Integer, j As Integer, N As Integer, M As Integer
    Dim y() As Variant
    N = r_values.Rows.Count
    M = r_values.Columns.Count
    y = r_values.value    'copy values from sheet into an array
    'y now is a Variant(1 to N, 1 to M) 
    Dim t as Variant
    For i = 1 To N / 2
        For j = 1 To M
            t = y(i, j)
            y(i, j) = y(N - i + 1, j)
            y(N - i + 1, j) = t
        Next j
    Next i

    ReverseValues = y
End Function

워크시트에서 이 함수를 배열 공식으로 적용해야 합니다.Ctrl-Shift-Enter) 적절한 수의 셀을 선택합니다.스왑() 기능의 세부 사항은 여기서 중요하지 않습니다.

많은 행의 경우 매우 효율적입니다.실행 중x = Range.Value그리고.Range.Value = x작업 시간x는 배열이며 범위에 여러 행 열이 포함되어 있습니다. 셀에서 직접 하나씩 작업을 수행하는 것보다 배 더 빠릅니다.

테스트 2의 마지막 줄을 다음으로 변경:

Set Test2 = rg

이것도 작동합니다.

Function Test2(Rng As Range) As Range
    Set Test2 = Rng
End Function

언급URL : https://stackoverflow.com/questions/439510/can-a-vba-function-in-excel-return-a-range

반응형