2015-10-25 4 views
3

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

Проблема в том, что она висит, и мне нужно повторно запустить Excel, и я не уверен, почему.

Sub Button2_Click() 
Dim i As Long 
For i = 2 To Rows.Count 
    Cells(i, 4).Formula = "=B" & i & "+6*3600000/86400000+25569" 
Next i 
End Sub 

Так что это? Я меняю четвертый столбец на лучшее время, потому что то, что у меня есть в столбце B, является эпохой, и это формула, которую я использую, она работает с моим делом, если я пытался один за другим, но по какой-то причине он выиграл ' т в целом. Я не уверен, что сделано неправильно? Но я был бы признателен за вашу помощь.

ответ

2

Письмо в ячейки один за другим очень медленно.

Написание формул один за другим медленнее, потому что каждый из них должен быть оценен до того, как Excel примет их в виде формул.

Выполнение этого миллиона раз может буквально заморозить Excel.

Решение записать их все в одном кадре (без петель):

Sub Button2_Click() 
    [d2:d1048576] = "=B2+6*3600000/86400000+25569" 
End Sub 
+0

Спасибо, это работает волшебно. – AliAlghamdi

-1

'Другой способ сделать массовый расчет с помощью копирования и вставки метод. Лучше преобразовать столбцы в значения, чтобы лист не вычислялся снова и снова. Это помогает предотвратить возникновение проблем с листом.

Sub Button2_Click() 

    Range("D2").Formula = "=b1" & "+6*3600000/86400000+25569" 

    Range("D2").Copy 
    Range("D2:d1048576").PasteSpecial xlValues 

    Application.CutCopyMode = False 

    Range("D:D").Value = Range("D:D").Value 

    End Sub 
+0

Ваша предпосылка не обязательно верна. Кроме того, вам следует избегать использования буфера обмена пользователя. И нет никакой точки в вашей последней строке кода. –

+0

Отсутствие заметной разницы во времени. – AliAlghamdi

+0

@excel hero Конечно. – newjenn