Я совершенно новичок в VBA, так что эта задача для меня немного сложна, но держу пари, что это легко для вас, ребята.Я пытаюсь создать макрокоманду, которая может автоматически преобразовывать серию дат из текста в формат даты, который Excel может распознать.Это задача, которую я регулярно выполняю, поэтому было бы очень экономно, если бы макрос выполнял ее для меня.По сути, я регулярно скачиваю временные ряды, например, историческую цену акции.Длина временного ряда меняется каждый раз.Затем мне нужно будет преобразовать даты из загруженных данных в формат, который распознает Excel.
Для этого я использую следующий код:
=DATE(RIGHT(B2,4),MONTH("1 "&MID(B2,4,3)),LEFT(B2,2))
вячейка рядом с первой строкой ряда дат.Затем я автоматически заполняю эту формулу до конца ряда.
Я создал макрос, который выполняет эту задачу для меня, используя следующий код:
Sub FacsetDates()
' FacsetDates Macro
' Turn Factset dates into excel format
'
' Keyboard Shortcut: Ctrl+Shift+D
ActiveCell.FormulaR1C1 = _
"=+DATE(RIGHT(RC[-1],4),MONTH(""1 ""&MID(RC[-1],4,3)),LEFT(RC[-1],2))"
Selection.End(xlToLeft).Select
Dim Lastrow As Long
Lastrow = Cells(Rows.Count - 1, ActiveCell.Column).End(xlUp).Row
Selection.End(xlToRight).Select
Selection.AutoFill Destination:=ActiveCell.Range("A1:A" & Lastrow - 1)
ActiveCell.Range("A1:A" & Lastrow - 1).Select
End Sub
Моя проблема заключается в том, что этот код работает, только если ряд дат начинается со строки 2. Еслиесли серия вставлена из строки 1, автоматическое заполнение прервет одну строку, а если серия начинается с строки 3, автоматическое заполнение заполнит одну строку слишком сильно (по сравнению с длиной ряда данных)
Мне нужен макрос, который работает независимо от того, с какой строки начинается ряд данных.Например, я хотел бы, чтобы макрос работал, даже если ряд дат начинается в B10.Я полагаю, что решение состоит в том, чтобы установить ряд данных в виде массива в VBA, а затем выполнить цикл, который манипулирует каждой строкой текста, а затем, наконец, вставить данные в соседний столбец.Я начал создавать следующий код:
Sub FSdate()
Dim arrMarks() As Long
Lastrow = Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row
ReDim arrMarks(1 To Lastrow)
Dim i As Long
For i = LBound(arrMarks) To UBound(arrMarks)
arrMarks(i) = ActiveCell
Next i
, в котором я пытаюсь сначала определить массив и его размер, а затем «скопировать» строку текста из активной ячейки (являющейся первой строкойряд данных), но этот код не работает.Определив массив, я подумал о том, чтобы запустить цикл, использующий функцию DATE сверху, чтобы управлять каждой отдельной записью в массиве.Но мои текущие навыки в VBA здесь не оправдываются, и я просто не знаю, как поступить.
Может кто-нибудь помочь создать такой код?или даже, есть ли у вас, ребята, вклад в альтернативные способы выполнения этой задачи?Вероятно, исходный код можно манипулировать для работы независимо от того, с какой строки начинается ряд данных.
Надеюсь, кто-нибудь сможет и захочет мне помочь!