我正在尝试使用数组匹配多个文件中的数据(因为vlookup花费的时间太长)。
例如:我有10个拥有该信息的源文件(每个文件为不同的一天)。每个文件都有许多项目,每个项目都有多个信息列,从普通数据库开始。
File 1 - 20 of January
Item (identifier) Price Discount Quantity
A 100 5 10
B 80 6 15
C 110 3 15
File 2 - 21 of January
Item (identifier) Price Discount Quantity
A 95 3 5
B 90 6 10
C 120 4 20
D 130 7 2
File 3 - 22 of January
Item (identifier) Price Discount Quantity
A 70 11 35
B 100 1 15
D 45 17 25
我的代码获取此数据并使用vlookup进行匹配,因为添加了新的源文件,它会增加输出文件中的项目数(如果文件中没有过去的项目,则信息只会计数为零)。
我在Excel中的输出是:
Tab 1 (price)
All the item Identifiers 20/01 21/01 22/01
A 100 95 70
B 80 90 100
C 3 4 -
D - 130 45
Tab 2 (discount)
All the item Identifiers 20/01 21/01 22/01
A 5 3 11
B 6 6 1
C 110 120 -
D - 2 25
等等。
第一个问题是每个文件中的项目不相同(有些可能被添加或排除),目前我有数千个项目,每个项目超过15列。
其次,如果我将此信息(每个文件单独)转换为数组,如何在没有vlookup的情况下匹配信息?
让我说我转到第一个文件,转换为数组,如何匹配我的项目标识符以获取每个日期的信息并创建输出?
任何帮助都将深受赞赏。
答案 0 :(得分:0)
如果我理解正确,您目前已经拥有了打开和分析单独文件的方法吗?
如果你想加速代码中的vlookup,一种方法可能是减少你执行的vlookup的数量。如果数据文件中的列数始终相同(col1 = name,col2 = date,col3 = address等),则可以考虑使用MATCH
查找感兴趣的标识符的行号(例如A,B,C或D)首先:
MATCH(identifier_address, array_of_interest, 0)
如果您将此信息存储在一列中,则只应搜索一次。
然后,要查询文件中的值,请使用ADDRESS
函数直接访问每个列的数据(1-15),而不必使用vlookup,方法如下:
INDIRECT("sheetname!" & ADDRESS(cell_with_match_result, 2))
INDIRECT("sheetname!" & ADDRESS(cell_with_match_result, 3))
等
修改。当然,你必须引用有问题的文件/数组。添加了INDIRECT
声明。
答案 1 :(得分:0)
我使用数据透视表来解决这个问题。您的数据是必不可少的表格。您需要做的就是为文件中的每个表添加另一列,即额外的列是“fileDate”或类似的。
数据透视表可用于生成各种报告。您无需担心查找。在昂贵的数据库包中,数据透视表称为OLAP多维数据集; Excel的数据透视表是一种非常便宜的替代方案。