【问题标题】:VBA: Iterate a lookup function through Sheet A and append looked up values in Sheet BVBA:通过工作表 A 迭代查找函数并在工作表 B 中附加查找的值
【发布时间】:2022-06-13 14:26:54
【问题描述】:

这里是完整的 VBA 新手,目前正在阅读官方的 Microsoft VBA/宏教程。

编辑 我有 2 个工作表的以下情况。

  • 表 1 存储了某些由“ID”标记的规则集,这些规则集适用于某些数据“字段”
  • 工作表 2 存储分配给“源系统”的每个“字段”的映射逻辑
  • “字段”和“ID”(要求)之间是 n:m 关系

问题:

  • 对于表 2 中的每个“字段”,请在表 1 中查找表 1 中所有匹配“字段”的“ID”值
  • 约束:特定“源系统”的所有“字段”都应分配相同的“ID”。适用于字段的任何规则(即“ID”)也适用于相应的源系统。 因此,分配给特定源系统的 ID 集应该是源系统的所有记录行(也称为“字段”)中所有唯一匹配“ID”的最大集。 --> 在第 4 表中说明

希望这有助于解决问题。

说表 1 看起来像这样,是查找表。

ID Field 1 Field 2 Field 3
A_1 a100 a200 z012
A_2 a200 a300 a400
A_3 a100 z400

假设工作表 2 是工作表 1 中的值应匹配和粘贴的工作表。但是,ID 字段应该是工作表 2 中每个唯一源系统的工作表 1 中找到的所有 ID 的总和。如果有多个 ID(查找匹配),则不应覆盖该值,而应附加第二个、第三个值等。

ID Source system Field
DB1 a100
DB1 a200
DB1 a300
DB2 z012

运行宏后,表 2 中的表格应如下所示:

ID Source system Field
A_1, A_3 DB1 a100
A_1, A_2 DB1 a200
A_2 DB1 a300
A_1 DB2 z012

然后,最终版本将检查表 2 中每个源系统的 ID 要求的等价约束,并在第 3 行中为 DB1 添加 A_1,以使源系统 DB1 的 ID 要求在所有字段中匹配.

ID Source system Field
A_1, A_3 DB1 a100
A_1, A_2 DB1 a200
A_1, A_2 DB1 a300
A_1 DB2 z012

我真的想不出一个合适的逻辑来给我想要的输出。表 2 相当长(约 20k 行)

提前非常感谢您!任何指针都非常感谢!

【问题讨论】:

  • 首先,您应该向我们展示您自己尝试过的内容,即使它没有返回您需要的内容。我们可能会更好地了解您尝试完成的工作。我不明白哪一个是两张纸之间的匹配键......你能试着澄清这方面吗?
  • 还活着吗?根据什么匹配使用前两个表制作第三个表?
  • 是的,刚刚完成了一些其他工作。本质上,我想查找表 A 中的字段并将它们匹配到表 B 列 C(字段)中,结果向量是表 A 中的 ID 列
  • 但如果特定字段有多个 ID,则不应覆盖查找的值,而是附加。我在想也许我需要一个两步的过程,我首先在表 B 中附加新查找的 ID 值,然后确定与表 A 中的每个源系统相对应的所有 ID 的总数。我将调整问题来反映这一点。
  • 我认为不需要第二步。如果我根据您最近的 cmets 以以下方式得出结论,是否是正确的理解? 处理这两个表意味着将第一张表的三个“Feld 1-3”列中的所有项目与第二张表的 Field 列中的项目进行比较。如果找到匹配项(对于任意项),则应在 A:A 列中返回相应的 ID,以逗号分隔。但这根本不能解释“源系统”字段的使用。由于无法与第一张表中的任何内容进行比较,因此根据第 4 行返回“A-100”的内容?

标签: excel vba


猜你喜欢
  • 1970-01-01
  • 2023-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-12
  • 1970-01-01
  • 2021-11-16
  • 1970-01-01
相关资源
最近更新 更多