向各位大侠请教1个EXCEL的VBA编程问题,先谢谢啦
我想写一个函数,主要是完成查找对应列的值,具体举例如下:
数据源行SourceRow(): "A5:A15 "
目标数据行TargetRow() : "D5:D15 " '两个数据行个数相等,且位置一一对应
需要在 "A5:A15 "查找的值SourceValue 存放在 "B7 "(即要找到与B7中相同的值)
返回值为 "D5:D15 "中位置与 "A5:A15 "对应的值,且对应 "A5:A15 "中的值与 "B7 "相等(第1个或第n个,默认为1,由TargetNum指定)
具体代码如下:
'
' 在源数据行中查找给定数值的列,并返回目标行对应位置列的值
' SourceRow() 存放源数据行的数组
' SourceValue 需要查找的给定数值
' TargetRow() 存放目标数据行的数组
' TargetNum 如有相同数值,则返回指定第几个,默认是1
'
Function GetMirror(SourceRow As Rang, SourceValue As Single, TargetRow As Rang, TargetNum As Integer) As Single
Dim Column As Integer ' 数组位置
Dim ColumnMax As Integer ' 数组长度
Dim CountVal As Integer ' 相同数值计数
ColumnMax = CInt(UBound(SourceRow)) - 1 ' 取得数组长度
CountVal = 1 ' 设置初始相同计数为1
If TargetNum = 0 Then
TargetNum = 1 ' 如果没有输入TargetNum,默认为1
End If
' 在数组SourceRow中查找值等于SourceValue的位置
For Column = 0 To ColumnMax
If SourceRow(Column) = SourceValue Then
If CountVal = TargetNum Then
Exit For
Else
CountVal = CountVal + 1
End If
End If
Next
GetMirror = TargetRow(Colunm) ' 返回列上的数值
End Function
可调试一直通不过,请教问题在哪里?
[解决办法]
数组好像不是那样用的:
Function GetMirror(SourceRow As Range, SourceValue As Single, TargetRow As Range, TargetNum As Integer) As Single
Dim i, j, k As Integer
j = SourceRow.Rows(SourceRow.Rows.Count).Row
k = 0 '记录相同值的个数
For i = SourceRow.Rows(1).Row To j
If Cells(i, SourceRow.Column) = SourceValue Then
k = k + 1
If k = TargetNum Then
GetMirror = Cells(i, TargetRow.Column)
End If
End If
Next
End Function