Есть довольно длинная формула (1580 знаков), которая никак не хочет работать в VBA, даже после обработки макрорекордером – вылетает ошибка 1004.
Формула, вставляемая вручную (есть в файле-примере):
=ЕСЛИ(ИЛИ(ПСТР([@Номер];1;2)="05";ПСТР([@Номер];1;2)="06";ПСТР([@Номер];1;2)="07";ПСТР([@Номер];1;5)="08";ПСТР([@Номер];1;5)="09";ПСТР([@Номер];1;2)="10";ПСТР([@Номер];1;5)="11.32";ПСТР([@Номер];1;4)="17.9";ПСТР([@Номер];1;4)="17.44";ПСТР([@Номер];1;2)="18.50";ПСТР([@Номер];1;2)="18.74";ПСТР([@Номер];1;2)="19.27";ПСТР([@Номер];1;2)="14";ПСТР([@Номер];1;2)="15";ПСТР([@Номер];1;2)="16";ПСТР([@Номер];1;2)="17";ПСТР([@Номер];1;2)="19";ПСТР([@Номер];1;2)="20";ПСТР([@Номер];1;2)="21";ПСТР([@Номер];1;2)="22";ПСТР([@Номер];1;4)="23.50.16";ПСТР([@Номер];1;4)="23.70.20";ПСТР([@Номер];1;4)="23.80";ПСТР([@Номер];1;2)="24";ПСТР([@Номер];1;2)="25";ПСТР([@Номер];1;2)="26";ПСТР([@Номер];1;2)="27";ПСТР([@Номер];1;2)="28";ПСТР([@Номер];1;2)="29";ПСТР([@Номер];1;2)="30";ПСТР([@Номер];1;2)="31";ПСТР([@Номер];1;2)="32";ПСТР([@Номер];1;2)="33";ПСТР([@Номер];1;4)="34.15.17";ПСТР([@Номер];1;4)="35.2";ПСТР([@Номер];1;8)="35.30.1.1";ПСТР([@Номер];1;8)="35.50.12.7";ПСТР([@Номер];1;8)="35.60.13";ПСТР([@Номер];1;8)="35.60.15";ПСТР([@Номер];1;5)="38.31";ПСТР([@Номер];1;7)="38.32.2";ПСТР([@Номер];1;7)="38.32.3";ПСТР([@Номер];1;7)="38.32.7";ПСТР([@Номер];1;5)="42.42.42";ПСТР([@Номер];1;2)="45";ПСТР([@Номер];1;2)="46";ПСТР([@Номер];1;2)="47";ПСТР([@Номер];1;4)="52.1";ПСТР([@Номер];1;2)="56";ПСТР([@Номер];1;7)="70.78.8";ПСТР([@Номер];1;8)="71.80.12";ПСТР([@Номер];1;8)="71.90.14";ПСТР([@Номер];1;4)="75.13";ПСТР([@Номер];1;4)="77.29";ПСТР([@Номер];1;8)="77.39.22";ПСТР([@Номер];1;5)="87.21";ПСТР([@Номер];1;4)="98.25";ПСТР([@Номер];1;5)="96.01";ПСТР([@Номер];1;5)="105.02.98");"Проверка";"-")
И вот как ее записал макрорекордер:
Код |
---|
ActiveCell.FormulaR1C1 = _ "=IF(OR(MID([@Номер],1,2)=""05""," & Chr(10) & "MID([@Номер],1,2)=""06""," & Chr(10) & "MID([@Номер],1,2)=""07""," & Chr(10) & "MID([@Номер],1,5)=""08""," & Chr(10) & "MID([@Номер],1,5)=""09""," & Chr(10) & "MID([@Номер],1,2)=""10""," & Chr(10) & "MID([@Номер],1,5)=""11.32""," & Chr(10) & "MID([@Номер],1,4)=""17.9""," & Chr(10) & "MID([@Номер],1,4)=""17.44""," & Chr(10) & "MID([@Номер],1,2)=""18.50""," & Chr(10) & "MID([@Номер],1,2)=""18.74""," & Chr(10) & "MID([@Номер],1,2)=""19.27""," & Chr(10) & "MID([@Номер],1,2)=""14""," & Chr(10) & "MID([@" & _ ",2)=""15""," & Chr(10) & "MID([@Номер],1,2)=""16""," & Chr(10) & "MID([@Номер],1,2)=""17""," & Chr(10) & "MID([@Номер],1,2)=""19""," & Chr(10) & "MID([@Номер],1,2)=""20""," & Chr(10) & "MID([@Номер],1,2)=""21""," & Chr(10) & "MID([@Номер],1,2)=""22""," & Chr(10) & "MID([@Номер],1,4)=""23.50.16""," & Chr(10) & "MID([@Номер],1,4)=""23.70.20""," & Chr(10) & "MID([@Номер],1,4)=""23.80""," & Chr(10) & "MID([@Номер],1,2)=""24""," & Chr(10) & "MID([@Номер],1,2)=""25""," & Chr(10) & "MID([@Номер],1,2)=""26""," & Chr(10) & "MID([@Номер],1,2)=""27""," & Chr(10) & "MID" & _ ",1,2)=""28""," & Chr(10) & "MID([@Номер],1,2)=""29""," & Chr(10) & "MID([@Номер],1,2)=""30""," & Chr(10) & "MID([@Номер],1,2)=""31""," & Chr(10) & "MID([@Номер],1,2)=""32""," & Chr(10) & "MID([@Номер],1,2)=""33""," & Chr(10) & "MID([@Номер],1,4)=""34.15.17""," & Chr(10) & "MID([@Номер],1,4)=""35.2""," & Chr(10) & "MID([@Номер],1,8)=""35.30.1.1""," & Chr(10) & "MID([@Номер],1,8)=""35.50.12.7""," & Chr(10) & "MID([@Номер],1,8)=""35.60.13""," & Chr(10) & "MID([@Номер],1,8)=""35.60.15""," & Chr(10) & "MID([@Номер],1,5)=""38.31""," & Chr(10) & "MID(" & _ "1,7)=""38.32.2""," & Chr(10) & "MID([@Номер],1,7)=""38.32.3""," & Chr(10) & "MID([@Номер],1,7)=""38.32.7""," & Chr(10) & "MID([@Номер],1,5)=""42.42.42""," & Chr(10) & "MID([@Номер],1,2)=""45""," & Chr(10) & "MID([@Номер],1,2)=""46""," & Chr(10) & "MID([@Номер],1,2)=""47""," & Chr(10) & "MID([@Номер],1,4)=""52.1""," & Chr(10) & "MID([@Номер],1,2)=""56""," & Chr(10) & "MID([@Номер],1,7)=""70.78.8""," & Chr(10) & "MID([@Номер],1,8)=""71.80.12""," & Chr(10) & "MID([@Номер],1,8)=""71.90.14""," & Chr(10) & "MID([@Номер],1,4)=""75.13""," & Chr(10) & "" & _ "ер],1,4)=""77.29""," & Chr(10) & "MID([@Номер],1,8)=""77.39.22""," & Chr(10) & "MID([@Номер],1,5)=""87.21""," & Chr(10) & "MID([@Номер],1,4)=""98.25""," & Chr(10) & "MID([@Номер],1,5)=""96.01""," & Chr(10) & "MID([@Номер],1,5)=""105.02.98"")," & Chr(10) & """Проверка"",""-"")" |
Примечательно, что есть формула на 2800 знаков, которая имеет конструкцию ЕСЛИ(ИЛИ(ПСТР([@НОМЕР]...(ЕСЛИ(ПСТР([@НОМЕР]...))))), содержащую в себе 40 уровней ЕСЛИ, но при этом записалась с первого раза и в макросе работает отлично.
Предполагается, что макрос будет работать в разных книгах, с умными таблицами (фильтрация, удаление, проверка), но вот сейчас все остановилось на этапе вставки формулы.
Может есть возможность как-то упростить формулу что бы она корректно вставлялась макросом в умную таблицу в разных книгах?
Чат жпт не особо помог (вероятно не хватило моих компетенций), поэтому надежда на опыт матерых ребят с планеты эксель
Пример приложил