1

Извиняюсь за неосведомленный вопрос, но я искал макросы все утро, чтобы помочь мне с задачей, которую я выполняю, и я не нашел ответы, которые мне нужны, с помощью поиска в 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

Некоторая помощь с циклами в том, как повторять задачи с кодом 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. ,

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .