【问题标题】:Excel - Counting letters and numbers separately in a single cellExcel - 在单个单元格中分别计算字母和数字
【发布时间】:2014-02-21 16:41:15
【问题描述】:

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

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

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

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

任何帮助将不胜感激。

【问题讨论】:

  • 嘿,Excel。您是否尝试过使用宏?
  • 那还需要我知道代码来计算单个数字和字母吗?

标签: excel excel-formula vba


【解决方案1】:

如果每个单元格仅填充数字和字母,实现此目的的一种快速非 vba 方法是嵌套替代函数 10 次以删除 10 个数字字符。你剩下的只是阿尔法。然后您可以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},"")))

【讨论】:

  • 它适用于 Excel 2007 及以后版本,但会超出先前版本中的八个嵌套函数限制。总数的替代方案是:=SUM(LEN(A1)-LEN(SUBSTITUTE(A1,{1,2,3,4,5,6,7,8,9,0},"")))
  • 啊!!!我用替代品尝试了 {},但它没有用,我忘了总结它! (我今天工作太忙了)我会添加这个作为更新。谢谢萝莉。
【解决方案2】:

来自我在Analyse 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    • 2014-11-24
    • 2023-01-21
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多