Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在excel中设置动态计数范围?_Excel_Excel 2010 - Fatal编程技术网

如何在excel中设置动态计数范围?

如何在excel中设置动态计数范围?,excel,excel-2010,Excel,Excel 2010,我要计算动态计数值,如果值为0,则不计算 例如 计数2时间范围A1-G1结果为5 计数3时间范围A1-G1结果为4 计数4时间范围A1-G1结果为9 如何在excel中编码。您可以使用索引功能在一系列值之间移动: =IF(索引(A1:G1,0,A4)=0,索引(A1:G1,0,A4+1),索引(A1:G1,0,A4)) 其中A4是计数但是如果范围的结果为0,它将移动到下一个,这将仅适用于0的单个实例。所以一个接一个的结果是0 更全面的解决方案是使用VBA,这里有一个自定义函数: |A|B|C|D

我要计算动态计数值,如果值为0,则不计算

例如

  • 计数2时间范围A1-G1结果为5

  • 计数3时间范围A1-G1结果为4

  • 计数4时间范围A1-G1结果为9


  • 如何在excel中编码。

    您可以使用
    索引功能在一系列值之间移动:

    =IF(索引(A1:G1,0,A4)=0,索引(A1:G1,0,A4+1),索引(A1:G1,0,A4))

    其中
    A4
    是计数但是如果范围的结果为0,它将移动到下一个,这将仅适用于0的单个实例。所以一个接一个的结果是0

    更全面的解决方案是使用VBA,这里有一个自定义函数:

    |A|B|C|D|E|F|G|
    |3|5|0|4|0|9|6|
    
    如果将此代码粘贴到VBA模块中,则可以这样使用:


    =DynamicResult(A1:G1,7)

    从A2中的1开始,从B2开始填写此公式以对单元格进行编号:-

    Public Function DynamicResult(ByVal Rng As Range, ByVal Count As Integer) As Integer
    
    Dim i As Integer: i = 1
    
    For Each cell In Rng
    
        If (i = Count) Then
            If cell > 0 Then
            DynamicResult = cell
        Else
            Count = Count + 1
        End If
    End If
    
    i = i + 1
    
    Next cell
    
    End Function
    
    并使用此公式查找A4中位置对应的值:-

    =IF(B1,A2+1,A2)
    

    我认为使用一个公式确实很困难,但如果可以接受的话,可以使用辅助行轻松完成。非常感谢。如果我想把count改为sum。在我的Ex.sum 3时间范围A1-G1结果是12。如何编码?我只需使用公式=sum(a$1:a1)在(比如)第3行中添加另一个帮助行,并使用相同的查找,但将$a1:$g1更改为$a3:$g3。或者您也可以使用单个公式=sum(a1:INDEX(a1:g1,MATCH(A4,A2:G2,0)))
    =IFERROR(INDEX($A1:$G1,MATCH(A4,$A2:$G2,0)),"")