【问题标题】:VBA - How to paste values from 2-D table in one sheet into column of another sheet based on matching valuesVBA - 如何根据匹配值将一张表中的二维表中的值粘贴到另一张表的列中
【发布时间】:2018-01-25 00:14:49
【问题描述】:

我对 VBA 非常缺乏经验。我通过谷歌搜索获得的 VBA 所取得的成就。所以,我所知道的根本没有深度。

好的,这就是我所拥有的:

在工作簿中,我有两张工作表。让我们称它们为 Sheet1 和 Sheet2。

在 Sheet1 中,我有这个二维表,其中 ###s 是与匹配的行和列标签相对应的一些值:

年龄     男性    女性
18-29   #####    ######
30-44   #####    ######
45+      #####   ######

以上所有的单元格都是 D2:F5

现在,在 Sheet2 中,我有 3 列:ID Age Sex,从 A7 开始。所以,标题在 A7、B7、C7 中

您可能会看到我的目标。

我有数千行。

我需要在 D7 列中放置适当的###,标题金额基于性别 (B) 和年龄 (C) 中的匹配值。

所以,如果 Sheet1 中的交叉表具有这些值:

年龄     男性       女性
18-29   123       456
30-44   789       101112
45+      131415   161718

然后在 Sheet2 中我想看看:

ID   性别          年龄       金额
1    女性    30-44     101112
2    男性        18-29     123

等在专栏下方。

而且我一点也不知道该怎么做。到目前为止,我最大的 VBA 成就是将 CSV 文件导入到活动工作表中,所以...

【问题讨论】:

标签: vba


【解决方案1】:

一个问题是:Sheet2 中是否手动输入“性别”和“年龄”?

您可能想要使用该功能:

Application.Worksheetfunction.Vlookup(...)

当然,您需要为每个表格设置某种类型的标识,例如:

Dim wSheet1 as Worksheet
Dim wSheet2 as Worksheet
Set wSheet1 = Worksheets("Sheet1")
Set wSheet2 = Worksheets("Sheet2")

就像在普通工作簿中使用它一样。

例子:

wSheet2.cells("A7").value = "1" 'Note: You can improve this by looking at an empty row automatically with a code
wSheet2.cells("B7").value = application.worksheetfunction.vlookup("18-29",wSheet1.Range("D4:F9"),3,0)

您可以通过编辑搜索条件“18-29”来根据自己的喜好改进程序

干杯

【讨论】:

  • 嗨!感谢您的回复。性别和年龄实际上是根据其他数据计算得出的,因此它们是公式而不是值。我担心 Vlookup,因为 Sheet2 中的行数会经常变化。现在我在 Sheet2 上有一个按钮,可以导入从 Stata 输出的 CSV 文件。然后我基本上想将 Amount 的年龄和性别聚合数据“合并”到这个 CSV 文件中。我可以在 Stata 中轻松地做到这一点,但我正在尝试为我使用零编码技能的人制作一个 Excel“计算器”(即使在像 Stata 这样的东西中)。我会看看我是否可以让你的建议工作。谢谢!
  • 如果我在这里遇到您的问题,您在 vlookup 中的范围是“不固定的”,对吧?如果列数是固定的而行数不是固定的,您可以通过使程序查找底部行来指定行数,这样Dim iRow As LongDim ws As WorksheetSet ws = Worksheets("1")Dim wbSource As WorkbookiRow = ws.Cells.Find(What:="*", SearchOrder:=xlRows, _@987654329 @
  • 您也可以通过lastrow = ws.UsedRange.Rows (ws.UsedRange.Rows.Count).Row而不是使用查找来查找最后一行。或者更好的是,在导入数据后,将其转换为表格并使用结构化引用,这样您就不必担心最后一行,甚至可以在聚合表上使用公式,而不是用 VBA 填充它。 :-)
  • 哦,我猜这最后一条评论更好! :) 谢谢你的建议。
猜你喜欢
  • 2022-01-24
  • 1970-01-01
  • 2014-06-06
  • 2019-01-01
  • 2019-07-06
  • 1970-01-01
  • 2015-02-09
  • 2019-06-28
  • 2020-01-13
相关资源
最近更新 更多