Excel-在列中添加给定的数字';如果他们';与行中的值重新关联

Excel-在列中添加给定的数字';如果他们';与行中的值重新关联,excel,vba,Excel,Vba,可能很复杂,让我给你一些背景知识: 我有一个包含以下数据的电子表格: H列包含1794-2011年的日期(在“H”中有 每个出席会议的立法者的每个日期的多份副本 (日期) 列Q包含从-1到我想要的1的分数 计算中每个日期Q列中的平均“正值” H列,然后将其打印出来 例如: 1794: Average Positive Value : .65, Average Negative: -.20 1795: Average Positive Value: .75, Average Negative:

可能很复杂,让我给你一些背景知识:

我有一个包含以下数据的电子表格:

  • H列包含1794-2011年的日期(在“H”中有 每个出席会议的立法者的每个日期的多份副本 (日期)
  • 列Q包含从-1到我想要的1的分数 计算中每个日期Q列中的平均“正值” H列,然后将其打印出来
  • 例如:

    1794: Average Positive Value : .65, Average Negative:  -.20
    1795: Average Positive Value: .75, Average Negative: -.11
    
    我试着四处搜索,想知道如何做到这一点,但我不知道相关的搜索词。希望能得到一些帮助


    谢谢

    这可能被认为是一种黑客行为,但您可以只使用一些隐藏列,这些列的每个数据点都有一个复制的IF公式。举例说明:

    添加另一列A,其中包含IF(Q>0,Q,0) 添加另一列B,其中包含IF(Q>0,1,0) 添加另一列C,其中包含IF(Q<0,Q,0) 添加另一列D,其中包含IF(Q<0,1,0)


    然后,为了确定平均值,您可以简单地分别进行求和(a)/求和(B)和求和(C)/求和(D),因为它是总值除以真实发生次数

    这里介绍一种使用数组公式的简单方法。请查看快照

    =IFERROR(AVERAGE(IF(($H$1:$H$7=K10)*($Q$1:$Q$7>0),$Q$1:$Q$7)),"")
    
    您必须使用CTL+SHIFT+enter输入


    您应该能够使用SUMIFS/COUNTIFS进行此操作

    对于正值:

    =sumifs(Q:Q,H:H,1794,Q:Q,">0")/countifs(H:H,1794,Q:Q,">0")
    
    =sumifs(Q:Q,H:H,1794,Q:Q,"<0")/countifs(H:H,1794,Q:Q,"<0")
    
    对于负值:

    =sumifs(Q:Q,H:H,1794,Q:Q,">0")/countifs(H:H,1794,Q:Q,">0")
    
    =sumifs(Q:Q,H:H,1794,Q:Q,"<0")/countifs(H:H,1794,Q:Q,"<0")
    

    =sumifs(Q:Q,H:H,1794,Q:Q,”没有数组公式的解决方案是使用
    SUMPRODUCT

    =SUMPRODUCT(--(H1:H7=K10),--(Q1:Q7>0),Q1:Q7)/SUMPRODUCT(--(H1:H7=K10),--(Q1:Q7>0))
    
    我用SUMPRODUCT摘取了下面显示的Siddharth示例


    在SQL Server甚至Ms Access这样的数据库中更容易操作。日期是如何格式化的?我假设1900年之前的日期是文本格式的。1900年之后的日期是文本格式的还是Excel日期格式的?+1另一个好方法:)只是一个建议。您可能需要添加
    IFERROR()
    否则,如果找不到特定的值,它将给您一个
    #DIV/0!
    。例如,在我下面的案例中1795:)是的。IFERROR应该是标准做法。以至于有人应该用IFERROR制作一个宏来包装/展开电子表格中的所有公式。SUMIFS/COUNTIFS等同于使用AVERAGEIFS,因此这将是preferable
    =AVERAGEIFS(Q:Q,H:H,1794,Q:Q,“>0”)
    在不知道版本的情况下,最好避免使用iferror和sumifs/AVERAGEIFS。很好,罗杰,我有这样一个宏;)它还检查版本并使用if(iError)(对于较旧的版本。的确,数组公式确实更适合手头的任务,但可能会很吓人。