6

我需要一种方法来分别计算一个单元格中的数字和字母。

例如,如果一个单元格包含1234567ABC我需要能够将其输出为

  • “7个数字”和
  • “三个字母”。

我想不出一种方法来使用可行的len()功能,countif只计算单元格本身。

任何帮助,将不胜感激。

4

2 回答 2

7

如果每个单元格仅填充数字和字母,则实现此目的的一种快速非 vba 方法是嵌套一个替换函数 10 次以删除 10 个数字字符。你剩下的只是阿尔法。然后你可以len()从原始长度中减去字母文本/减去该数字以获得数字长度。

假设“1234567ABC”在单元格 A1 中:

这个公式给出了字母的数量。(3)

=LEN(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,0,""),1,""),2,""),3,""),4,""),5,""),6,""),7,""),8,""),9,""))

这个公式给出了总数: (7)

=LEN(A1)-LEN(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,0,""),1,""),2,""),3,""),4,""),5,""),6,""),7,""),8,""),9,""))

如果您想开始以其他方式/更深入地处理数据,则可能需要 VBA 解决方案。

笔记

为了满足您原始帖子中的要求,请将此后缀添加到上述公式的末尾:

=x & " Numbers / Letters" 

其中 x = 上述两个公式。这将在计算的数字之后添加文本。

延伸阅读:

以下链接详细说明了执行类似操作的 VBA UDF: http ://www.mrexcel.com/forum/excel-questions/16364-how-remove-numbers.html

附加更新(感谢 lori_m)

这个公式更容易阅读/更新:

=SUM(LEN(A1)-LEN(SUBSTITUTE(A1,{1,2,3,4,5,6,7,8,9,0},"")))
于 2012-08-29T21:19:39.070 回答
3

从我在“ Analyze format of alpha-numeric string”中的回答:

要获得更详细的答案,此字符串 1234567ABC456 将报告为 7N3L3N

像这样的正则表达式将完成这项工作

  • 同时按进入 VBE
  • 插入模块
  • 复制并粘贴下面的代码
  • 同时按返回 Excel

那么您可以在 Excel 中使用该函数(它也检测无效字符串),即在 B1 中
=AlphaNumeric(A1)

在此处输入图像描述

Function AlphaNumeric(strIn As String) As String
    Dim objRegex As Object
    Dim objRegMC As Object
    Dim objRegM As Object
    Dim strOut As String
    Set objRegex = CreateObject("vbscript.regexp")
    With objRegex
        .Global = True
        .ignorecase = True
        .Pattern = "[^\w]"
        If .test(strIn) Then
            AlphaNumeric = "One or more characters is invalid"
        Else
            .Pattern = "(\d+|[a-z]+)"
            Set objRegMC = .Execute(strIn)
            For Each objRegM In objRegMC
                strOut = strOut & (objRegM.Length & IIf(IsNumeric(objRegM), "N", "L"))
            Next
            AlphaNumeric = strOut
        End If
    End With
End Function
于 2012-08-29T23:54:11.017 回答