|
自定义了一个函数,范围条件下的top10的值,当时在function过程中不能返回正确的值,在sub过程中能返回值,请教各位老师,该怎么修改代码
Dim top10
Sub TOP数据处理(工作表名 As String, 产品线名 As String, 汇总方式 As String, 汇总依据列号 As String, 汇总数据列号 As String, 筛选条件列号 As String, 排名 As Integer, 返回值 As Integer)
Application.DisplayAlerts = False
Dim result_top10
Dim n As Integer
Dim d As Object
nian = Sheets("参数").Range("d2")
yue = Sheets("参数").Range("f2")
Set d = CreateObject("scripting.dictionary")
For i = 1 To ThisWorkbook.Sheets(工作表名).Range("a1").End(xlToRight).Column
If Sheets(工作表名).Cells(1, i).Value = "年度" Then
n = i
Exit For
End If
Next i
For i = 2 To Sheets(工作表名).Cells(n, 1).End(xlDown).Row
If 产品线名称 = "合计" Then
If 汇总方式 = "累计" Then
If Sheets(工作表名).Cells(i, n) = nian And Sheets(工作表名).Cells(i, n + 1) <= yue Then
d(Sheets(工作表名).Range(汇总依据列号 & i).Value) = d(Sheets(工作表名).Range(汇总依据列号 & i).Value) + Sheets(工作表名).Range(汇总数据列号 & i).Value
End If
ElseIf 汇总方式 = "当月" Then
If Sheets(工作表名).Cells(i, n) = nian And Sheets(工作表名).Cells(i, n + 1) = yue Then
d(Sheets(工作表名).Range(汇总依据列号 & i).Value) = d(Sheets(工作表名).Range(汇总依据列号 & i).Value) + Sheets(工作表名).Range(汇总数据列号 & i).Value
End If
Else
MsgBox "汇总方式错误,请在累计和当月中选择一个"
Exit Sub
End If
Else
If 汇总方式 = "累计" Then
If Sheets(工作表名).Cells(i, n) = nian And Sheets(工作表名).Cells(i, n + 1) <= yue And Sheets(工作表名).Range(筛选条件列号 & i) = 产品线名 Then
d(Sheets(工作表名).Range(汇总依据列号 & i).Value) = d(Sheets(工作表名).Range(汇总依据列号 & i).Value) + Sheets(工作表名).Range(汇总数据列号 & i).Value
End If
ElseIf 汇总方式 = "当月" Then
If Sheets(工作表名).Cells(i, n) = nian And Sheets(工作表名).Cells(i, n + 1) = yue And Sheets(工作表名).Range(筛选条件列号 & i) = 产品线名 Then
d(Sheets(工作表名).Range(汇总依据列号 & i).Value) = d(Sheets(工作表名).Range(汇总依据列号 & i).Value) + Sheets(工作表名).Range(汇总数据列号 & i).Value
End If
Else
MsgBox "汇总方式错误,请在累计和当月中选择一个"
Exit Sub
End If
End If
Next i
Set tempsheet = ThisWorkbook.Sheets.Add
tempsheet.Range("a1") = "名称"
tempsheet.Range("b1") = "金额"
tempsheet.Range("a2").Resize(d.Count, 1) = Application.Transpose(d.keys)
tempsheet.Range("b2").Resize(d.Count, 1) = Application.Transpose(d.Items)
With tempsheet.Sort
.SortFields.Clear
.SortFields.Add Key:=tempsheet.Range("b1"), Order:=xlDescending '
.SetRange tempsheet.Range("A1:b" & d.Count + 1) ' 修改为你的数据范围
.Header = xlYes ' 如果数据包含标题行,设置为xlYes;否则设置为xlNo
.Apply
End With
For i = 12 To d.Count
If (tempsheet.Range("b" & i) <> 0 Or tempsheet.Range("b" & i) <> "") And tempsheet.Range("b" & i) = tempsheet.Range("b11") Then
n = i
Exit For
End If
Next i
result_top10 = tempsheet.Range("a2:b" & n)
tempsheet.Delete
'MsgBox result_top10(1, 1)
'MsgBox result_top10(1, 2)
If 排名 > UBound(result_top10, 1) Then
top10 = ""
Else
If 返回值 = 1 Then
top10 = result_top10(排名, 2)
ElseIf 返回值 = 0 Then
top10 = result_top10(排名, 1)
End If
End If
'MsgBox top10
Application.DisplayAlerts = True
End Sub
Function tp10(工作表名, 产品线名, 汇总方式, 汇总依据列号, 汇总数据列号, 筛选条件列号, 排名, 返回值)
Call TOP数据处理(工作表名, 产品线名, 汇总方式, 汇总依据列号, 汇总数据列号, 筛选条件列号, 排名, 返回值)
tp10 = top10
End Function
|
|