2015-11-03 2 views
0

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

Sub yTest01() 
    For i = 10 To 72 Step 2 
     Cells(i, 1).EntireRow.Insert 
    Next i 
End Sub 

Он добавляет новую строку каждый ряд. Тем не менее, я хочу добавить по пять строк. Я пробовал следующее, но он не работает

Sub yTest01() 
    For i = 10 To 72 Step 2 
     Cells(i, 1).EntireRow.Insert 
     Cells(i, 1).EntireRow.Insert 
     Cells(i, 1).EntireRow.Insert 
     Cells(i, 1).EntireRow.Insert 
     Cells(i, 1).EntireRow.Insert 
    Next i 
End Sub 

Любые идеи, что я могу сделать?

ответ

2

Я предполагаю, что вам нужна одна строка существующих данных, а затем 5 строк пробела. Попробуйте следующее

Sub yTest01() 
For i = 72 To 10 Step -1 
    Cells(i, 1).EntireRow.Insert 
    Cells(i, 1).EntireRow.Insert 
    Cells(i, 1).EntireRow.Insert 
    Cells(i, 1).EntireRow.Insert 
    Cells(i, 1).EntireRow.Insert 
Next i 
End Sub 

если то, что вы хотите, два ряда данных, то пять пустых строк затем изменить шаг до -2

При добавлении или вычитании строки, лучше практика петли в обратном направлении.

+2

Чтобы повторить то, что @ Scott-Craner сказал: «При добавлении или вычитании строк лучше всего переходить назад». Это связано с тем, что, когда у вас есть 10 (например) предметов и добавьте 1, теперь у вас есть 11 предметов. Таким образом, пункт 2 становится пунктом 3, 3 становится 4 и т. Д. При чередовании двух столбцов данных (столбец «2-й» - это пустые строки в вашем случае), подумайте о молнии и начните снизу. – Tim

0

Почему это не работает и почему вы используете шаг 2? Вы можете переместить i 5 постингов после перемещения строк?

Sub yTest01() 
Dim i As Integer 
    For i = 10 To 72 Step 1 
     Cells(i, 1).EntireRow.Insert 
     Cells(i, 1).EntireRow.Insert 
     Cells(i, 1).EntireRow.Insert 
     Cells(i, 1).EntireRow.Insert 
     Cells(i, 1).EntireRow.Insert 
     i = i + 5 
    Next i 
End Sub 
+0

Это не сработает. Подумайте об этом, да, вы добавите пять строк, а затем перейдете к следующей строке, только если вы добавите пять строк, тогда ваши данные пройдут 72-й строкой, к тому времени, когда вы доберетесь до 72-й строки в вашем коде, где для петлевые остановки, более 80% ваших данных будут ниже 72-й линии и не будут разделены. –

+0

вы правы, я не думал, что это через – Wouter

2

Как лучшая практика, я стараюсь сократить количество раз, когда VBA должен связываться через границу с Excel.

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

For i = 0 To 62 * 6 Step 6 
    [10:10].Resize(5).Offset(i).Insert 
Next 

Примечание: значения итерации 0 и 62 являются просто номерами строк ОП, скорректированными так, чтобы начинаться с нуля.

+0

@ScottCraner Посмотрите. –

+0

Мне всегда нравится видеть ваши ярлыки. Я здесь, чтобы узнать, как помочь. Я был бы в порядке, если @Ahmed изменил это, чтобы быть правильным ответом. –

+0

@ScottCraner Спасибо за эти добрые слова. Если вам интересно, вот хорошая возможность обучения: http://stackoverflow.com/questions/33489619/how-to-get-a-recalculated-copy-of-a-complex-array/33490448#33490448 –

Смежные вопросы