Повторяющаяся формула с возрастающей ссылкой на ячейку - PullRequest
1 голос
/ 05 июня 2019

Итак, я построил формулу с Абсолютными ссылками на ячейки и хотел повторить ту же формулу до 3000 ячеек, каждая из которых ссылается на ячейки приращения. (1-я формула относится к ячейке $ A $ 1, 2-я формула относится к $ A $ 2) Я знаю, что я мог бы легко сделать это, не ссылаясь на точные ячейки и маркер заполнения, и в настоящее время это так, как он настроен, однако существует очень большое количество люди, которые работают в этой электронной таблице с плохими манерами Excel и регулярно удаляют строки и ячейки или копируют и вставляют, что нарушает формулы.

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

Сначала я построил макрос, который заполняет 20 ячеек формулой, но он не настраивал формулу на основе активной ячейки. (Всегда вводился с диапазоном $ A $ 1: $ A $ 20, а не $ A $ 21: $ 40 $, когда начинал дальше). Я изменил макрос на цикл, но он выглядит со всеми формулами, ссылающимися на $ A $ 1, а не на обновление.

Макрос, настроенный для цикла, выглядит следующим образом:

Sub HDDatesRef()

ActiveCell.Select
ActiveCell.FormulaR1C1 = "=IF(AND(HD!R1C1>0,ISBLANK(HD!R1C4)),HD!R1C1,""n/a"")"
ActiveCell.Offset(1, 0).Range("A1").Select

Loop Until ActiveCell.Value = ""

End Sub     

Любая и вся помощь в выяснении этого очень поможет. Прямо сейчас у меня также есть доступ к Liknedin Learning, поэтому, если есть какие-то предложения по курсам, я должен изучить их, чтобы понять, что мне нужно сделать, это поможет.

Ответы [ 2 ]

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

Вы можете сделать это без зацикливания, Excel достаточно умен, чтобы знать, что вы хотите наращивать.

В качестве примера запустите это на новом листе:

Sub ShowIncremental()
    Range("A1:A10").Formula = "=Row(A1)"
    Range("B1:B10").Formula = "=A1*2"
    Range("C1:C10").Formula = "=sum(B$1:B1)"
End Sub

Обратите внимание на формулы, созданные в A1: C10. Обратите внимание, что Excel увеличил их, хотя код ничего не сказал, за исключением случая, когда мы абсолютировали B $ 1.

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

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

Объект приложения Excel имеет функцию с именем ConvertFormula , которую можно использовать для изменения формулы между ссылочными стилями (A1 или R1C1) и указания, должны ли строки и столбцы быть относительными или абсолютными ссылками.

Если вы начнете с создания формулы в каждой строке в качестве относительной ссылки, то вы можете использовать ConvertFormula, чтобы превратить ее в абсолютную ссылку.Единственным ограничением является то, что формула не может быть длиннее 255 символов.

Адаптация вашего кода и следование советам в Как избежать использования Select в Excel VBA дает нам:

Option Explicit

Sub HDDatesRef()

Dim r As Range

' If we know the cell address we want to start in then we could use that directly
' e.g. Set r = Worksheets("HD").Range("E1")
Set r = ActiveCell

Do
    ' The With block just saves us typing r.FormulaR1C1 multiple times
    With r
        ' Don't know what your relative formula would be. I've assumed that we are
        ' working in column E but adjust as appropriate
        .FormulaR1C1 = "=IF(AND(HD!RC[-4]>0,ISBLANK(HD!RC[-1])),HD!RC[-4],""n/a"")"

        ' Take the formula we already have which is in R1C1 format, keep it in R1C1 format,
        ' change it from a relative reference based on cell r to an absolute reference
        ' and make that the new formula for this cell
        .FormulaR1C1 = Application.ConvertFormula(.FormulaR1C1, xlR1C1, xlR1C1, xlAbsolute, r)
    End With

    ' Move down one row
    Set r = r.Offset(1, 0)
Loop Until r.Value = ""

End Sub

Если вы с ними не знакомы.вот ссылки для Option Explicit и With ... Окончание

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