我有一个Excel数据集,它通过跟踪编号来总结运输附加费。我把A列中的跟踪编号作为我的索引,但是数据显示在A列的跟踪数的右边,我有一对列规定了收费类型,$收费在跟踪的右边。列标题对于附加费类型和附加费金额是通用的,因此列不是固定的。因此,B栏(任何特定跟踪号码的第一种附加费类型)可以是空白的,也可以包含适用的跟踪附加费的任何子集,与该附加费类型相关的收费数额列于C栏(否则为0美元)。我希望在A列中使用我的跟踪编号重新创建数据集,所有可能的附加费类型固定为列标题(从B列开始),以及仅包含$中的收费金额的表主体,用于给定的跟踪编号和附加费类型组合。请参见当前格式和所需格式,如下所示。
当前:
所需:
如何在Excel中最有效地编码?现在,如果我告诉你,一个给定的跟踪号码可以在A列中显示不止一次(即调整先前的收费)。这如何改变公式?
谢谢!
发布于 2019-04-26 22:41:56
以下公式可能有效:
=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值,而不是事后输入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)https://stackoverflow.com/questions/55874922
复制相似问题