我是excel公式的新手, 我有以下方案,我的工作簿中有两张表,第一张是:
ProjectName Primary Secondary
P1 Ajay Shekar
P2 Rahul Ajay
P3 Shekar Rahul
P4 Raj Simran
第二张表是资源特定的,对于Ajay而言,并且具有基于ProjectName的下拉列表。 我的要求是当我选择项目名称说P1时,第二列应该填充值'Primary',如果它的P2值应该是Sheet2中的'Secondary'。 任何人都可以建议我如何实现这个解决方案?
我尝试获取用于匹配项目名称的行号,但我无法根据行号获取relvant列号。
答案 0 :(得分:0)
=IF(VLOOKUP(B1,'Resource Sheeet'!A:C,2,FALSE)=A1,"Primary",IF(VLOOKUP(B1,'Resource Sheeet'!A:C,3,FALSE)=A1,"Secondary",NA()))
资源名称位于单元格A1中,项目名称位于单元格B1中。只需运行2个VLOOKUPS以查看名称是否存在于B列或C列中。仅如果每个项目只有1行,则可以使用
如果每个项目有多行,可以试试这个:
=IF(COUNTIFS('Resource Sheet'!A:A,B1,'Resource Sheet'!B:B,A1)>0,COUNTIFS('Resource Sheet'!A:A,B1,'Resource Sheet'!B:B,A1) & " Primary","") & IF(--COUNTIFS('Resource Sheet'!A:A,B1,'Resource Sheet'!B:B,A1)*--COUNTIFS('Resource Sheet'!A:A,B1,'Resource Sheet'!C:C,A1)," and ","") & IF(COUNTIFS('Resource Sheet'!A:A,B1,'Resource Sheet'!C:C,A1)>0,COUNTIFS('Resource Sheet'!A:A,B1,'Resource Sheet'!C:C,A1) & " Secondary","")
其中将列出项目的主要/次要匹配数量(例如" 1主要"," 1主要和1个中等"," 3中等"等等)
{EDIT} 根据以下评论:此公式将匹配任意数量的列,但仍然仅适用于每个项目1行:
=INDEX('Resource Sheet'!$1:$1,1,MATCH(A1,OFFSET('Resource Sheet'!$A$1,SUMPRODUCT(MAX(ROW('Resource Sheet'!$A:$A)*--('Resource Sheet'!$A:$A=B1)))-1,0,1,COUNTA('Resource Sheet'!1:1)+COUNTBLANK('Resource Sheet'!1:1)),0))
提供的列号中资源工作表第1行的标头值
INDEX('Resource Sheet'!$1:$1,1,MATCH(..))
:这将提供MATCH
这简单的一点。现在,MATCH
也非常简单 - 给它一个值(A1
)和一个行或列,将匹配类型设置为0
,它将为您提供哪个列/行在行/列中匹配值。
因此,我们一起查看项目的行。这样做,我们将使用OFFSET
来制作行范围:
OFFSET('Resource Sheet'!$A$1,SUMPRODUCT(MAX(ROW('Resource Sheet'!$A:$A)*--('Resource Sheet'!$A:$A=B1)))-1,0,1,COUNTA('Resource Sheet'!1:1)+COUNTBLANK('Resource Sheet'!1:1))
打破它:
Resource Sheet'!$A$1
:这告诉我们要查看哪张表
-
,SUMPRODUCT(MAX(ROW('Resource Sheet'!$A:$A)*--('Resource Sheet'!$A:$A=B1)))-1
:这告诉我们要查看哪一行,但我稍后会解释。
-
,0,1
:这告诉我们,我们从A列开始("向右移动0列"),只想要1行高。
-
COUNTA('Resource Sheet'!1:1)+COUNTBLANK('Resource Sheet'!1:1)
:这确保我们查看整行。
-
现在,用SUMPRODUCT
解释最后一点。它以-1
结尾,因为从$A$1
开始我们将0
行向下移动到第1行完成,或2
行向下移动以完成第3行,等等。{ {1}}本身只是强制它作为数组公式进行评估 - 公式本身是SUMPRODUCT
MAX(ROW('Resource Sheet'!$A:$A)*--('Resource Sheet'!$A:$A=B1))
:我们想要最大的值,因为我们不想要的行会重新调整MAX
-
0
:这将是所有行号的数组,ROW('Resource Sheet'!$A:$A)
-
{1,2,3,4...}
:如果列A中的值与我们的项目名称匹配,则内部位将为每一行创建一个--('Resource Sheet'!$A:$A=B1)
和TRUE
的数组。FALSE
将--
转换为TRUE
,将1
转换为FALSE
使用上面的示例,0
将P1
和{{{0,1,0,0,0,..}
1}}将是P2
将2个数组相乘,{0,0,1,0,0,..}
得到P1
,而得MAX({0,2,0,0,0,..})
获得P1
答案 1 :(得分:0)