Как скопировать данные из другой рабочей книги в соответствии с полем ввода и координатами ячейки? - PullRequest
0 голосов
/ 21 июня 2019

Я очень плохо знаком с VBA и мне нужна помощь для работы над кодом, который автоматически синтезирует данные из других рабочих книг.

Идея состоит в том, что у меня есть разные файлы для каждого месяца (например, 2019-04), и в каждом файле есть несколько рабочих книг для разных портфелей, с которыми мне нужно иметь дело.

Я хочу синтезировать данные следующим образом: каждая строка представляет портфель, а столбцы представляют данные, которые я хочу скопировать из других файлов. Каждые 7 столбцов относятся к одному конкретному месяцу.

В коде, который у меня есть, я предлагаю пользователю ввести дату портфеля в следующей форме: ГГГГ-ММ; Затем я хочу найти столбец ячейки с этой конкретной датой (эту часть я пока не смог выяснить).

Затем я использую цикл, который открывает каждую книгу, из которой я хочу скопировать информацию.

И, наконец, он будет копировать данные из каждой рабочей книги на основе строки портфеля и столбца даты.

Любая помощь будет принята с благодарностью, так как я только что узнал о VBA, поэтому я не очень хорошо знаком со всеми хитростями и советами.

Вот что у меня есть (обратите внимание, что я не ввел все 7 значений, которые хочу скопировать):

Sub StressTest()

Dim index As Integer
Dim dateColumn As Integer
Dim portfolioName As Variant
Dim portfolioDate As Variant

portfolioDate = InputBox("Please enter date under the following form : YYYY-MM", "Date at the time of Stress Test", "Type Here")
For index = 3 To 39

portfolioName = Range("A" & index & " ").Value

Workbooks.Open "G:\Risk\Risk Reports\VaR-Stress test\" & portfolioDate & "\" & portfolioName & ""

Cells(index, dateColumn).Value = Workbooks("" & portfolioName & "").Worksheets("VaR Comparison").Range("B19") / Workbooks("" & portfolioName & "").Worksheets("Holdings - Main View").Range("E11")

Cells(index, dateColumn + 1).Value = (Cells(index, dateColumn) - Cells(index, dateColumn + 6)) / Cells(index, dateColumn + 6)

Cells(index, dateColumn + 2).Value = Workbooks("" & portfolioName & "").Worksheets("Holdings - Main View").Range("E11")

Cells(index, dateColumn + 3).Value = (Cells(index, dateColumn + 2) - Cells(index, dateColumn + 9)) / Cells(index, dateColumn + 9)



Next index

End Sub

1 Ответ

0 голосов
/ 21 июня 2019

Существует несколько способов найти столбец с соответствующим заголовком.Для простоты, вот подход грубой силы.Предполагается, что активным листом является тот, который имеет заголовки, и что они находятся в первом ряду.Используйте «datecolumn = matchheader (portfolioiodate)», чтобы получить номер столбца

Function MatchHeader(strSearch As String) As Long
Dim myRight As Long, Colcount As Long
myRight = ActiveSheet.Cells(1, ActiveSheet.Columns.Count).End(xlToLeft).Column
For Colcount = 1 To myRight
    If ActiveSheet.Cells(1, Colcount) = strSearch Then
        MatchHeader = Colcount
        Exit For
    End If
Next Colcount
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...