Замена нескольких текстов в формуле Excel с использованием VBA - PullRequest
0 голосов
/ 30 ноября 2018

Доброе утро,

Я ищу некоторую помощь в том, как правильно заменить несколько критериев в формуле с использованием VBA - Excel.У меня есть пользовательская форма в начале макроса, где пользователь выберет месяц, для которого он хочет запустить отчет.Я использую отчет за предыдущий месяц в качестве шаблона и мне нужно обновить формулу, чтобы отразить соответствующие месяцы соответственно.Я хочу, чтобы формула была применена ко всему столбцу данных.Я перемещаю каждый месяц в формуле на один месяц вперед, чтобы получить данные за предыдущие четыре (4) месяца.

Например: я запускаю отчет для AUG.Я буду использовать отчет JUL, который был запущен в предыдущем месяце в качестве шаблона.

- Формула, которая в настоящее время находится в отчете: = сумма ('18 июля! $ 19 $ +' 18 июня '! $ E $ 19 +' MAY18 '! $ E $ 19 +' APR18 '! $ E $ 19) / B6

-Я хотел бы обновить формулу до: = sum ('AUG18'! $ E $ 19 + 'JUL18'! $ E $ 19 + 'JUN18'! $ E $ 19 + 'MAY18'!$ E $ 19) / B6

Код, который у меня есть на данный момент:

If FormMonth.Value = "AUG" Then
     Columns("D:D").Select
 Selection.Replace What:="JUL", Replacement:="AUG", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
 Selection.Replace What:="JUN", Replacement:="JUL", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
 Selection.Replace What:="MAY", Replacement:="JUN", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
 Selection.Replace What:="APR", Replacement:="MAY", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
 Selection.Replace What:="MAR", Replacement:="APR", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
 Selection.Replace What:="FEB", Replacement:="MAR", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
End If

- Конечный результат выглядит следующим образом: = сумма ('AUG18'! $ E $ 19 + 'AUG18'! $ E $ 19 + 'JUN18'! $ E $ 19 + 'MAY18'! $ E $ 19) / B6

Первые и последние два месяца в формуле обновляются корректно, однако JUN (предполагается, что обновится)в июль) прыгает в августе.Это похоже на то, как если бы оно продолжало циклически проходить, пока не достигнет выбранного месяца формы.

Есть какие-нибудь идеи относительно того, почему это может быть?Все еще акклиматизируется с VBA, поэтому код может быть не самым красивым.

Заранее благодарен за помощь!

Дерек

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

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

формулы, которые вам понадобятся:

'= TEXT (EOMONTH (B2, -1), "MMM")) '= СУММА (НЕПОСРЕДСТВЕННО (B5 & "! A1"), НЕПОСРЕДСТВЕННО (B6 & "! A1"), НЕПОСРЕДСТВЕННО (B7 & "! A1"))

enter image description here

0 голосов
/ 30 ноября 2018

Вы можете попробовать что-то вроде этого, чтобы уменьшить количество повторяющегося кода.Также удален экземпляр .Select

Sub Test()

Dim Arr1: Arr1 = Array("JUL", "JUN", "MAY", "APR", "MAR", "FEB")
Dim Arr2: Arr2 = Array("AUG", "JUL", "JUN", "MAY", "APR", "MAR")

Dim i As Long

With ThisWorkbook.Sheets("Sheet1").Range("D:D")
    For i = LBound(Arr1) To UBound(Arr2)
        .Replace What:=Arr1(i), Replacement:=Arr2(i), LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Next i
End With

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...