|
楼主 |
发表于 2019-7-23 19:28
|
显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
本帖最后由 WYS67 于 2019-7-24 07:43 编辑
前三排名.zip
(672.12 KB, 下载次数: 11)
老师:请看截图--同样的代码,上图没有加载宏,由于数据源I615:R615以下没有数据,所以S615以下显示正确的空白;而加载宏后的下图,尽管数据源I615:R615以下没有数据,但S615:S936仍然显示数字,而没有显示空白!
辅助列V列是I:R列每一行的数字和,自V615以下为0,我把W列的公式加了个判断条件,选定W5:W1468,输入区域数组公式 { =IF(SUM(V5:V1468)=0,"",Q3PM($I$5:$R$1468,1)) ,这样无论有没有加载宏,W列都能显示正确的结果【也就是由于I615:R615以下数据和为0,所以W615以下显示空白】!
老师:能不能这样--在代码里增加一个判断条件,当数据区域的任意一行和值为0时,强制使Q3PM对应行的计算结果为空白?如此,则可彻底解决数据源I615:R615以下没有数据,但S615:S936仍然显示数字的问题!
如果此方法可行,您看加在下面代码的哪个地方合适?
Function Q3PM(rgData As Range, Optional arrIndex As Variant = 4) As Variant
Dim arrTitle As Variant, arrData As Variant, rgCur As Range
Dim lngRow As Long, lngCol As Long, lngCols As Long, intLen As Integer
Dim lngVal() As Long, strVal() As String, strALL As String
Dim arrResult As Variant, arrReturn As Variant, lngID As Long
Dim lngIndex As Long, strTemp(1 To 3) As String, strIsNull As String
Application.Volatile True
lngCols = rgData.Columns.Count
If lngCols < 3 Then Exit Function '小于3列退出
ReDim lngVal(1 To lngCols) As Long, strVal(1 To lngCols) As String
arrTitle = rgData.Offset(-1, 0).Resize(1) '标题区域是数据区域的上一行
arrData = rgData
lngID = arrIndex
Set rgCur = Application.Caller
ReDim arrResult(1 To rgCur.Rows.Count, 1 To 4) As String
Set rgCur = Nothing
For lngRow = LBound(arrData) To UBound(arrData)
If arrData(lngRow, 1) = "" Then Exit For
strIsNull = ""
For lngCol = 1 To lngCols
strIsNull = strIsNull & arrData(lngRow, lngCol)
strVal(lngCol) = Format(arrData(lngRow, lngCol), "00") & strVal(lngCol)
lngVal(lngCol) = Val(Trim(Mid(strVal(lngCol), 1, 6)) & Format(lngCol, "00"))
Next
If Val(strIsNull) = 0 Then Exit For
lngIndex = lngIndex + 1: strALL = ""
For lngCol = 1 To 3
strTemp(lngCol) = Right(CStr(Application.WorksheetFunction.Large(lngVal, lngCol)), 2)
strALL = strALL & arrTitle(1, strTemp(lngCol))
arrResult(lngIndex, lngCol) = arrTitle(1, strTemp(lngCol))
Next
arrResult(lngIndex, 4) = strALL
Next
arrReturn = Application.WorksheetFunction.Index(arrResult, 0, lngID)
Q3PM = arrReturn
End Function
|
|