【发布时间】: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”的内容?