вот зачем такие костыли, если есть прямые функции? cstr()
еще вопрос по коду - в массив isx забираются три столбца (n:p), а используете 2
не понял также зачем заносить в словарь порядковый номер.. почему не сразу нужную пару значений из первого и второго столбцов?
ну и если есть сомнения в типе данных, то лучше при занесениии в словарь преобразовывать явно к нужному типу
на последок
- результат можно записывать в тот же массив
вообще я бы сделал так:
Код |
---|
Sub qqq_slan()
Dim i&, isx()
isx = Range([n1], Cells(Rows.Count, 15).End(xlUp))
With CreateObject("Scripting.Dictionary")
For i = 1 To UBound(isx) ' последняя строка исх.таблицы
.Item(CStr(isx(i, 1))) = isx(i, 2) ' заносим в словарь код
Next i
isx = [a1].CurrentRegion.Value ' диапазон, который ищем
For i = 1 To UBound(isx)
isx(i, 1) = .Item(CStr(isx(i, 1)))
Next
End With
[G1].Resize(UBound(isx)) = isx
End Sub
|
но если собираетесь обращаться к уже готовому словарю неоднократно и с повторяющимися(возможно) запросами, то лучше использовать exists, как у вас и было - именно для этого случая и так сойдет