excel - 基于现有 VBA 函数将数据验证应用于多个单元格

标签 excel excel-formula vba

我不知道如何仅使用公式在循环中运行字符串。

这是我试图转换为公式的 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

我编写的公式的简单部分:

=IF(AND(LEN(E4)>1,LEN(E4)<100,____Formula_Here____),TRUE,FALSE)

我假设如果我选择 E4:E50000 并单击 DataValidation,请从下拉列表中选择 Custom,然后输入上述公式然后它会自动将其应用于 E4、E5、E6.. E50000。如果我错了,请纠正我。

此外,我希望它能够在 Excel 2003 及更高版本上运行。

最佳答案

填空

NOT(ISERROR(SUM(SEARCH(MID(E4,ROW($1:$99),1)," ABCDEFGHIJKLMNOPQRSTUVWXYZ.0123456789"))))

这是一个数组公式,因此如果在工作表中使用,您可以使用 ctrl-shift-enter 输入它。不过,数据验证的自定义公式(至少在2003年)会自动将其视为数组公式,因此只需正常输入即可。

让我们从内到外分解一下。数组公式内的ROW($1:$99)提供了循环机制。它将导致周围的数组公式在每个 i = 1, 2, ..., 99 处求值,因此 MID 将采用 i依次为E4的第>个字符。 SEARCH 不区分大小写,因此我们可以省略 a..z,因为我们有 A..Z。它返回在 A..Z.0..9 中找到第 i 个字符的位置,否则返回错误。 SUM 聚合这些位置并将传播任何错误。因此,如果未找到任何字符,则整个 SUM 将出错。

请注意,据我所知,您可以在自定义验证公式中使用 UDF,因此我不确定我是否遵循您的反对意见。

关于excel - 基于现有 VBA 函数将数据验证应用于多个单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14641831/

相关文章:

string - VBA 字符串清理

excel - 使用列号计算列中数字的平均值

algorithm - Excel图表平滑算法

sql - 从表中选择 8k+ 行的最佳方法

excel - 使用 OfficeOpenXml 合并 Excel 中的单元格

excel - 插入行时修复公式

excel - 在公式中反转 Excel 中的列表

基于单元格文本的 Microsoft.Office.Interop.Excel.Cells 上的 C# 条件格式

Excel VBA从另一列中减去一列,但不在单元格中

excel vba根据我的表格大小自动计算公式