Попробуем обновить ваш код:
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
. Обновленный.