РЕДАКТИРОВАТЬ - Как указал JvdV, вставка копий на самом деле не нужна, поэтому вместо этого я изменил код на report.Sheets[...].Value = data.Sheets[...].Value
, что намного, намного быстрее.Еще раз спасибо, JvdV.
Итак, с помощью JvdV я смог собрать макрос, который прекрасно работает для меня.
Sub extract()
Dim RNG1 As Range, CL1 As Range
Dim LR1 As Long, LR2 As Long, LC As Long
Set report = Workbooks("Main.xlsm")
Set data = Workbooks("API_NE.EXP.GNFS.CD_DS2_en_excel_v2_9944773.xls")
report.Sheets("Report").Activate
data.Sheets("Data").Activate
LR1 = report.Sheets("Report").Cells(Rows.Count, 1).End(xlUp).Row
LR2 = data.Sheets("Data").Cells(Rows.Count, 1).End(xlUp).Row
RC2 = report.Sheets("Report").Cells(LR1, Columns.Count).End(xlToLeft).Column + 1
RC3 = RC2 + 1
Set RNG1 = data.Sheets("Data").Range(Cells(1, 1), Cells(LR2, 1))
report.Sheets("Report").Cells(1, RC2).Value = data.Sheets("Data").Cells(5, 3).Value
report.Sheets("Report").Cells(1, RC3).Value = "Year"
For X = 2 To LR1
With RNG1
Set CL1 = .Find(What:=report.Sheets("Report").Cells(X, 1).Value, LookIn:=xlValues, LookAt:=xlWhole)
If Not CL1 Is Nothing Then
LC1 = data.Sheets("Data").Cells(CL1.Row, Columns.Count).End(xlToLeft).Column
If IsNumeric(data.Sheets("Data").Cells(CL1.Row, LC1)) Then
report.Sheets("Report").Cells(LR1, RC2).End(xlUp).Offset(1, 0).Value = data.Sheets("Data").Cells(CL1.Row, LC1).Value
Else
report.Sheets("Report").Cells(LR1, RC2).End(xlUp).Offset(1, 0).Value = "N/A"
End If
If IsNumeric(data.Sheets("Data").Cells(CL1.Row, LC1)) Then
report.Sheets("Report").Cells(LR1, RC3).End(xlUp).Offset(1, 0).Value = data.Sheets("Data").Cells(4, LC1).Value
Else
report.Sheets("Report").Cells(LR1, RC3).End(xlUp).Offset(1, 0).Value = "N/A"
End If
End If
End With
Next X
report.Sheets("Report").Activate
With Worksheets("Report").Columns(RC2)
.NumberFormat = "0.00"
.Value = .Value
End With
With Worksheets("Report").Columns(RC3)
.NumberFormat = "0"
.Value = .Value
End With
End Sub
Этот макроспозволяет извлекать последние данные из временных рядов, а также соответствующий год точки данных.В этом специфическом макросе вы можете дублировать данные по любой стране из любой таблицы, предоставленной Всемирным банком.Все, что вам нужно сделать, это:
- подключить имя вашей рабочей книги (например, «Main.xlsm»), а также имя рабочей книги из Всемирного банка (например, «API_NE»)..EXP.GNFS.CD_DS2_en_excel_v2_9944773.xls ")
- Назовите страны, которые вас интересуют, в столбце A собственной рабочей книги.
- Пусть макрос запустится
- Подключите новыйРабочая тетрадь от Всемирного банка
- Пусть макрос запустится снова
- и т. д.
Макрос не будет перезаписывать предыдущие данные, а скорее будет дублировать точки данных и выборочные годы всамые правые столбцы.Пример макроса в действии можно увидеть ниже.
Пример макроса