Есть ли причина, по которой добавление значения в столбец может увеличить время выполнения? - PullRequest
0 голосов
/ 19 апреля 2019

Я создаю составной ключ из данных в каждой строке, а затем добавляю его в словарь, а также в конечный столбец строки.

По какой-то причине, когда просто добавляешь в столбец или просто добавляешь в словарь, это работает, но когда я делаю и то и другое, для запуска требуется вечность. Разве добавление значения в конец столбца (выделено жирным шрифтом ниже) не должно очень незначительно увеличивать время?

Dim unique_key

Dim sht
Set sht = ThisWorkbook.Worksheets("data")

Dim colNum
colNum = sht.Cells(2, sht.Columns.Count).End(xlToLeft).Column

For i = 2 To Rows.Count
    unique_key = Concatenate(CLng(i), id_cols)
    **Cells(CLng(i), colNum).Value = unique_key**

    If dict.Exists(unique_key) Then
        GoTo continue
        Else
        dict.Add unique_key, Cells(i, 10)
    End If
continue:
Next i

1 Ответ

0 голосов
/ 19 апреля 2019

Попробуем обновить ваш код:

Option Explicit
Public id_cols 'so you can use it between sub routines

'not sure if the below is part of a function or sub, so not listing

Dim unique_key as string, sht as worksheet, i as long, colNum as long, dict as scripting.dictionary
set dict = NEW scripting.dictionary
Set sht = ThisWorkbook.Worksheets("data")
with sht
colNum = .Cells(2, .Columns.Count).End(xlToLeft).Column
For i = 2 To .Rows.Count
    unique_key = i & id_cols
    .Cells(i, colNum).Value = unique_key
    If NOT dict.Exists(unique_key) Then dict(unique_key) = .Cells(i, 10)
Next i

Пара вещей ...

  • вы хотите поместить значение в последний столбец (colNum) или последний столбец +1?

  • что вы делаете со словарем после его создания?

  • Удостоверьтесь, что квалифицировали свои ссылки ... это было бы единственной ошибкой, которую я мог видеть в вашем коде

Кроме того, в зависимости от того, что находится в id_cols, у вас может возникнуть проблема с пониманием ключа.


Edit1:

Понял, я забыл добавить то, что предложил ранее ... & не Concatenate. Обновленный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...