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

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

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

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

23
задан plshelpmewithexcel
17.12.2022 18:08 Количество просмотров материала 2868
Распечатать страницу

1 ответ

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

0
отвечен scenography 2022-12-19 01:56

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх