是否有办法查看通过VLOOKUP标识的行中是否存在给定值,如果存在,则在该行的另一个单元格中返回该值?

时间:2019-04-26 21:05:11

标签: excel

我有一个Excel数据集,该数据集通过跟踪号来汇总运输附加费。我在A列中有跟踪号作为索引,但是数据显示的方式是,在A列中跟踪号的右边,我有成对的列,这些列指示了跟踪类型的费用类型和$ Charge。列标题是“附加费类型”和“附加费金额”的通用名称,因此这些列不是固定的。这样,B列(任何给定跟踪编号的第一个附加费类型)可以为空白,也可以包含任何适用的跟踪附加费的子集,与该附加费类型相关的费用金额列在C列中(否则为$ 0 )。我想用我在A列中的跟踪号重新创建数据集,将所有可能的附加费类型固定为列标题(从B列开始),并且表主体仅包含以$为单位的费用金额给定跟踪号和附加费类型的组合。 请参见以下当前格式和所需格式。

当前:

enter image description here

所需:

enter image description here

如何最有效地在Excel中对此进行编码? 现在,如果我告诉您,给定的跟踪号可以在A列中显示多次(即对先前费用的调整),该怎么办?这如何改变公式?

谢谢!

1 个答案:

答案 0 :(得分:0)

以下公式可能有效:

=IFERROR(INDIRECT("<sheetname>!"&ADDRESS(MATCH(<Tracking#>,<sheetname>!$A:$A,0),MATCH(<columnHeader>,INDIRECT("<sheetname>!"&ADDRESS(MATCH(<Tracking#>,<sheetname>!$A:$A,0),2)&":"&ADDRESS(MATCH(<Tracking#>,<sheetname>!$A:$A,0),<max#ofSurcharges*2+1>)),0)+2)),0)

从本质上讲,它在第一张纸上找到了跟踪号的行,并创建了一个数组,在其中搜索附加费名称,如果找到附加费,它将返回相邻单元格的值,即相关的值。

请注意,此公式在某种程度上取决于原始数据的结构:跟踪编号必须在A列中,而附加费必须在B列中开始。

此外,这只会在列表中找到跟踪编号的第一个实例,因此,如果需要使用最新条目,我建议添加某种形式的时间戳以对原始数据进行排序。

编辑:使用VLOOKUP的解决方案可能更有效,不确定

Edit2:VLOOKUP的问题在于原始数据不是像已编辑数据一样合适的表。实际上,最好的解决方案是首先输入0值,而不是随后输入。

无论如何,该解决方案与上面的解决方案非常相似,但是最终使用VLOOKUP来检索数据。如果您要处理大量数据,则可以测试哪种方法更有效。

=IFERROR(VLOOKUP(<Tracking#>,<referenceToRawData>,MATCH(<columnHeader>,INDIRECT("<sheetname>!"&ADDRESS(MATCH(<Tracking#>,<sheetname>!$A:$A,0),2)&":"&ADDRESS(MATCH(<Tracking#>,<sheetname>!$A:$A,0),<max#ofSurcharges*2+1>)),0)+2,FALSE),0)