【问题标题】:Excel VBA get dynamic values from a source sheet to destination sheetExcel VBA 从源工作表获取动态值到目标工作表
【发布时间】:2021-10-09 16:27:20
【问题描述】:

我是 VBA 的新手,我已经尝试了一段时间,但到目前为止没有运气。

我有一个包含 2 个动态工作表 1 和 2 的工作簿。每个工作表都有 A(标签 ID)、B(ID 变化)、C(值)列。如果 sheet1 中 A&B 列的值与 sheet2 的 A&B 匹配,我想将 sheet2 中的 C 列复制到 sheet1 的 D 列中。也有可能表 2 可能没有样品的所有条目,并且只有部分样品名称可用。

感谢任何帮助。

【问题讨论】:

  • 您的 Excel 版本是否允许您执行 Excel 溢出范围?如果您在工作之外某处的任一工作表上创建公式 =A1:A3,则可以对此进行测试。如果这会创建三个单元格(可以这么说),你会这样做。如果你只得到A1 的值,你就不会。

标签: excel vba import match lookup


【解决方案1】:

如果 C 列只是数字数据,那么您可以在没有 VBA 的情况下完成您想要做的事情,只需使用 SumIfsSumProduct

sheet1 单元格D1 中插入以下公式并向下拖动。

=SUMIFS(Sheet2!C:C,Sheet2!A:A,A1,Sheet2!B:B,B1)

此外,如果您有 Excel spill range feature,您可以使用动态公式,在添加行时自动填充。

=FILTER(SUMIFS(Sheet2!C:C,Sheet2!A:A,A1:A999999,Sheet2!B:B,B1:B999999),NOT(ISBLANK(A1:A999999)))

【讨论】:

    【解决方案2】:

    听起来您可以创建对工作表 1 和 2 的引用,并遍历其中一个工作表,同时检查另一个工作表中的每个条目是否存在,如果 A&B 匹配,则复制该值。

    自从我编写 VBA 以来已经有一段时间了,这在性能方面并不是一个很好的解决方案,但这可能会帮助您入门。

    粗略示例(在语法上绝对不正确,并且缺少将 sheet1 和 sheet2 分配给实际工作簿):

    Dim sheet1 As Worksheet 
    Dim sheet2 As Worksheet
    
    For row In sheet1
        For row2 In sheet2
            If row.Range("A").Value == row2.Range("A").Value
                If row.Range("B").Value == row2.Range("B").Value
                    row.Range("D").Value = row2.Range("C").Value
    

    【讨论】:

    • 您是否可以将您提到的第一个解决方案的示例代码放在参考表中?我添加了一些图片
    • 您必须为此使用 VBA 吗?对于可以使用标准公式实现的东西来说似乎有点矫枉过正。
    • 使用 VBA 的原因是这些工作表也是从其他来源导入的,这些来源将有不同的行数(除了 A、B 和 C),每次我都必须把这些单元格的语法。考虑到数据量,VBA 似乎更容易
    • 我添加了一个伪示例。 VBA 听起来确实是正确的选择
    猜你喜欢
    • 2016-10-25
    • 2011-12-24
    • 2021-07-28
    • 2023-03-27
    • 2013-07-12
    • 1970-01-01
    • 2019-04-29
    • 2018-01-04
    相关资源
    最近更新 更多