【发布时间】:2018-06-08 12:12:15
【问题描述】:
去年,我制作了一个巨大的电子表格,其中包含世界上每个国家/地区的所有最新可用数据。我的想法是,我可以下载最新数据(例如,包含世界银行人口统计数据的数据表),然后轻松地将它们传输到我的主表中。
以下是它的外观示例:
为了从其他电子表格中提取数据,我使用了长而凌乱的 IF 函数行,例如:
=IF(ISNUMBER(IFERROR(VLOOKUP($A3;Population!$A$3:$C$400;2;FALSE);"Not
Found"));IFERROR(VLOOKUP($A3;Population!$A$3:$C$400;2;FALSE);"Not
Found");"Not Found")&"
("&IF(ISNUMBER(IFERROR(VLOOKUP($A3;Population!$A$3:$C$400;3;FALSE);"Not
Found"));IFERROR(VLOOKUP($A3;Population!$A$3:$C$400;3;FALSE);"Not
Found");"Not Found")&")"
显然,这不是最有效的方法。这是我需要宏来执行的操作:
- 首先将我的主工作表中包含所有国家/地区名称的 A 列与数据表中包含特定于该数据集的国家/地区的 A 列匹配。
- 然后将数据表中的最新数据(最右侧的非空白单元格)复制粘贴到主表的适当位置(即乌干达与乌干达匹配)。
- 粘贴的数据还必须在括号中包含它们各自的年份(图中,所有数据恰好来自2016年,但并非总是如此)。
我已经尝试了一些循环来尝试复制上述 IF 函数,但似乎没有什么对我有用。到目前为止,我的尝试使我做到了这一点:
Option Explicit
Sub test()
Dim data As Worksheet
Dim report As Worksheet
Dim finalrow As Integer
Dim finalcol As Integer
Dim rngMatch As Range
Dim i As Integer
Dim countryname As String
Set data = Ark2
Set report = Ark1
countryname = data.Range("A5").Value
report.Range("B2:CC300").ClearContents
data.Select
finalrow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To finalrow
If Cells(i, 1) = countryname Then
Cells(i, 5).Copy
report.Select
Range("B300").End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats
data.Select
End If
Next i
report.Select
End Sub
这里有很多缺陷,并不能解决我的问题。任何人都可以为我指出正确的方向吗?
感谢您的宝贵时间。
【问题讨论】:
-
搜索一下避免在vba中使用select...
-
请edit您的问题标题为描述问题或问题的内容。这不是一个社交网站。标题应该足够清晰和具有描述性,以便对正在扫描搜索结果列表的站点的未来用户有意义。在进行编辑时,您还可以将问题从 我需要一个宏 更改为 这是我编写的代码。这是我在使用该代码时遇到的具体问题,这是我要问的与它相关的具体问题。 请参阅 How to Ask 和 minimal reproducible example。
-
谢谢你,肯,我很欣赏你的评论 - 希望我的编辑能把事情弄清楚。
-
这个问题太宽泛,不够具体。考虑将其删除并将其分解成更小的部分,然后再将其重新发布到您准确指出卡在哪里的部分中。请务必阅读
Ken White在他的评论中发布链接的最小、完整和可验证的示例。