Excel VBA - добавить по одному в каждую ячейку, на которую есть ссылки, при запуске макроса - PullRequest
0 голосов
/ 04 июля 2018

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

То, что я пытаюсь сделать, - это добавлять единицу к тому, на что ссылается моя формула, каждый раз при запуске макроса. Например:

В настоящее время формула =100*((Q$179/Q$167)-1)

При запуске я бы хотел, чтобы оно было =100*((Q$180/Q$168)-1)

Я должен сделать это для нескольких формул. Есть ли простой способ сделать это с помощью макроса?

Заранее большое спасибо

Ответы [ 3 ]

0 голосов
/ 04 июля 2018

Лично я бы использовал RegEx для достижения этой цели. Следующее будет увеличивать каждую строку ячеек на 1 в вашей формуле. Это должно также работать на столбцах, отличных от Q, а также

Option Explicit
Sub IncrementFormula()
    Dim tmpFormula As String
    Dim RegEx As Object
    Dim Match, SubMatch

    tmpFormula = "=100*((Q$179/Q$167)-1)"

    Set RegEx = CreateObject("vbscript.regexp")
    With RegEx
        .Global = True
        .Pattern = "(?:[A-Z]{1,})(?:\$|)([0-9]{1,})"

        If .test(tmpFormula) Then
            For Each Match In .Execute(tmpFormula)
                For Each SubMatch In Match.submatches
                    tmpFormula = Replace(tmpFormula, Match, Replace(Match, SubMatch, vbNullString) & CLng(SubMatch) + 1)
                Next SubMatch
            Next Match
        End If
    End With
    MsgBox tmpFormula
End Sub

Используя приведенную выше формулу, вы получите =100*((Q$180/Q$168)-1)

0 голосов
/ 04 июля 2018

Другой подход заключается в использовании OFFSET в вашей формуле

Предполагая, что формула в Q185

тогда:

=100*((Q$180/Q$168)-1)

становится:

 =100*((OFFSET(Q185,-5,0)/OFFSET(Q185,-17,0)-1))

Когда вы вставляете строки в нижней части таблицы (и над формулами), формула и ячейка, к которой она относится, также будут перемещаться вниз

0 голосов
/ 04 июля 2018

Если вы хотите, чтобы оно сохранялось при закрытии рабочей книги, вам необходимо сохранить свой номер где-нибудь на рабочем листе. Скажем, это в ячейке (1,1) листов (2), вы можете использовать

    dim incVal as integer
    incVal = cint(Sheets(2).Cells(1,1))+1
    Sheets(2).Cells(1,1) = incVal
    dim formula as string
    formula = "=100*((Q$" & incVal & "/Q$" & (incVal-12) & ")-1)"

Затем просто установите формулу нужной ячейки на эту формулу. Надеюсь это поможет.

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