Глядя, чтобы зациклить макрос, который я записал, пропуская строки и заканчивая на основе условия

385
plshelpmewithexcel

Извиняюсь за неосведомленный вопрос, но я искал макросы все утро, чтобы помочь мне с задачей, которую я выполняю, и я не нашел ответы, которые мне нужны, с помощью поиска в Google. Я использую Windows 10 и Excel 2016. Вот макрос, который я записал:

Sub biweekly() ' ' biweekly Macro ' ' Keyboard Shortcut: Ctrl+w ' Rows("53:53").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Range("A52:C52").Select Selection.Cut Destination:=Range("A53:C53") Range("M52").Select Selection.Cut Destination:=Range("M53") Range("D53").Select ActiveCell.FormulaR1C1 = "=R[-2]C+R[-1]C" Range("D53").Select Selection.Copy Range("E53:L53").Select ActiveSheet.Paste Range("D53:L53").Select Application.CutCopyMode = False Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Rows("51:52").Select Application.CutCopyMode = False Selection.Delete Shift:=xlUp Range("A54").Select End Sub 

По сути, я объединяю еженедельные строки в две недели. Я делал это до того, как использовал сводные таблицы и getpivotdata, но в этот раз я надеялся на более элегантное решение. Я хотел бы, чтобы макрос зацикливался после его завершения, перемещаясь вниз на 3 строки, чтобы работать на следующей паре недель после этого (поэтому в этом примере, если новая строка, которую я создал, теперь является строкой 51 после удаления отдельных еженедельных строк, я бы как бы перейти к строке 54 и вставить новую строку над ней, чтобы начать работу над парами строк недели 52 и 53).

Я не знаю, как зациклить макрос, чтобы он спрыгивал строки в каждом цикле. Я также хотел бы сделать макрос остановленным условно, например, при изменении значения в столбце А (у меня есть большой лист, отсортированный в алфавитном порядке с именами, содержащими данные раз в две недели, и я хотел бы, чтобы макрос останавливался в конце каждого имя, чтобы я мог настроить объединение периода оплаты и запустить его снова для нового имени). В качестве альтернативы, знание того, как заставить его работать определенное количество раз (скажем, 30), было бы хорошей альтернативой.

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

1

1 ответ на вопрос

0
scenography

Некоторая помощь с циклами в том, как повторять задачи с кодом VBA с помощью циклов . Самый простой вид цикла будет For i = 1 to 30в начале и Next iв конце.

Если у вас есть другие вопросы, попробуйте свойство Offset :

  • Чтобы выбрать ячейку, которая находится на три строки ниже текущей ячейки,
    Selection.Offset(3, 0).Select

  • Чтобы остановить макрос, если ячейка отличается от ячейки тремя строками выше,
    If Selection.Value <> Selection.Offset(-3, 0).Value Then Exit Sub

Запись макроса - отличное начало. Когда вы лучше познакомитесь с кодом VBA, вы, вероятно, объедините строки, которые заканчиваются .Selectи начинаются с Selection..

Похожие вопросы