基于行号读取列值 - Excel

时间:2018-03-09 11:43:17

标签: excel-formula

我是excel公式的新手, 我有以下方案,我的工作簿中有两张表,第一张是:

ProjectName Primary Secondary
P1  Ajay    Shekar
P2  Rahul   Ajay
P3  Shekar  Rahul
P4  Raj Simran

第二张表是资源特定的,对于Ajay而言,并且具有基于ProjectName的下拉列表。 我的要求是当我选择项目名称说P1时,第二列应该填充值'Primary',如果它的P2值应该是Sheet2中的'Secondary'。 任何人都可以建议我如何实现这个解决方案?

我尝试获取用于匹配项目名称的行号,但我无法根据行号获取relvant列号。

2 个答案:

答案 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))
  

INDEX('Resource Sheet'!$1:$1,1,MATCH(..)):这将提供MATCH

提供的列号中资源工作表第1行的标头值

这简单的一点。现在,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使用上面的示例,0P1和{{{0,1,0,0,0,..} 1}}将是P2   将2个数组相乘,{0,0,1,0,0,..}得到P1,而得MAX({0,2,0,0,0,..})获得P1

答案 1 :(得分:0)

您的下拉列表包含选项( A2中的P1,P2等)你可以在相邻的单元格中使用它。

=CHOOSE(MID(A2, 2, 2), "primary", "secondary", "secondary", "secondary", "secondary")

enter image description here