Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.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 Formula_Conditional Statements - Fatal编程技术网

Excel-基于动态条件填充单元格

Excel-基于动态条件填充单元格,excel,excel-formula,conditional-statements,Excel,Excel Formula,Conditional Statements,我在a栏中列出了一年中的所有日子(对不起,是美式格式!)。根据电子表格中其他地方的一些标准,其中一些日子是“特殊的”。我只想用A列中的日期填充另一列(在下面的示例中为D),以满足特定条件(C列为True)。D列中的所需(动态)输出: A B C D 1 Date Day SpecialDay JustSpecials 2 1/1/2019 Tuesday

我在a栏中列出了一年中的所有日子(对不起,是美式格式!)。根据电子表格中其他地方的一些标准,其中一些日子是“特殊的”。我只想用A列中的日期填充另一列(在下面的示例中为D),以满足特定条件(C列为True)。D列中的所需(动态)输出:

    A              B             C             D
1  Date        Day           SpecialDay     JustSpecials
2  1/1/2019    Tuesday       True           1/1/2019
3  1/2/2019    Wednesday     False          1/4/2019
4  1/3/2019    Thursday      False          1/5/2019
5  1/4/2019    Friday        True           1/6/2019
6  1/5/2019    Saturday      True           1/8/2019
7  1/6/2019    Sunday        True           1/9/2019
8  1/7/2019    Monday        False
9  1/8/2019    Tuesday       True
10 1/9/2019    Wednesday     True
所以,如果某一天由于某种原因变得特别(C列中的False变为True),那么我希望该日期自动添加到D列中。我试图避免在这里使用“更高级别”的Excel功能,因为有一天我将不得不将此系统传递给其他人,因此如果可能,最好不要使用VBA


感谢您提供的帮助。

您可以尝试在数组公式中使用
SMALL()
,如下所示:

D2
中的公式:

=IFERROR(INDEX($A$1:$A$10,SMALL(($C$2:$C$10=TRUE)*ROW($C$2:$C$10),COUNTIF($C$2:$C$10,FALSE)+(ROW()-1))),"")
通过CtrlShift输入

请注意,如果您的值实际上是布尔值,只需在比较中替换布尔值的文本字符串

D2
的另一个选项可以是:

=IFERROR(INDEX($A$2:$A$10,MATCH(0,IF($C$2:$C$10=TRUE,COUNTIF($D$1:D1,$A$2:$A$10),""),0)),"")
也作为数组输入

另一个选项,可能更方便用户,是Pivot表您的范围和筛选日期在SpecialDay

编辑

观看视频后:

  • 第一个选项显示日期,因为您查找的是文本字符串而不是布尔值。将
    True
    False
    文本字符串更改为实际写入的布尔值
    True
    False
  • 保留
    A1
    参考,它是正确的。公式的第二部分返回一个真实的行数。因为您正在使用
    INDEX()
    它将从该范围的第一行开始计算行数。因此,我的第一个公式中引用的
    $A$1:$A$10
    是正确的
  • 您尝试的下一件事是使用
    1
    值作为真值。这行不通。该公式将尝试查找实际值为
    1
    ,该值不存在。因此,公式将返回一个0的数组。由于没有实际值,索引公式将返回单元格A1

因此,视频和努力的问题!您的解决方案是知道如何编写真正的布尔值
TRUE
FALSE
,它们不带双引号。我将更新这两个公式,因为您无论如何都不使用文本字符串。

我非常感谢您的回答。我试过前两种,但无法让它们完全发挥作用。第一个(使用SMALL())可以在第一个单元格上工作,但不能在D3及以下单元格上工作。你是对的,我使用的是布尔逻辑,所以我将“True”改为1并删除引号。和“False”和0相同。是否作为数组输入?Ctrl+Shift+Enter不,我没有。我刚弄明白那是什么意思。然而,现在我在D单元格的数量中得到了“Date”一词,与我在C列中得到的TRUEs的数量相等。当我将公式改为从$A$2开始,而不是$A$1时,我在六个单元格中只得到了1月1日(即“True”事件的数量)。很遗憾,我无法为您测试接下来的几天,但这两种选择都起了作用me@Michael:我想我可能明白了为什么只得到“一”个结果。选择整个D列,然后按delete键。只在D2单元格中粘贴JvdV的公式。然后按Ctrl、Shift和Enter键,如他所述。双击填充手柄进行填充,然后计算图纸。然后你应该看到他得到的同样正确的结果。我认为当你输入他的公式时,你输入的是一个多细胞数组,因此是“一个唯一”的结果。