처음에 전달되는 것보다 많은 인수를 반환하는 Excel 함수를 가져 오려고합니다. Excel VBA를 사용한 지 오래되었지만이 작업이 가능한지 궁금합니다. 여기에 제가 개발해온 코드가 있습니다.Excel VBA - 함수에서 반환되지 않는 값
함수 ("SelectColumn")는 6 개의 값을 반환해야하며 아래 코드에서이 값을 인수로 가져 왔습니다. 도움을 주셔서 감사합니다.
Sub match_names3()
Dim i As Integer
Dim strRow, strCol As Integer
Dim UpBound, LowBound As Range
Dim strUpBoundRow, strUpBoundColumn, strLowBoundRow, strLowBoundColumn As Integer
Dim CompareRange_alum_names As Range
Dim CompareRange_bio_names As Range
Dim alum As Variant, bio As Variant
Dim AlumCount, BioCount As Long
strRow = 2
strCol = 8
strUpBoundRow = 0
strUpBoundColumn = 0
strLowBoundRow = 0
strLowBoundColumn = 0
SelectColumn strRow, strCol, strUpBoundRow, strUpBoundColumn, strLowBoundRow, strLowBoundColumn
Set CompareRange_alum_names = Worksheets("Sheet1").Range(Cells(strUpBoundRow, strUpBoundColumn) & ":" & Cells(strLowBoundRow, strLowBoundColumn))
strRow = 2
strCol = 17
strUpBoundRow = 0
strUpBoundColumn = 0
strLowBoundRow = 0
strLowBoundColumn = 0
SelectColumn strRow, strCol, strUpBoundRow, strUpBoundColumn, strLowBoundRow, strLowBoundColumn
Set CompareRange_alum_names = Worksheets("Sheet1").Range(Cells(strUpBoundRow, strUpBoundColumn) & ":" & Cells(strLowBoundRow, strLowBoundColumn))
AlumCount = 2
For Each alum In CompareRange_alum_names
BioCount = 2
For Each bio In CompareRange_bio_names
If bio.Value = alum.Value Then
Cells(AlumCount, 19).Value = Cells(BioCount, 16)
End If
BioCount = BioCount + 1
Next bio
AlumCount = AlumCount + 1
Next alum
End Sub
Function SelectColumn(ByVal strRow As Integer, ByVal strCol As Integer, ByVal strUpBoundRow As Integer, ByVal strUpBoundColumn As Integer, ByVal strLowBoundRow As Integer, ByVal strLowBoundColumn As Integer)
Dim UpBound As Range
Dim LowBound As Range
Worksheets("Sheet1").Cells(strRow, strCol).Select
If ActiveCell.Row > 1 Then
If IsEmpty(ActiveCell.Offset(-1, 0)) Then
Set UpBound = ActiveCell
Else
Set UpBound = ActiveCell.End(xlUp)
End If
Else
Set UpBound = ActiveCell
End If
strUpBoundRow = UpBound.Row
strUpBoundColumn = UpBound.Column
MsgBox ("strUpBoundRow " & strUpBoundRow)
MsgBox ("strUpBoundColumn " & strUpBoundColumn)
If ActiveCell.Row < Rows.Count Then
If IsEmpty(ActiveCell.Offset(1, 0)) Then
Set LowBound = ActiveCell
Else
Set LowBound = ActiveCell.End(xlDown)
End If
Else
Set LowBound = ActiveCell
End If
strLowBoundRow = LowBound.Row
strLowBoundColumn = LowBound.Column
MsgBox ("strLowBoundRow " & strLowBoundRow)
MsgBox ("strLowBoundColumn " & strLowBoundColumn)
Range(UpBound, LowBound).Select
Set UpBound = Nothing
Set LowBound = Nothing
End Function
ByVal이 아닌 ByRef를 전달하십시오. –