Перемещение значений ячеек и удаление строк - PullRequest
0 голосов
/ 18 февраля 2019

Мне нужно переместить некоторые данные, но мой текущий код (начинался с vba несколько недель, поэтому, пожалуйста, будьте доброжелательны :)) очень медленный.

Можете ли вы дать мне несколько советов?

Я хочу к этому ...

I want to to from this...

... к этому ...

...to this...

... и затем это.

...and then this.

Do While Not Listado.Cells(rowquery, colquery) = ""
        Listado.Cells(rowquery, colquery).Offset(0, 2) = Listado.Cells(rowquery, colquery).Offset(1, 1)
        Listado.Cells(rowquery, colquery).Offset(0, 3) = Listado.Cells(rowquery, colquery).Offset(2, 1)
        Listado.Cells(rowquery, colquery).Offset(1, 1).Clear
        Listado.Cells(rowquery, colquery).Offset(2, 1).Clear
        rowquery = rowquery + 3
Loop

Спасибо!

1 Ответ

0 голосов
/ 18 февраля 2019

Это медленно, потому что вы постоянно получаете доступ к рабочему листу.Могут даже быть формулы, которые ссылаются на ячейки, перемещаемые и очищаемые.

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

dim i as long, arr as variant

arr = Listado.databodyrange.value2

for i=lbound(arr, 1) to ubound(arr, 1) step 3
    arr(i, 3) = arr(i+1, 2)
    arr(i, 4) = arr(i+2, 2)
    arr(i+1, 2) = vbnullstring
    arr(i+2, 2) = vbnullstring
next i

Listado.databodyrange = arr
...