San*_*hit 2 excel vba excel-vba excel-formula
我不知道如何仅使用公式在循环中运行字符串.
这是我试图转换为公式的vba代码.我想使用这个公式来进行各种细胞的数据验证.
式:
Function Test(pValue) As Boolean
If Len(pValue) < 2 Or Len(pValue) > 99 Then
AlphaNumeric = False
Exit Function
End If
LPos = 1
LValid_Values = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.0123456789"
While LPos <= Len(pValue)
LChar = Mid(pValue, LPos, 1)
If InStr(LValid_Values, LChar) = 0 Then
Test = False
Exit Function
End If
LPos = LPos + 1
Wend
Test = True
End Function
Run Code Online (Sandbox Code Playgroud)
我写的公式的简单部分:
=IF(AND(LEN(E4)>1,LEN(E4)<100,____Formula_Here____),TRUE,FALSE)
Run Code Online (Sandbox Code Playgroud)
我假设如果我选择E4:E50000
并点击DataValidation
,Custom
从下拉列表中选择,然后输入上面的公式,那么它将自动应用于E4,E5,E6 .. E50000.如果我弄错了,请纠正我.
此外,我希望它在Excel 2003及更高版本上运行.
填写空白
NOT(ISERROR(SUM(SEARCH(MID(E4,ROW($1:$99),1)," ABCDEFGHIJKLMNOPQRSTUVWXYZ.0123456789"))))
Run Code Online (Sandbox Code Playgroud)
这是一个数组公式,因此如果在工作表中使用,则可以使用ctrl-shift-enter输入它.但是,数据验证的自定义公式(至少在2003年)会自动将其视为数组公式,因此只需正常输入即可.
让我们从内到外打破它.ROW($1:$99)
在数组公式内部提供循环机制.它将导致周围的数组公式在每个时进行评估i = 1, 2, ..., 99
,因此MID
将依次取得第i
th个字符E4
.SEARCH
不区分大小写的,所以我们可以忽略a..z
,因为我们有A..Z
.它返回的位置A..Z.0..9
,其中i
个字符被发现,或一个错误否则.SUM
聚合这些位置并传播任何错误.因此,如果找不到任何字符,整个SUM
将是一个错误.
请注意,据我所知,您可以在自定义验证公式中使用UDF,因此我不确定是否遵循您的反对意见.
归档时间: |
|
查看次数: |
1892 次 |
最近记录: |