Excel - 在单个单元格中分别计算字母和数字

时间:2012-08-29 21:05:42

标签: excel excel-vba excel-formula vba

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

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

  • “7 Numbers”和
  • “3 Letters”。

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

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:6)

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

假设“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},"")))

答案 1 :(得分:2)

来自Analyse format of alpha-numeric string的答案:

有关此字符串的更详细答案 1234567ABC456 将被报告为 7N3L3N

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

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

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

enter image description here

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