我想对条件1为日期范围(从日期到日期)的数组(以下:表:列表)中的值(N / D)的数量进行计数,条件2为Shift A,b acros(如图所示)在下面的表输出中)。我想在D / N列中填入一个日期范围内发生D / N次数并转换A,B,C,D?
输出
From Date Through Date Shift D/N
25-May-19 26-May-19 A ?
25-May-19 26-May-19 B ?
表列表
Dates A B C D
25-May-19 N D - -
26-May-19 N D - -
27-May-19 - D N -
INDEX(A:E,MATCH(H7:I7,A:E,0),MATCH(J7,A:E,0))
答案 0 :(得分:0)
您可能遇到的部分问题是日期。确保您的日期是excel日期,而不是看起来像日期的字符串/文本。仅仅更改单元格的格式并不能使其成为日期,它只是告诉excel如何尝试在单元格中显示信息。
excel中的日期存储为整数,它们表示自1900/1/1以来的日期,该日期为第1天。测试单元格是否包含日期或字符串的最简单方法之一是:
=ISTEXT(A1)
or
=ISNUMBER(A1)
Where A1 is the cell with the date to be tested.
如果第一个公式返回TRUE,则为字符串/文本。 FALSE表示它是一个数字。相反的TRUE和FALSE结果适用于第二个公式。
在公式中,如果在引号“”之间包含某些内容,它将被解释为字符串。所以类似"<=19/05/26"
的意思是它在寻找一个小于该字符串的字符串,而不是一个小于该字符串的日期。要进行日期比较,可以将文本比较与包含要与"<="&B2
进行比较的日期的单元格连接起来,其中B2
有日期,或者如果您想对其进行硬编码,请使用类似{{1} }
为了使以下解决方案有效,您的日期都需要存储为数字。 AKA Excel序列日期格式。
根据下图所示的布局数据,您可以使用COUNTIFS,INDEX和MATCH来获取所需的日期。我建议您分别找到D和N的数量,然后将它们总数相加。但是,如果要在单个单元格公式解决方案中使用它,则可以实现该效果,也可以通过N列中的结果证明。但是,该公式开始变长,以后可能很难读取/维护。
该解决方案的核心将是COUNTIFS函数。 COUNTIFS函数的格式如下:
"<="&Date(19,05,26)
让我们一次开始建立一个公式标准。第一个条件是所有大于或等于起始日期的日期。如果只希望起始日期之后的日期,请删除等号或条件。
COUNTIFS(Range to count 1, Criteria 1, Range to count 2, Criteria 2,...,Range to count n, Criteria n)
请注意$以锁定单元格引用。这样做是为了使公式被复制时,$旁边的列或行引用不会更改。
第二个条件类似于第一个条件,只是您要获取所有小于或等于结束日期的日期。再次添加/删除等号以满足您的需求。
=COUNTIFS($A$2:$A$4,">="&$G2,
下一个条件是获取与列标题D或N匹配的所有单元格。现在让我们只关注D。棘手的部分是定义要查找的列。现在让我们调用该列以查找XXX,这将使公式变为:
=COUNTIFS($A$2:$A$4,">="&$G2,$A$2:$A$4,"<="&$H2,
现在,为了定义XXX,INDEX和MATCH将成为您的朋友。关于INDEX的重要注意事项是它不直接返回单元格的值,而是返回单元格地址,后者又拉出一个单元格值。 INDEX的基本格式为:
=COUNTIFS($A$2:$A$4,">="&$G2,$A$2:$A$4,"<="&$H2,XXX,J$1)
OR
=COUNTIFS($A$2:$A$4,">="&$G2,$A$2:$A$4,"<="&$H2,XXX,"="&J$1)
NOTE: both formulas are the same. When no comparison operator is provided
it is taken as "=" by default.
那是二维范围。如果您的范围是一维的,可以是一列,也可以只是一行,那么仅需要提供第二个参数“ Range's Row ...”,它表示列表要走多远。
关于2D索引的有趣之处在于,当为ROW或Column提供0时,而不是抛出错误,而是返回所有行或列。这很重要,因为您只需要1个特定列的所有行。这意味着您的INDEX公式将开始看起来像:
INDEX(Range to look in, Range's ROW to look in, Range's COLUMN to look in)
因此,现在您需要查找特定的列号。那是MATCH将成为您朋友的地方。 MATCH采用以下格式:
INDEX($B$2:$E$4,0,SPECIFIC COLUMN NUMBER)
您已经知道要尝试匹配shift列,以便将其作为您的查找值,而查找范围将是您的列标题。在这种情况下,您想要的搜索类型是完全匹配,并由0表示。这意味着您的MATCH公式如下所示:
MATCH(Value to find, 1D range to look in, what type of search)
现在要组合各个部分,将MATCH公式放入您的INDEX中并替换“ SPECIFIC COLUMN ...”。您的INDEX现在将如下所示:
MATCH($I2,$B$1:$E$1,0)
上面的公式现在可以替换您的COUNTIFS公式中的XXX,您将获得:
INDEX($B$2:$E$4,0,MATCH($I2,$B$1:$E$1,0))
将上述公式放在J2中,然后将单元格向下和向右复制。
在L2中,使用两个公式之一获取日期范围内D和N的总数:
=COUNTIFS($A$2:$A$4,">="&$G2,$A$2:$A$4,"<="&$H2,INDEX($B$2:$E$4,0,MATCH($I2,$B$1:$E$1,0)),J$1)
现在要将您的公式全部放在一个单元格中,请看上面的第二个公式。您可以简单地转到单元格J2的内容并复制整个公式。然后编辑单元格L2,并使用复制的公式替换J2的单元格引用。通过复制K2中的公式并替换L2中对K2的引用来重复此过程。您将得到一个类似于以下内容的公式:
=SUM(J2:K2)
OR
=J2+K2
阅读起来又长又难,这就是为什么我建议将公式分别分解为D和N的部分。
现在,作为一种替代方法,您可以使用SUMPRODUCT并进行阵列操作。您要放置在I2中并向下正确复制的SUMPRODUCT公式可能是:
=COUNTIFS($A$2:$A$4,">="&$G2,$A$2:$A$4,"<="&$H2,INDEX($B$2:$E$4,0,MATCH($I2,$B$1:$E$1,0)),J$1)+COUNTIFS($A$2:$A$4,">="&$G2,$A$2:$A$4,"<="&$H2,INDEX($B$2:$E$4,0,MATCH($I2,$B$1:$E$1,0)),K$1)