2017-01-29 3 views
2

Мне интересно, есть ли более быстрый способ скопировать и вставить данные из одного столбца листа в другой столбец рабочего листа. Это пример кода, который у меня есть, и он работает медленно, так как он имеет более 10000 строк данных для копирования для каждого столбца, который я копирую. Данные, которые я копирую, не имеют фиксированного диапазона.VBA: Самый быстрый способ скопировать и вставить строки данных

For i = 2 To lastrow 
    ws.Cells(i, "AG") = bl.Cells(i, "F") 
    ws.Cells(i, "AH") = bl.Cells(i, "G") 
    ws.Cells(i, "AB") = bl.Cells(i, "N") 
    ws.Cells(i, "AC") = bl.Cells(i, "R") 
    ws.Cells(i, "BF") = bl.Cells(i, "S") 
    ws.Cells(i, "AA") = bl.Cells(i, "U") 
    ws.Cells(i, "BA") = bl.Cells(i, "X") 
    ws.Cells(i, "BQ") = bl.Cells(i, "AA") 
    ws.Cells(i, "B") = bl.Cells(i, "AB") 
    ws.Cells(i, "A") = bl.Cells(i, "AD") 
    ws.Cells(i, "BW") = bl.Cells(i, "AK") 
    ws.Cells(i, "BH") = bl.Cells(i, "AL") 
    ws.Cells(i, "BR") = bl.Cells(i, "AM") 
    ws.Cells(i, "AL") = bl.Cells(i, "AP") 
    ws.Cells(i, "AP") = bl.Cells(i, "BA") 
    ws.Cells(i, "AQ") = bl.Cells(i, "BB") 
    ws.Cells(i, "AU") = bl.Cells(i, "BC") 
    ws.Cells(i, "AO") = bl.Cells(i, "BK") 
    ws.Cells(i, "AT") = bl.Cells(i, "BO") 
Next i 
+0

попытайтесь дать отзыв, чтобы ответить на вопросы, которые вы разместили на SO. Вы еще не приняли никакого ответа, это повлияет на то, что вы попытаетесь получить помощь в будущем. –

ответ

2

Копирование целые колонны вместо клеток!

ws.Range("AG2:AH" & lastrow) = bl.Range("F2:G" & lastrow) '2 cols at once here 
ws.Range("AB2:AB" & lastrow) = bl.Range("N2:N" & lastrow) '.Value is implicit 

(и т. Д.) Должен быть в 1000 раз быстрее.

Обмен данными между VBA и Excel для CPU очень дорог. Поэтому передача больших блоков является более эффективной.

0

Просто попробуйте:

ws.Range("AG2:AG" & lastrow).Value = bl.Range("F2:F" & lastrow).Value 
ws.Range("AH2:AH" & lastrow).Value = bl.Range("G2:G" & lastrow).Value 
ws.Range("AB2:AB" & lastrow).Value = bl.Range("N2:N" & lastrow).Value 

и так далее для остальных колонок

0

кроме ответов, приведенных выше, которые работали для меня, я опубликовал другой аналогичный вопрос, в котором есть другой ответ от другого пользователя, который, как я думал, должен делиться здесь, чтобы принести пользу другим, оглядывающимся в SO.

https://stackoverflow.com/a/41951959/7483682

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