【问题标题】:Using VBA to create a grid from 3 spreadsheets with the row, column, and values使用 VBA 从 3 个包含行、列和值的电子表格创建网格
【发布时间】:2015-06-30 17:51:21
【问题描述】:

我有三个 Excel 电子表格。第一个具有要分配给新 Excel 电子表格的值。第二个是数据所属的列。第三个是数据所属的行。

看起来像这样:

Data Value:
1 5 7 9
2 2 6 8

Column Number:
1 2 3 1
2 3 1 2

Row Number:
1 2 3 2 
4 4 3 1 

如何结合所有这些信息来创建一个包含以下格式的值的电子表格:

         Column
         1  2  3   
   Row
    1    1  8  0       
    2    9  5  0      
    3    6  0  7
    4    0  2  2

我尝试通过在 vba 中使用循环来做到这一点,但我是初学者并且遇到了一些困难。

我知道我需要使用一个循环来检查每次迭代中数据应该位于的行和列与行和列。我只是不知道该怎么做。

【问题讨论】:

  • 您是指 3 个不同的工作簿(Excel 文档)还是一个工作簿中的 3 个不同的电子表格?还有——你试过什么?

标签: vba excel


【解决方案1】:

假设这些是同一工作簿中的不同工作表(如果不是 - 创建一个新工作簿并将工作表复制过来)。我假设在每张纸上都使用相同的单元格范围(例如,在所有 3 种情况下,A1:D2 的值都在第一张纸上,第二张纸上的列号和第三张纸上的行号)。您可以完全放弃 VBA,但要以使用一些复杂的公式为代价(受这篇优秀文章的启发:http://exceluser.com/blog/1043/how-to-create-two-dimensional-lookups-in-excel-formulas.html

第 1 步。添加第四张工作表并在 A1 中添加公式

=CONCATENATE(Sheet3!A1,"_",Sheet2!A1)

并将其复制到适当的范围内(例如 A1:D2)。这将为您提供诸如 2_1 之类的内容,告诉您工作表 1 中的相应条目属于第 2 行第 1 列。将此范围命名为“位置”(公式选项卡 - 定义名称选项)

第 2 步 - 确定要保存数据的位置(为简单起见,我假设它在第 4 页中)并添加行号 (1-4) 和列号 (1-3) 作为标签。在我的例子中,行标签在 A5:A8 中,列标签在 B4:C4 中(见下面的截图)。然后在要填写的值的左上角(在我的情况下为 B5)输入以下公式(适当调整以匹配您的范围):

=IFERROR(INDIRECT(ADDRESS(SUMPRODUCT(ROW(location)*(location = CONCATENATE($A5, "_",B$4))),SUMPRODUCT(COLUMN(location)*(location = CONCATENATE($A5, "_",B$4))),,,"Sheet1")),0)

并将其复制到预期的范围内。小心美元符号 - 这个公式以一种基本的方式混合了行绝对引用和列绝对引用。有点奇怪,它确实有效:

【讨论】:

    猜你喜欢
    • 2011-01-29
    • 1970-01-01
    • 2011-12-14
    • 2022-01-05
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多