在没有Vlookup的情况下匹配数组内的数据

时间:2017-01-02 17:21:11

标签: arrays excel vba excel-vba

我正在尝试使用数组匹配多个文件中的数据(因为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的情况下匹配信息?

让我说我转到第一个文件,转换为数组,如何匹配我的项目标识符以获取每个日期的信息并创建输出?

任何帮助都将深受赞赏。

2 个答案:

答案 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的数据透视表是一种非常便宜的替代方案。