-1

我有一张看起来像这样的表格 A:

Name     Phone Number  Title         Id
Ron      08900108      Carpenter     440
Bob      48951230      Painter       830
Ron      14890560      Carpenter     561
Steve    98023023      Carpenter     112

和另一个名为 Carpenter 的工作表(以及另一个名为 Painter 的相同格式的工作表)

Name     Phone Number  Id     Comment
Ron      08900108      440    Cool dude
Bob      48951230      830    Less Awesome Dude

我想将 A 的行复制到名为 Carpenter 和 Painter 的工作表中,将姓名、电话号码与现有 ID 放在同一行(例如,如果有人更改了号码),或者如果它是新 ID,则添加新行. 我想保留现有的评论。

由于我在 VBA 方面没有任何经验,因此您可以通过提供解决问题的代码或提示要使用哪些函数(?)和其他语言结构以及在哪里可以找到有关它们的信息来帮助我。

我想我需要遍历 A 中的行并将其复制到一个数组中,然后以某种方式发送到正确的工作表。

4

1 回答 1

1

首先,考虑到您正在使用 Excel 进行通常与数据库相关的操作,并且可以使用 Access 轻松完成。我越来越注意到 Excel 被用作数据表这一事实。虽然在某些情况下这可能是实用的,但我们不要忘记 Excel 的主要功能是电子表格而不是数据库。

如果您仍然坚持在 Excel 中这样做,有很多方法可以做到这一点:

1)将源范围以及命运范围加载到数组中。开始比较两个加载的数组,随意进行操作;当需要设置新的 id 时,可以动态扩展数组并使用 ubound(array) 来检索数组的大小。您还可以使用数组的大小作为输入参数动态设置范围。由您决定如何为您的案件完成。

2) 为每张返回代表记录的实例字典的工作表创建一个自定义的自我维持类。字典允许使用关键属性。这也可以作为进一步操作的基础。这似乎是一种相当奇怪的方式,但它确实有效,但我不会将它用于大量数据)。好处是这个类相当灵活,以后可以很容易地用非常有限的代码再次调用。

3) 使用 ADODB 对工作表执行查询(不要忘记引用库)。ADODB 允许您将 Excel 工作表视为表格,其中工作表的第一行被视为字段标题。

这些方法中的任何一种最终都会奏效,但你会让自己变得很难。正如我所说,Access 在这方面做得更好,因为您可以创建基于外键的关系表。如果您需要 Excel 中的这些数据,这不是问题,因为您仍然可以使用 ADO 在 Excel - Access 之间创建连接。

很抱歉将其作为回复,但由于我不经常在 Stack Overflow 上,我无法发表评论。虽然我无法为您编写代码,但我希望这对您有所帮助。

于 2012-06-27T10:20:47.520 回答