Я пытаюсь заставить функцию Excel возвращать больше аргументов, чем было передано ей изначально. Прошло много времени с тех пор, как я использовал 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