VBA:如何根据其他列中的某些条件自动填充列

问题描述 投票:0回答:1

我是VBA的初学者,如果有人可以帮助我解决这个问题,我将非常感激。

我正在工作的工作表中有3列R,SF和DF,其中性能百分比记录每个变量中的每个变量(R,SF,DF)。

如果百分比大于90,则该变量分类为严重。如果百分比大于或等于80且小于90,则该变量分类为“注意”。最后,如果该变量大于或等于60且小于80,则该变量被分类为Trigger。

我想通过比较每个变量的3个百分比并取最大值来自动填充另一列。例如,如果最大值是变量R,则该另一列中的单元格将填充R及其各自的分类,(C-严重或A-注意或T-触发)。为了说明这种情况:

Example

excel vba excel-vba for-loop if-statement
1个回答
0
投票

非VBA解决方案

考虑两个公式:

  1. =SWITCH(MATCH(MAX(B2:D2),B2:D2,0), 1, "R", 2, "SF", 3, "DF")
  2. IF(MAX(B2:D2)>=90,"C",IF(MAX(B2:D2)>=80,"A",IF(MAX(B2:D2)>-60,"T","")))

第一个公式将为您提供具有最大值的列的列索引(基于输入范围)。然后,您可以使用SWITCH将列索引转换为给定的输出。在这里,我们将以下Column Index:Output转换为1:R2:SF3:DF

第二个公式将只对每个IF语句进行一次求值。一旦满足您的条件,该公式的其余部分将不进行评估,因此您只需要检查Greater Than,而不需要按照您的说明检查In Between


如果要在一个单元格中输出,则只需用&合并公式,如下所示。我还分享了我使用的设置的照片,因此您可以将公式与范围相关

A1 = SWITCH(MATCH(MAX(B2:D2),B2:D2,0), 1, "R", 2, "SF", 3, "DF") & IF(MAX(B2:D2)>=90,"C",IF(MAX(B2:D2)>=80,"A",IF(MAX(B2:D2)>-60,"T","")))

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.