Как скопировать строку (переменную) и вставить ее в указанную c ячейку (также строку как переменную) с помощью VBA в Excel - PullRequest
0 голосов
/ 14 января 2020

Я изучаю VBA и хочу сократить код, который я написал. Я хочу скопировать строку, которая является переменной, и вставить ее в строку выше, а затем во второй столбец. В идеале, он также вставляет вместе строки (-1,2) и (2,1), так как это неправильная строка в Excel.

Теперь у меня есть следующий код:

Sub Clean()

Dim i As Long
Dim x As Long

For i = 2 To 48987

x = i - 1

If IsNumeric(Cells(i, 1)) = True Then

'Do nothing

Else

    Cells(x, 2) = Cells(x, 2) + Cells(i, 1)
    Cells(x, 3) = Cells(i, 2)
    Cells(x, 4) = Cells(i, 3)
    Cells(x, 5) = Cells(i, 4)
    Cells(x, 6) = Cells(i, 5)
    Cells(x, 7) = Cells(i, 6)
    Cells(x, 8) = Cells(i, 7)
    Cells(x, 9) = Cells(i, 8)
    Cells(x, 10) = Cells(i, 9)
    Cells(x, 11) = Cells(i, 10)
    Cells(x, 12) = Cells(i, 11)
    Cells(x, 13) = Cells(i, 12)
    Cells(x, 14) = Cells(i, 13)
    Cells(x, 15) = Cells(i, 14)
    Cells(x, 16) = Cells(i, 15)
    Rows(i).Delete
End If

Next i

End Sub

1 Ответ

0 голосов
/ 14 января 2020

Я предполагаю, что вы хотели бы сократить повторяющийся бит Cells(x, 3) = Cells(i, 2). Это можно легко сделать, оставив первый расчет, добавив первую ячейку ко второй, и скопировав оставшуюся часть строки следующим образом:

Sub Clean2()

Dim i As Long

For i = 2 To 48987

If Not IsNumeric(Cells(i, 1)) = True Then

    Cells(i - 1, 2) = Cells(i - 1, 2) + Cells(i, 1)
    Range(Cells(i, 2), Cells(i, 15)).Copy Range(Cells(i - 1, 3), Cells(i - 1, 16))
    Rows(i).Delete

End If

Next i

End Sub

Обратите внимание, что нет необходимости иметь переменную x, as i-1 работает так же хорошо и сводит на нет необходимость для любого, кто читает ваш код, искать, что делает переменная x. Но это может быть личное предпочтение.

В качестве альтернативы вы можете добавить еще один l oop, но это может быть не так быстро (не проверено)

    For j = 2 To 15
        Cells(i - 1, j + 1) = Cells(i, j)
    Next j
...