У меня есть 2 вопроса, первый из них касается формулы excel, которую я не могу реплицировать в VBA, хотя я использовал макрос записи для извлечения формулы, второй - потому что я не мог решить мой первый вопрос и об эффективности кода: основном в клетке П2 я кладу формулу первенствовать:Альтернатива использованию цикла для ускорения работы кода
IF=(P2="LDN";"UK;IF(P2="MAD";"SPAIN"
IF(P2="PRA";"CZECH REPUBLIC";"")))))))))
им делать это для связки стран.
, а затем я выполняю назначение ячейки автозаполнения в своей второй строке до последней строки с данными на моем листе, чтобы получить результат. Основная проблема заключается в том, что в excel он хорошо работает, но при кодировании в VBA с помощью vba-рекордера у меня есть ошибка в приведенном ниже коде. хотя я только что скопировал вставку результата vba-рекордера. Пожалуйста, найдите код ниже.
i = Range("A:A").Find("*", [A1], xlValues, xlWhole, xlByRows, xlPrevious).Row
Range("AR2").Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[-28]=""LDN"",""UK"",IF(RC[-28]=""MAD"",""SPAIN"",IF(RC[-28]=""STO"",""SWEDEN"",IF(RC[-28]=""DUB"",""IRELAND"",IF(RC[-28]=""SAO"",""BRASIL"",IF(RC[-28]=""PAR"",""FRANCE"",IF(RC[-28]=""TOR"",""CANADA"",IF(RC[-28]=""TOK"",""JAPAN"",IF(RC[-28]=""ZUR"",""SWITZERLAND"",IF(RC[-28]=""HKG"",""HONG KONG"",IF(RC[-28]=""HEL"",""FINLAND"",IF(RC[-28]=""MIL"",""ITALY"",IF(R"& _
""FRA"",""GERMANY"",IF(RC[-28]=""COP"",""DANEMARK"",IF(RC[-28]=""BRU"",""BELGIUM"",IF(RC[-28]=""AMS"",""NETHERLANDS"",IF(RC[-28]=""SIN"",""SINGAPORE"",IF(RC[-28]=""SEO"",""SOUTH KOREA"",IF(RC[-28]=""OSL"",""NORWAY"",IF(RC[-28]=""LIS"",""PORTUGAL"",IF(RC[-28]=""NYK"",""USA"",IF(RC[-28]=""VIE"",""AUSTRIA"",IF(RC[-28]=""LUX"",""LUXEMBOURG"",IF(RC[-28]=""JOH"",""SOUTH AF"& _
"(RC[-28]=""MEX"",""MEXICO"",IF(RC[-28]=""SYD"",""AUSTRALIA"",IF(RC[-28]=""TAI"",""TAIWAN"",IF(RC[-28]=""VAR"",""POLAND"",IF(RC[-28]=""BUD"",""HUNGARY"",IF(RC[-28]=""IST"",""TURKEY"",IF(RC[-28]=""BAN"",""INDIA"",IF(RC[-28]=""MOS"",""RUSSIA"",IF(RC[-28]=""TEL"",""ISRAEL"",IF(RC[-28]=""KUA"",""MALAYSIA"",IF(RC[-28]=""ATH"",""GREECE"",IF(RC[-28] =""PRA"",""CZECH REPUBLIC"& _
"))))))))))))))))))))))))))))))))))"
Range("AR2").Select
Selection.AutoFill Destination:=Range("AR2:AR" & i)
Как работал код выше я попытался техника его подводит сделать это в VBA с помощью Loop, однако я обнаружил, что он принимает возрастов, чтобы получить результат, как у меня есть почти 20k строк .... 5мин до процесса insteand мгновенной результат с формулой первенствовать: код моего цикла здесь:
For j = 2 To i
If Range("P" & j) = "AMS" Then Range("AR" & j) = "NETHERLANDS"
If Range("P" & j) = "ATH" Then Range("AR" & j) = "GREECE"
If Range("P" & j) = "BAN" Then Range("AR" & j) = "INDIA"
If Range("P" & j) = "BRU" Then Range("AR" & j) = "BELGIUM"
If Range("P" & j) = "BUD" Then Range("AR" & j) = "HUNGARY"
If Range("P" & j) = "COP" Then Range("AR" & j) = "DANEMARK"
.
.
.
.
.
If Range("P" & j) = "VAR" Then Range("AR" & j) = "POLAND"
If Range("P" & j) = "VIE" Then Range("AR" & j) = "AUSTRIA"
If Range("P" & j) = "ZUR" Then Range("AR" & j) = "SWITZERLAND"
Next j
Если первенствовать formulat не работает в VBA, как я могу код эффективным и быстрым способом, чтобы получить те страны, по крайней мере, 20k строк без необходимости ждать и получить результат почти мгновенно, как для режима автоматической заливки формулы excel.
Большое спасибо оптоволоконный ryour помощь Оливье
Точно, что я собирался положить вниз – Tom
Это работает в краткосрочной перспективе, но недостатком является то, что все коды городов и названия стран жестко закодированы! –
@ Jean-FrançoisCorbett Я считаю, что реальным недостатком такого подхода является количество итераций и строк кода. – 2014-08-28 11:07:46