반응형
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
반응형
'programing' 카테고리의 다른 글
HttpWebRequest 및 HttpWebResponse에서 HttpStatus 코드 번호(200, 301, 404 등) 가져오기 (0) | 2023.05.21 |
---|---|
SVN을 사용해야 합니까 아니면 Git을 사용해야 합니까? (0) | 2023.05.21 |
일별 그룹 내 MongoDB 집계 (0) | 2023.05.21 |
Cocoapod를 사용한 Xcode 장치 테스트 (0) | 2023.05.21 |
VB - C# 함수 (0) | 2023.05.21 |