Excel 组织

Excel 组织

我已经制作了我想要的样本版本。

此表格不断重复,中间行的金额值始终变化。我想知道您是否知道一种方法,可以让最右侧列检查所有中间列是否都已获批准,如果一个或多个列被拒绝,则自动显示已拒绝,如果所有列都获批准,则自动显示已批准。

这必须是可重复和可扩展的,因为这是一个包含数百个类似示例的文件。

在此处输入图片描述

答案1

只需使用公式即可实现,无需任何 VBA。

我已设置了如下工作表:

工作簿截图

N1在和中输入以下公式N20

=IF(ISNUMBER(MATCH("Rejected",INDEX(G:G,ROW()):INDEX(G:G,IFERROR(MATCH("*",INDEX(L:L,ROW()+1):INDEX(L:L,ROWS(L:L)),0)+ROW()-1,MATCH("",G:G,-1))),0)),"Rejected","Approved")

L:L我在公式中使用了,因为我不知道您工作表的具体细节。为了使公式正常工作,请将其替换L:L为任何不包含任何空白的纯文本合并单元格列。

不幸的是,由于合并单元格的大小不同,您无法向下填充公式。此外,您只能将公式复制粘贴到大小相同的合并单元格中。

在最右边的列中输入公式的最简单方法是使用以下任一按键序列:

  • F2  Ctrl+V  Enter

或者

  • Backspace Ctrl+V Enter

您甚至可以录制宏来加快速度。


美化后的公式如下:

=
IF(
  ISNUMBER(
    MATCH(
      "Rejected",
      INDEX(G:G,ROW())
      :INDEX(G:G,
        IFERROR(
          MATCH("*",INDEX(L:L,ROW()+1):INDEX(L:L,ROWS(L:L)),0)+ROW()-1,
          MATCH("",G:G,-1)
        )
      ),
      0
    )
  ),
  "Rejected",
  "Approved"
)

笔记:

  • 美化的公式确实可以起作用。
  • 美化版本中的括号(G:G)用于强制G:G将其保持在自己的行上。

编辑:

如果您希望将状态值列表从和增加到Rejected、和Approved,您可以像这样在公式中嵌套函数:RejectedVoidPendingApprovedIF()

=
IF(
  ISNUMBER(
    MATCH(
      "Rejected",
      INDEX(G:G,ROW())
      :INDEX(G:G,
        IFERROR(
          MATCH("*",INDEX(L:L,ROW()+1):INDEX(L:L,ROWS(L:L)),0)+ROW()-1,
          MATCH("",G:G,-1)
        )
      ),
      0
    )
  ),
  "Rejected",
IF(
  ISNUMBER(
    MATCH(
      "Pending",
      INDEX(G:G,ROW())
      :INDEX(G:G,
        IFERROR(
          MATCH("*",INDEX(L:L,ROW()+1):INDEX(L:L,ROWS(L:L)),0)+ROW()-1,
          MATCH("",G:G,-1)
        )
      ),
      0
    )
  ),
  "Pending",
IF(
  ISNUMBER(
    MATCH(
      "Void",
      INDEX(G:G,ROW())
      :INDEX(G:G,
        IFERROR(
          MATCH("*",INDEX(L:L,ROW()+1):INDEX(L:L,ROWS(L:L)),0)+ROW()-1,
          MATCH("",G:G,-1)
        )
      ),
      0
    )
  ),
  "Void",
  "Approved"
)
)
)

一个更好的解决方案是使用适用于数组的公式:

=
CHOOSE(
  SMALL(
    IF(
      ISERROR(
        MATCH(
          {"Rejected","Void","Pending","Approved"},
          INDEX(G:G,ROW())
          :INDEX(G:G,
            IFERROR(
              MATCH("*",INDEX(L:L,ROW()+1):INDEX(L:L,ROWS(L:L)),0)+ROW()-1,
              MATCH("",G:G,-1)
            )
          ),
          0
        )
      ),
      FALSE,
      {1,2,3,4}
    ),
    1
  ),
  "Rejected","Void","Pending","Approved"
)

如果您更喜欢该公式的扁平版本,则为:

=CHOOSE(SMALL(IF(ISERROR(MATCH({"Rejected","Void","Pending","Approved"},INDEX(G:G,ROW()):INDEX(G:G,IFERROR(MATCH("*",INDEX(L:L,ROW()+1):INDEX(L:L,ROWS(L:L)),0)+ROW()-1,MATCH("",G:G,-1))),0)),FALSE,{1,2,3,4}),1),"Rejected","Void","Pending","Approved")

通过简单地调整两个常量数组和倒数第二行的值列表,公式的最后一个版本可以轻松扩展到更多(或更少)的值。

请注意,如果在适当范围内存在多个值类型,则值的确切顺序决定返回哪个值。优先级最高的值是左侧的值。

相关内容