如何使用函数在excel中编写像查询这样的数据库?

时间:2012-04-05 04:49:22

标签: excel excel-vba excel-formula vba

我有一些结构在这样的表中的数据:

existing table

我的电子表格中有另一个标签,我删除了任何重复的类别条目,并希望将数据连接起来,如下所示:

new table

我需要使用函数创建不是宏或Visual Basic 。我已经编写了函数来消除任何重复的类别条目,现在我需要弄清楚如何获取每个独特的类别并将数据附加到其后面。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

假设第一张图片来自Sheet1而第二张Sheet2,这是一种方法。您需要将至少一个计算列添加到Sheet1,并选择将两个计算行添加到Sheet2

  1. 唯一标识Sheet1上的每一行。在A中添加公式=B3&COUNTIF($B$3:B3,B3)的新列A3并填写。您将first1中的A3first2中的A4依此类推。
  2. 确定Sheet2上的每个列块。在6中添加公式为=COUNTIF($B$2:B2,B2)的新行B6并填写。值为1,1,1,2,2,2,3,3,3。如果您愿意,可以手动输入,但不会轻易扩展。
  3. 计算Sheet1中每个数据项的列,并放入Sheet2的列。使用公式7Sheet2添加新行=MATCH(B2,Sheet1!$A$2:$E$2,0)并填写。值为3,4,5,3,4,5,3,4,5。我们现在知道,Sheet2中的每个单元格,我们所拥有的类别的实例以及数据变量来自哪一列。
  4. 使用VLOOKUP查找first1并在数据表中返回数据列3。在Sheet2上,将单元格B3设置为=VLOOKUP($A3&B$6,Sheet1!$A$2:$E$8,B$7,FALSE)并向下填充。
  5. 您将遇到一些#N/A错误(例如,小区E4)。如果你有更新版本的Excel,你可以使用IFERROR()来逃避这个;否则,请使用=IF(ISNULL(<formula>), "", <formula>),其中<formula>是步骤4中的公式。
  6. 总结:

    • 为源中的每一行创建唯一的,可顺序的,可计算的行ID。
    • 确定目标中每列使用该序列的哪个实例。这将附加到类别的末尾,以确定上一步中形成的行ID。
    • 确定哪个列包含目标中每列的数据。
    • 使用计算出的行ID查找行,并找到此数据项的相关列。
    • 正确格式化结果。