如何查找特定单元格中数字范围内的值总数?

时间:2012-02-20 13:22:55

标签: excel excel-formula

例如:

数据栏:23至26,40,22,7,27至28,49,50至51,48,136,169,190至192,17至22及无

*包括个人号码,号码范围和单词。

我在每个单独的单元格中都有如上所示的这些数据,我如何提出一个总结所有值总数的公式?

我需要对数据进行一些更新。

我目前正在使用 Jerry Beaucaire提供的公式

=ROWS(INDIRECT(SUBSTITUTE(SUBSTITUTE(A1," - ",":")," TO ", ":")))

谢谢!

3 个答案:

答案 0 :(得分:2)

根据JMAX's方法

尝试此公式

=SUM(IF(ISERR(FIND("TO",A1:A6)),ISNUMBER(A1:A6)+0,MID(A1:A6,FIND("TO",A1:A6)+2,9)-LEFT(A1:A6,FIND("TO",A1:A6)-1)+1))

通过CTRL+SHIFT+ENTER

确认

根据您的示例假设分隔符为“TO”

修订方法:

FIND区分大小写,SEARCH不区分,因此要允许“TO”或“to”,您可以将FIND的所有实例更改为SEARCH。因此,以下版本将处理其中任何一个,空白单元格,具有“Nil”的单元格,具有诸如23,24,27(计为3)或11& 11的条目的单元格。 99(计为2)或单个数字如33的细胞(计为1)

=SUM(IF(ISERR(SEARCH("TO",A1:A6)),IF((A1:A6="Nil")+(A1:A6=""),0,LEN(A1:A6)-LEN(SUBSTITUTE(SUBSTITUTE(A1:A6,",",""),"&",""))+1),MID(A1:A6,SEARCH("TO",A1:A6)+2,9)-LEFT(A1:A6,SEARCH("TO",A1:A6)-1)+1))

修订号2

假设A1:A22中的数据

=SUM(IF(ISNUMBER(LEFT(A1:A22)+0),IF(ISNUMBER(SEARCH("to",A1:A22)),MID(A1:A22,SEARCH("TO",A1:A22)+2,9)-LEFT(A1:A22,SEARCH("TO",A1:A22)-1)+1,LEN(A1:A22)-LEN(SUBSTITUTE(SUBSTITUTE(A1:A22,",",""),"&",""))+1)))

答案 1 :(得分:0)

如果您只想使用一个单元格来计算整个结果,您可以使用此单元格(基于我的解决方案,因为INDIRECT在那里不起作用):

=SUMPRODUCT(IF(ISERR(FIND("-",A1:A6)),
MID(A1:A6,FIND("TO",A1:A6)+2,LEN(A1:A6))*1-LEFT(A1:A6,FIND("TO",A1:A6)-1)*1+1,
MID(A1:A6,FIND("-",A1:A6)+1,LEN(A1:A6))*1-LEFT(A1:A6,FIND("-",A1:A6)-1)*1+1)
)

答案 2 :(得分:0)

如果你想要一个公式从一系列单元格中收集这些值,我会为此编写一个新的自定义函数。我就是这样做的......

如何安装用户定义的功能:

  1. 打开工作簿
  2. 进入VB编辑器 (按Alt + F11)
  3. 插入新模块 (插入>模块)
  4. 复制并粘贴代码(如下所示)
  5. 退出VBA (按Alt + Q)
  6. 另存为启用宏的工作簿
  7. 该功能已安装并可供使用。

    以下是名为 USERCOUNT()*

    的新功能的UDF代码
    Option Explicit
    
    Function USERCOUNT(RNG As Range) As Long
    Dim cell As Range, Cnt As Long, c As Long, buf As String
    
        For Each cell In RNG
            If IsNumeric(cell) And cell > 0 Then
                Cnt = Cnt + 1
            ElseIf InStr(1, cell, ",") > 0 Or InStr(1, cell, "&") > 0 Then
                Cnt = Cnt + (Len(cell) - Len(Replace(Replace(cell, ",", ""), "&", "")) + 1)
            ElseIf InStr(1, cell, " TO ") > 0 Or InStr(1, cell, " - ") > 0 Then
                buf = Replace(Replace(cell, " TO ", ":"), " - ", ":")
                Cnt = Cnt + Rows(buf).Rows.Count
                buf = ""
            End If
        Next cell
    
        USERCOUNT = Cnt
    
    End Function
    

    它只是在一个单元格中使用,就像引用一系列单元格的正常函数一样:

    USERCOUNT.JPG