我有一个Excel工作表,其中有一些字符串列。有时所有条目都是相同的,有时则不一样:
我编写了一个函数来将范围作为参数传递:
= Dent_WG(A1:A6)
VBA函数应确定哪种情况是正确的(所有条目=“ Al”,或至少一个条目=“ Ag”),然后分别返回0或12:
Function DentWG(WG_Mat As Range) As Single
Dim dat As Variant, rw As Variant, temp As Single
dat = WG_Mat
temp = 0
For rw = LBound(dat, 1) To UBound(dat, 1)
If dat(rw, 1) = "Ag" Then
temp = 12
End If
Next
If temp = 12 Then
DentWG = 12
Else
DentWG = 0
End If
结束功能
但是,即使在范围内出现“ Ag”的第二种情况下,该函数也始终返回0。我确定我无法正确地将范围转换为数组或无法将预期的逻辑应用于该数组。我的代码有什么问题?
从你的问题...
VBA函数应确定哪种情况是正确的(所有条目=“ Al”,或至少一个条目=“ Ag”),然后分别返回0或12:
这就是你所需要的。
Function DentWG(WG_Mat As Range) As Long
Dim ClCount As Long
ClCount = WG_Mat.Cells.Count
If Application.WorksheetFunction.CountIf(WG_Mat, "Al") = ClCount Then
DentWG = 0
ElseIf Application.WorksheetFunction.CountIf(WG_Mat, "Ag") > 0 Then
DentWG = 12
End If
End Function
使用公式可以达到相同目的
=IF(COUNTIF(A1:A6,"Al")=(ROWS(A1:A6)*COLUMNS(A1:A6)),0,IF(COUNTIF(A1:A6,"Ag") > 0,12,""))
万一总是1栏的话就不需要了*COLUMNS(A1:A6)
。这样就可以了。
=IF(COUNTIF(A1:A6,"Al")=ROWS(A1:A6),0,IF(COUNTIF(A1:A6,"Ag") > 0,12,""))
屏幕截图
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句