Excel中使用空白的值之间的平均差异和方向


0

我有一张看起来像这样的表:

表1

    1   2   3   4   5   6   7   8   9   10  11
1                                           6
2                                       3   5
3                                           
4                               2   4   9   4
5                                           
6                                   4   6   6
7       5   3   3       3   10  8   4       8
8                                           
9                           4   11  12  12  6
10                                          
11  8   5   5       4   9   4   7   6       

我希望能够找到每一行中每列的值之间的平均差异和方向。例如,前4行看起来像:

     Average Difference # + Movements   # -Movements
1           
2           2                    1              0
3           
4       (2+5+5)/3                2              1

由于信息不足,空白表示N / A值,并且连续计算差异,即 col2-col1, col3-col2, col4-col3

如果我只是采取差异,并=C2-B2在两个值之间或行的开头有空格时,使用复制的公式复制表。有没有一种简单的方法可以解决这个或另一种方式来做到这一点,我可能会失踪?


你要做的事情并不是很清楚。这个表的结果是什么样的?您是否从第2行减去第3行,然后从第3行减去第4行。我们需要更多详细信息才能帮助您。
gtwebb 2014年

@gtwebb感谢gtwebb,我已经更新了帖子,其中包含了一些有助于澄清情况的细节。
2014年

Answers:


1

如果需要VBA解决方案,请将其复制到模块中。

Function Score(R As Range, Col As String)
    Dim ThisCell As Range
    Dim Dif As Integer
    Dim Cnt As Integer
    Dim PosMove As Integer
    Dim NegMove As Integer
    Dim PrevNum As Integer
    Dim ThisNum As Integer
    PrevNum = 9999
    For Each ThisCell In R.Cells
        If IsNumeric(ThisCell.Text) Then
            ThisNum = ThisCell.Value
            If PrevNum <> 9999 Then
                Cnt = Cnt + 1
                If ThisNum > PrevNum Then
                    Dif = Dif + (ThisNum - PrevNum)
                    PosMove = PosMove + 1
                ElseIf ThisNum < PrevNum Then
                    Dif = Dif + (PrevNum - ThisNum)
                    NegMove = NegMove + 1
                End If
            End If
            PrevNum = ThisNum
        End If
    Next
    Select Case LCase(Col)
        Case "avg"
            If Dif = 0 Or Cnt = 0 Then
                Score = 0
            Else
                Score = Dif / Cnt
            End If
        Case "pos"
            Score = PosMove
        Case "neg"
            Score = NegMove
    End Select
End Function

那你就像这样打电话:

=score(A1:K1,"avg")
=score(A1:K1,"pos")
=score(A1:K1,"neg")

1

我会使用if语句来检查单元格是否已填满

=IF(COUNT(B2:B3)=2,B3-B2,"")

如果然后平均该行,空白单元格将被忽略,您应该获得所需的值。

对于下表。平均变化是

=SUMPRODUCT(--(A2:C2<>""),--(A3:C3<>""),(A3:C3-A2:C2))/SUMPRODUCT(--(A2:C2<>""),--(A3:C3<>""))

增加的细胞数量可以是

=SUMPRODUCT(--(A2:C2<A3:C3))

细胞数量减少

=SUMPRODUCT(--(A2:C2>A3:C3))

这假定表只有3列宽,为您的数据扩展。

Sumproduct主要用于进行数组计算。您也可以使用ctrl + shift + enter来使用其他公式,但这些公式应该可以。


对不起,我提到当我应该查看列时,我对行感兴趣。只需将B2:B3更改为B2:C2和A2:C2到A2:A4应该有效,是吗?
2014年

是的,这是正确的
gtwebb 2014年

我需要调整的唯一事情是,如果有空白区之后的空白空间,然后另一数量的差异也将需要被计算的,但是由于计数= / = 2,式中,省略
114

0

我会使用Power Query Add-In。我已经构建了一个你可以查看或下载的原型 - 它的“Power Query演示 - 我在One Drive中的平均移动和行差异.xlsx”:

https://onedrive.live.com/redir?resid=4FA287BBC10EC562%21398

Power Query有一个UnPivot命令可以将行转换为列(忽略空单元格),您可以添加一个Index列来跟踪单元格的相对位置。在我的第一个查询中,我使用这些命令将您的表转换为一个长行列表(每个单元格一个)。

然后在第二个查询中,我将该列表与其自身合并,以将每个单元格值与左侧的下一个非空白单元格相关联。然后计算例如差异,+运动变得相当容易。最后一步是按行号分组并汇总计算

最后,我再次从输入数据和合并第二个查询开始,以获得完整的行列表(包括那些没有差异的行)。

然后,Power Query方法的好处是您不需要在VBA中编码,其中99%是通过在Power Query UI中单击,或通过简单编辑生成的代码来完成的。您也不需要复杂的嵌套公式 - 您可以重新整形数据,直到计算变得容易。

Power Query Unpivot命令是一个奇迹 - 如果它们被添加到源表,它将自动扩展以迎合新列,并删除空值。


我很想这样做,但升级到Excel 2013年后,它不再包含在我的版本的Excel
114

Power Query是一个加载项,您需要下载并安装,例如:microsoft.com/en-au/download/details.aspx?
Mike Honey

我已经构建了一个原型,并在上面的答案中添加了链接和更新的描述。
Mike Honey

是的,但该加载项只能用于某些版本的Excel 2013.同样的事情发生在PowerPivot上。
114
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.