Excel размер формулы превышает

 

George L

Пользователь

Сообщений: 23
Регистрация: 24.12.2022

вопрос собственно в теме… возможно ли как нибудь увеличить в ячейке длину формулы…?!  а то длина в 8192 символа не помешается…  (8192 это где то 2.5 страницы в ворд , а нужно что бы 7 было )  

Изменено: БМВ06.02.2023 20:04:17

 

Тимофеев

Пользователь

Сообщений: 1495
Регистрация: 01.09.2020

делите на 3 формулы по 8192 и четвертой собирайте итог

Изменено: Тимофеев06.02.2023 14:03:00

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

#3

06.02.2023 14:07:26

Цитата
George L написал:
возможно ли как нибудь увеличить в ячейке длину формулы

например, так: добавить апостроф и посчитать функцией ДЛСТР()

 

George L

Пользователь

Сообщений: 23
Регистрация: 24.12.2022

#4

06.02.2023 14:09:12

Цитата
написал:
делите на 3 формулы по 8192 и четвертой собирайте итог

вопрос то не про три -четыре ячейки, а про одну.
вообще зачем ограничение сделали такое (

 

George L

Пользователь

Сообщений: 23
Регистрация: 24.12.2022

#5

06.02.2023 14:11:28

Цитата
написал:
например, так: добавить апостроф и посчитать функцией ДЛСТР()

спасибо, но длина текста в ячейке не актуальна…

просто формула очень длинная получается  

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

#6

06.02.2023 14:19:44

Цитата
George L написал:
длина текста в ячейке не актуальна..

А что актуально? Мой ответ конкретно на Ваш вопрос в названии темы.
Если Вас интересует, каким образом можно обойти ограничения на длину формулы в ячейке, то и название нужно формулировать соответственно.

 

George L

Пользователь

Сообщений: 23
Регистрация: 24.12.2022

#7

06.02.2023 14:22:29

Цитата
написал:
А что актуально? Мой ответ конкретно на Ваш вопрос в названии темы.Если Вас интересует, каким образом можно обойти ограничения на длину формулы в ячейке, то и название нужно формулировать соответственно.

поэтому в Теме и стоят многоточия, а в самом первом посте раскрывается тема детальнее, по аналогии с экселем и темой, тогда бы все вместо первого сообщения и писали сам вопрос именно в «теме»..

 

БМВ

Модератор

Сообщений: 21376
Регистрация: 28.12.2016

Excel 2013, 2016

#8

06.02.2023 14:24:21

Цитата
George L написал:
вообще зачем ограничение сделали такое (

сделали для того чтоб не появлялось таких формул.
на форуме масса тем в которых монстры превращались в достаточно короткие формулы.

По вопросам из тем форума, личку не читаю.

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

George L,  я Вам про название темы, а Вы про стартовое сообщение.
Впредь формулируйте так, чтобы уже из названия темы была понятна задача. А по Вашей логике получается, что задача скрывается в этих трёх точках.

 

George L

Пользователь

Сообщений: 23
Регистрация: 24.12.2022

#10

06.02.2023 14:36:04

Цитата
написал:
сделали для того чтоб не появлялось таких формул.на форуме масса тем в которых монстры превращались в достаточно короткие формулы.

тоже логично.
хотя по факту вот
СЧЁТЕСЛИМН (три условия) выдает значение и суммирует с подобными тремя условиями, только где «Субъект ознакомлен», и далее меняется только переменная А16 на другие поля (с другими названиями документов)
ну допустим текст «Субъект ознакомлен» и «Субъект НЕ ознакомился» я вставлю в ячейку и потом к ним буду обращаться.. это уменьшит длину где то на 35 символов в каждом цикле..

=(СЧЁТЕСЛИМН(‘[Копия
Процессуальные_документы_для_ознакомления_.xlsx]data’!$I:$I;D14;'[Копия
Процессуальные_документы_для_ознакомления_.xlsx]data’!$J:$J;db!A16;'[Копия
Процессуальные_документы_для_ознакомления_.xlsx]data’!$D:$D;»Субъект
НЕ ознакомился»))+(СЧЁТЕСЛИМН(‘[Копия
Процессуальные_документы_для_ознакомления_.xlsx]data’!$I:$I;D14;'[Копия
Процессуальные_документы_для_ознакомления_.xlsx]data’!$J:$J;db!A16;'[Копия
Процессуальные_документы_для_ознакомления_.xlsx]data’!$D:$D;»Субъект
ознакомлен»))

 

George L

Пользователь

Сообщений: 23
Регистрация: 24.12.2022

#11

06.02.2023 14:44:31

Цитата
написал:
George L,  я Вам про название темы, а Вы про стартовое сообщение.
Впредь формулируйте так, чтобы уже из названия темы была понятна  задача . А по Вашей логике получается, что задача скрывается в этих трёх точках.

Уважаемый Юрий, ваше сообщение не относится к теме обсуждения в рамках проблематики excel, и это ведь немного лишнее будет обсуждение, тем более если вы отвечая на вопрос использовали кнопку «цитировать» и выделили именно вопрос не из темы, а именно из первого поста, что собственно говорит о том, что Вы прочли именно вопрос, а не тему.

А согласно моей логике я же и написал, что если опираться на озвученное Вами, ТОЛЬКО на текст в «Теме» тогда в первом посте вообще можно не писать ничего…

Ps. я благодарен Вам за желание помочь
Ps2. касательно «не актуальности» это было как раз о ДЛСТР  

Изменено: George L06.02.2023 14:51:00

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

George L,  не вставляйте скопированное — прикрепляйте рисунок файлом. Правда,  в рисунках формулы не работают.

 

George L

Пользователь

Сообщений: 23
Регистрация: 24.12.2022

#13

06.02.2023 14:53:31

Цитата
написал:
George L ,  не вставляйте скопированное — прикрепляйте рисунок файлом. Правда,  в рисунках формулы не работают.

Юрий посмотрите чуть выше, я изменил уже сразу , когда рисунок вставился не корректно, а если говорить все таки про excel, а не про «цитирование» то, пример формулы приведен еще чуть выше и если обратите внимание не рисунком… :)

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

#14

06.02.2023 14:54:18

Цитата
George L написал:
Уважаемый Юрий, ваше сообщение не относится к теме обсуждения в рамках проблематики excel,

Замечания модераторов по оформлению, по названию, соблюдению правил относятся к ЛЮБОЙ теме. И Вы глубоко ошибаетесь, если считаете, что в теме должны быть только ответы на Ваш вопрос.
И давайте прекратим препираться, пока медведь своей лапой не закрыл тему.

 

George L

Пользователь

Сообщений: 23
Регистрация: 24.12.2022

#15

06.02.2023 15:01:02

:idea: Юрий М,

Цитата
написал:
хотя по факту вот СЧЁТЕСЛИМН (три условия) выдает значение и суммирует с подобными тремя условиями, только где «Субъект ознакомлен», и далее меняется только переменная А16 на другие поля (с другими названиями документов) ну допустим текст «Субъект ознакомлен» и «Субъект НЕ ознакомился» я вставлю в ячейку и потом к ним буду обращаться.. это уменьшит длину где то на 35 символов в каждом цикле..=(СЧЁТЕСЛИМН(‘[КопияПроцессуальные_документы_для_ознакомления_.xlsx]data’!$I:$I;D14;'[КопияПроцессуальные_документы_для_ознакомления_.xlsx]data’!$J:$J;db!A16;'[КопияПроцессуальные_документы_для_ознакомления_.xlsx]data’!$D:$D;»Субъект НЕ ознакомился»))+(СЧЁТЕСЛИМН(‘[КопияПроцессуальные_документы_для_ознакомления_.xlsx]data’!$I:$I;D14;'[КопияПроцессуальные_документы_для_ознакомления_.xlsx]data’!$J:$J;db!A16;'[КопияПроцессуальные_документы_для_ознакомления_.xlsx]data’!$D:$D;»Субъект ознакомлен»))
 

_Boroda_

Пользователь

Сообщений: 1496
Регистрация: 27.07.2013

Контакты см. в профиле

Вы пример файла приложите наконец или одно из двух?

Скажи мне, кудесник, любимец ба’гов…

 

George L

Пользователь

Сообщений: 23
Регистрация: 24.12.2022

#17

06.02.2023 16:03:21

Цитата
написал:
Вы пример файла приложите наконец или одно из двух?

Прикрепленные файлы

  • пример1.xlsx (11.07 КБ)

 

Ігор Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#18

06.02.2023 16:38:59

Код
=СУММПРОИЗВ(($F$3:$F$11=K3)*(СЧЁТЕСЛИ($L$1:$L$2;$E$3:$E$11)>0)*(СЧЁТЕСЛИ($N$3:$N$6;$G$3:$G$11)>0))

Прикрепленные файлы

  • пример1 (5).xlsx (10.99 КБ)

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

memo

Пользователь

Сообщений: 1422
Регистрация: 28.02.2018

Excel 2013/2016

#19

06.02.2023 17:28:53

Для разнообразия. Формула массива.

Код
=COUNT(SIGN(MATCH(IF(($F$3:$F$11=K3)*(MATCH($E$3:$E$11;$L$1:$L$2;));$G$3:$G$11);$N$3:$N$6;)))

З.Ы. пара скобок лишняя, можете убрать сами)

Прикрепленные файлы

  • пример1 (5).xlsx (10.45 КБ)

Изменено: memo06.02.2023 17:30:32

 

George L

Пользователь

Сообщений: 23
Регистрация: 24.12.2022

 

БМВ

Модератор

Сообщений: 21376
Регистрация: 28.12.2016

Excel 2013, 2016

#21

06.02.2023 19:54:31

Цитата
Юрий М написал:
А по Вашей логике получается, что задача скрывается в этих трёх точках.

ну если честно, то читая я думаю как раз о том, что есть короткая формула, и её нужно увеличить, сделать из нее длинную, а не справится с ограничением еxcel или сократить формулу.

Изменено: БМВ06.02.2023 19:56:17

По вопросам из тем форума, личку не читаю.

 

George L

Пользователь

Сообщений: 23
Регистрация: 24.12.2022

#22

06.02.2023 20:00:53

Цитата
написал:

Цитата
Юрий М написал:
А по Вашей логике получается, что задача скрывается в этих трёх точках.

ну если честно, то читая я думаю как раз о том, что есть короткая формула, и её нужно увеличить, сделать из нее длинную, а не справится с ограничением еxcel или сократить формулу.

согласен,
и вообще после того как Юрий отмодерировал название темы) есть впечатление что есть какая формула которая увеличивает кол-во данных в ячейке) либо как делается более длинная формула :)

 

George L

Пользователь

Сообщений: 23
Регистрация: 24.12.2022

в добавлении к теме:) тогда — либо как еще оптимизировать монстроподобную формулу — в нормальную :)

ps. БМВ спасибо)

Изменено: George L06.02.2023 20:18:33

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

#24

06.02.2023 20:36:55

Цитата
George L написал:
после того как Юрий отмодерировал название темы)

Я ничего не менял.

 

БМВ

Модератор

Сообщений: 21376
Регистрация: 28.12.2016

Excel 2013, 2016

массивка
=SUM(COUNTIFS(F:F;K3;G:G;$N$3:$N$6;E:E;TRANSPOSE($Q$3:$Q$4)))
но при данном количестве ок, а так, сountifs на весь столбец лучше не использовать.

По вопросам из тем форума, личку не читаю.

 

George L

Пользователь

Сообщений: 23
Регистрация: 24.12.2022

#26

07.02.2023 08:51:07

Цитата
написал:
Я ничего не менял.

сорри тогда, значит другой, просто тоже не менял.

Цитата
написал:
массивка =SUM(COUNTIFS(F:F;K3;G:G;$N$3:$N$6;E:E;TRANSPOSE($Q$3:$Q$4)))но при данном количестве ок, а так, сountifs на весь столбец лучше не использовать.

первые три столбца точно столбцы по полной будут использоваться.. там более 10к строк

 

БМВ

Модератор

Сообщений: 21376
Регистрация: 28.12.2016

Excel 2013, 2016

#27

07.02.2023 20:11:40

Цитата
George L написал:
первые три столбца точно столбцы по полной будут использоваться.. там более 10к строк

10К строк это 1% от допустимого миллиона — это называется по поной?

По вопросам из тем форума, личку не читаю.

 

George L

Пользователь

Сообщений: 23
Регистрация: 24.12.2022

#28

08.02.2023 14:39:56

Цитата
написал:
10К строк это 1% от допустимого миллиона — это называется по поной?

по сравнению с миллионом конечно нет, но в данном случае же не выделять каждый раз меняя в формуле диапазон (начальный и  конечный *фиксированный*)  

 

БМВ

Модератор

Сообщений: 21376
Регистрация: 28.12.2016

Excel 2013, 2016

сделайте с запасом, даже 100К строк это 10% от того объема что функция  просматривает при обработке всего столбца. Это касается именно СЧЁТЕСЛИМН, в отличии от подобных, и видимо её писал непутевый программист, она работает именно так, хотя СУМЕСЛИМН уже обрабатывает только используемый диапазон.

По вопросам из тем форума, личку не читаю.

 

George L

Пользователь

Сообщений: 23
Регистрация: 24.12.2022

#30

16.02.2023 09:34:47

Цитата
написал:
сделайте с запасом, даже 100К строк это 10% от того объема что функция  просматривает при обработке всего столбца. Это касается именно СЧЁТЕСЛИМН, в отличии от подобных, и видимо её писал непутевый программист, она работает именно так, хотя СУМЕСЛИМН уже обрабатывает только используемый диапазон.

только время вышло написать..
кстати ..парадокс.. что к примеру взяв на 10к строчек с запасом 40к — все сработало, при уменьшении запаса до 30к выдает н/д , хотя строк проверил реально 10к .. хз почему .. тут же интервал в формуле меняю на 40к.. все опять ок..

(кстати сам файлик после внесения изменений начал грузиться дольше где то секунд 10 из-за вычисления потоков)

Время на прочтение
4 мин

Количество просмотров 28K

VBA – очень полезная вещь. Можно консолидировать данные из многих файлов и обрабатывать большие объемы информации с использованием интересных алгоритмов. Например, макрос Nodupes. Он использует возникающую в процессе выполнения кода ошибку как проверку наличия элемента в формируемой коллекции. Есть макросы, использующие рекурсию для формирования всех возможных комбинаций и перестановок.

Но я бы хотел показать несколько примеров использования стандартных функций листа программы Excel. Достаточно часто приходится городить огород из формул, чтобы вытащить из ячеек нужный текст или числа. Происходит это как правило из-за неверного представления данных. Числа — это числа, текст — это текст, не надо их смешивать. Даты (и время) это числа, с которыми можно и нужно производить вычисления. Не надо путать 14.03.2018 с 14 марта 2018 г. Второе это только пользовательский формат даты [$-F800], то, что мы видим в ячейке, а в строке формул будет 14.03.2018. И хватит об этом.

1. Допустим у вас есть таблица с временами начала и окончания каких-то событий, например, телефонных разговоров.

На рисунке часть таблицы _t2. Необходимо вычислить максимальное одновременное количество событий. Для этого есть такая формула:

=МАКС(МУМНОЖ((_t2[start]>=ТРАНСП(_t2[start]))*(_t2[start]<=ТРАНСП(_t2[end]));СТРОКА(_t2[start])^0))
Или в английской локали
=MAX(MMULT((_t2[start]>=TRANSPOSE(_t2[start]))*(_t2[start]<=TRANSPOSE(_t2[end])),ROW(_t2[start])^0))

Формула массивная, ввод подтверждается одновременным нажатием кнопок Control, Shift, Enter (CSE). В строке формул будет видно, что формула в фигурных скобках. МУМНОЖ делает виртуальную матрицу размером число строк таблица на число строк таблицы, в строках которой результаты вычисления, как если бы в строки таблицы была введена следующая формула (для второй строки) =СУММПРОИЗВ(Ч((C$2:C2>A2)))/ =SUMPRODUCT(N((C$2:C2>A2))), и протянуть на всю таблицу.

2. То же самое, но посложнее. Кроме начала и окончания есть количество агрегатов или отдаваемая/получаемая мощность. Необходимо определить максимальную мощность в какой-то момент времени.

Часть таблицы _t1:

И сама формула:

=МАКС(МУМНОЖ((ТРАНСП(_t1[start]*1440)<=СТРОКА(1:1436)-1)*(ТРАНСП(_t1[stop]*1440)>=СТРОКА(1:1436)-1);_t1[power]))
=MAX(MMULT((TRANSPOSE(_t1[start]*1440)<=ROW(1:1436)-1)*(TRANSPOSE(_t1[stop]*1440)>=ROW(1:1436)-1),_t1[power]))

Поскольку время — это доля единицы, умножаем значения на количество минут в сутках, чтобы получить целые числа. И второй аргумент МУМНОЖ – столбец значений мощности. В первом случае был сформирован столбец единиц.

3. Слева в таблице представлены суммы, соответствующие определенным интервалам. Необходимо вычислить суммы по месяцам. Предполагается, что суммы распределены равномерно внутри своих интервалов.

В столбце Н первые числа месяцев, в столбце I следующие формулы:

=СУММ(_tis[sum per day]*ЕСЛИОШИБКА((ЕСЛИ(КОНМЕСЯЦА(H3;0)>_tis[end];_tis[end];КОНМЕСЯЦА(H3;0))-ЕСЛИ(H3>_tis[start];H3;_tis[start])+1)^0,5;)^2)
=SUM(_tis[sum per day]*IFERROR((IF(EOMONTH(H3,0)>_tis[end],_tis[end],EOMONTH(H3,0))-IF(H3>_tis[start],H3,_tis[start])+1)^0.5,)^2)

Формулы массивные. Можно было бы использовать СУММПРОИЗВ/SUMPRODUCT, но ЕСЛИОШИБКА не работает без массивного ввода. Также, к сожалению, МАКС и МИН не могут сформировать виртуальный массив значений. Поэтому для вычисления частей интервалов, приходящихся на месяц, используется ЕСЛИ. Так как полученные части могут быть отрицательными, искусственно вызывается ошибка (квадратный корень из отрицательного числа приводит к ней). В исходной таблице можно было обойтись без столбцов длительности интервала и дневной суммы. Формула стала бы немного длиннее.

4. Небольшое развлечение. Сколько в году может быть счастливых пятниц?

Количество пятниц:

=СУММПРОИЗВ((ДЕНЬ(СТРОКА(ИНДЕКС(A:A;B2):ИНДЕКС(A:A;C2)))=13)*(ДЕНЬНЕД(СТРОКА(ИНДЕКС(A:A;B2):ИНДЕКС(A:A;C2));2)=5))
=SUMPRODUCT((DAY(ROW(INDEX(A:A,B2):INDEX(A:A,C2)))=13)*(WEEKDAY(ROW(INDEX(A:A,B2):INDEX(A:A,C2)),2)=5))

Даты пятниц:

=ЕСЛИОШИБКА(АГРЕГАТ(15;6;СТРОКА(ИНДЕКС($A:$A;$B2):ИНДЕКС($A:$A;$C2))/(ДЕНЬ(СТРОКА(ИНДЕКС($A:$A;$B2):ИНДЕКС(A:A;$C2)))=13)/(ДЕНЬНЕД(СТРОКА(ИНДЕКС($A:$A;$B2):ИНДЕКС($A:$A;$C2));2)=5);СТОЛБЕЦ(A$2));"")
=IFERROR(AGGREGATE(15,6,ROW(INDEX($A:$A,$B2):INDEX($A:$A,$C2))/(DAY(ROW(INDEX($A:$A,$B2):INDEX(A:A,$C2)))=13)/(WEEKDAY(ROW(INDEX($A:$A,$B2):INDEX($A:$A,$C2)),2)=5),COLUMN(A$2)),"")

Это очень хорошо (здесь), что первая строка листа соответствует 01.01.1901. Поэтому достаточно легко сформировать массив дат года с помощью ИНДЕКС и СТРОКА и считать только пятницы тринадцатое.

5. Размер процентной ставки, зависящей от суммы, встречается достаточно часто. Если пользоваться ими неправильно, то график полученных сумм будет такой как красный график ниже:

Чтобы этого избежать, необходимо применять ставку только к части суммы, приходящейся на интервал. А для младших интервалов брать фиксированные суммы.

Для таких исходных данных:

Формула:

=ВПР(A3;tbl;2)*(A3-ВПР(A3;tbl;1))+СУММПРОИЗВ(ЕСЛИОШИБКА((tbl[limit]<=A3)*(tbl[limit]-СМЕЩ(tbl[limit];-1;))*СМЕЩ(tbl[rate];-1;);))
=VLOOKUP(A3,tbl,2)*(A3-VLOOKUP(A3,tbl,1))+SUMPRODUCT(IFERROR((tbl[limit]<=A3)*(tbl[limit]-OFFSET(tbl[limit],-1,))*OFFSET(tbl[rate],-1,),))

Формула массивная. В А3 – сумма, для которой нужно вычислить проценты. Исходные данные –tbl.
И, напоследок, кредитная линия с изменяемой процентной ставкой. Формула для расчета суммы процентов в зависимости от дат/сумм траншей/возвратов.

История кредита:

Изменение ставки:

=ЕСЛИ(B1=0;СУММ(ЕСЛИОШИБКА(ПРОСМОТР(_d;_s[[date]:[rate]]);)*ТРАНСП(B5:B16)*ИНДЕКС((_d>ТРАНСП(A5:A16))*(_d<=A2);;)*1/(365+(ОСТАТ(ГОД(_d);4)=0)))-СУММ(ЕСЛИОШИБКА(ПРОСМОТР(_d;_s[[date]:[rate]]);)*ТРАНСП(D5:D16)*ИНДЕКС((_d>ТРАНСП(C5:C16))*(_d<=A2);;)*1/(365+(ОСТАТ(ГОД(_d);4)=0)));)
=IF(B1=0,SUM(IFERROR(LOOKUP(_d,_s[[date]:[rate]]),)*TRANSPOSE(B5:B16)*INDEX((_d>TRANSPOSE(A5:A16))*(_d<=A2),,)*1/(365+(MOD(YEAR(_d),4)=0)))-SUM(IFERROR(LOOKUP(_d,_s[[date]:[rate]]),)*TRANSPOSE(D5:D16)*INDEX((_d>TRANSPOSE(C5:C16))*(_d<=A2),,)*1/(365+(MOD(YEAR(_d),4)=0))),)

Формула массивная. Считает проценты по дням, учитывает високосные года.

Спасибо за внимание!

Исправляем ошибку VBA № 5854 слишком длинный строковый параметр в шаблоне word из таблицы excel 255 символов

Всем привет, сегодня снова работаем с эксель таблицей и шаблоном в ворд, в этом видео я вам покажу как работать с большим текстом, если у нас допустим, в нашей ячейке будет содержаться текста значительно больше чем 255 символов.

С этим вы обычной можете столкнуться при создании шаблона, для экспорта данных из эксель в ворд, при замене текста, дополнительно я покажу как исправить еще одну ошибку.

Давайте возьмём пример из первого видео, перейдете по ссылке в описании на странице есть файл в архиве.

Давайте сделаем так что у нас в заголовке таблицы будет не адрес, а текст для примера. Будем практиковаться на основе ячейки C2 .

Давайте сделаем проверку длинны текста в ячейке, используя функцию ДЛСТР — длина строки. У нас здесь сейчас находится 15 символов.

Сделаем больше текста для этого я в Microsoft Word используя функцию LOREM() , которая сформирует случайный текст.

Теперь я скопирую текст, нужен будет блокнот, вставлю текст из буфера обмена, уберу лишние отступы переносы.

Давайте посмотрим какой длины у нас получится сейчас этот текст. Так вот у нас даже не помещается текст на экране, поправим таблицу. Длина текста в ячейке 598 символов с пробелами.

Давайте перейдём в Редактор Visual Basic, alt+f11 и посмотрим код прошлого примера.

Исправим название переменной адрес на текст, здесь исправим на текст и посмотрим что у нас получится.

Теперь откроем шаблон и заменим Адрес на Текст и исправим конструкцию для замены на &text .

Сохраним, закроем все лишнее, совместим для наглядности эксель файл и папку для вывода ворд файлов.

Посмотрим, что теперь получится, изменю масштаб, для доступа к кнопке запуска макроса.

Появляется ошибка № 5854 — слишком длинный строковый параметр.

И хотя бланк сформировался, произошло не то что ожидалось, ID вывели, серийный номер не изменился, потому как по коду данного макроса, мы не дошли до номера мы остановились вот здесь, ошибка произошла выше.

Давайте откроем диспетчер задач, существует проблема которую мы сейчас решим, иначе у нас при любой ошибке в работе макроса в Диспетчере задач в фоне остается запущен экземпляр Microsoft Word в котором рухнул наш шаблон.

Давайте ещё раз попробуем сформировать посмотрим, что у изменится.

Опять ошибка, и сейчас в Диспетчере задач повис Microsoft Word, его нужно закрыть и так придется делать постоянно, будем снимать задачу иначе будут появляться новые ошибки.

Давайте теперь сделаем выход из нашей функции, где мои работаем, здесь у нас создание файла проходит нормально, этот кусок у нас нормально отрабатывает.

Это у нас метка перехода, если произойдет ошибка, мы перейдём в конец модуля, вот здесь мы сделаем Exit Sub — Выход из модуля.

Ниже напишем ErrorHandler: наша метка и здесь нам нужно будет вставить код сохранения, закрытия и выхода из Word.

Вот теперь мы избавимся проблемы, когда у нас будет зависать в Диспетчере задач Microsoft Word, который мы не успеваем закрыть.

Давайте выполним макрос, появится сообщение — не выполнено слишком длинный строковый параметр, в принципе у нас документ сформировался, но он в целом не полностью отработал.

Сейчас мы исправим эту проблему, кстати гляну в диспетчер задач у нас Microsoft Word нигде не висит, и он нам не мешает. OK.

Теперь снова перейдём в редактор VBA. и разобьем переменную Text$ на фрагменты допустимой длины.

Ну кроме исправлю маленькую опечатку, тут естественно должен быть &text .

Дайте я посмотрю, что изменится, хотя даже если мы исправили это значение, всё равно ничего не получилось.

Теперь удалим снова бланк, вернемся вот сюда, зададим переменную temp равно Left возьмём от переменной Text$ 255 символов, снова создадим переменную temp2, воспользуемся теперь функцией Mid , мы возьмём начиная с 256 символа текст длиной 255 символов.

Теперь нужно будет продублировать здесь строку для замены значений, укажем переменные temp , temp2 , здесь мы сделаем заменяемое значение text2 .

Теперь мы шагнем от 256 + 255 равно 511, начиная с 512 символа мы опять шагнем на 255 символов.

Ещё продублирую строку замены, переменная temp3 , значение text3 .

Как нам указать в шаблоне заменяемые значения? А мы их ведем просто в наш шаблон, уже есть вот эта строка &text , мы её скопируем и вставим несколько раз, дописав числа 2 и 3.

То есть у нас всякий раз вот этот фрагмент текст будет заменяться на значения из наших переменных temp , temp2 , temp3 . Можно в коде VBA продолжать добавлять разбивку основного текста на части, но будьте внимательны, указывая смещение и длину символов. Соответствующе правки так же вносите в шаблон.

Давайте попробуем запустить и посмотрим, что получится, закрыли, свернули.

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

Следующие файлы так же сформировались, но тут у нас все осталось как обычно.

То есть у нас 512 + 255 получается 767, следующий шаг в 255 символов можно делать с 768 знака.

У нас же есть ещё место и дальше можно продолжать опять там делать дальше разбивку, если у вас будет очень большой текст.

специалист

Мнение эксперта

Витальева Анжела, консультант по работе с офисными программами

Со всеми вопросами обращайтесь ко мне!

Задать вопрос эксперту

По некой аналогии с предыдущим примером, мы можем производить не булевое ДА-НЕТ, ИСТИНА-ЛОЖЬ сравнение длин строки перед и после удаления символа или фрагмента, а вычислить разницу. Если же вам нужны дополнительные объяснения, обращайтесь ко мне!

Продолжим наше дело дальше. Пусть Excel проверяет и 3, и 2, внесенные в В1. И пусть сообщает что это «удовлетворительно» и «плохо» соответственно. А если будет в В1 что-то другое напишет «таких оценок не бывает».
Формула произведения десяти чисел

Обратите внимание на 5 и 6 строки — поскольку функция «ПОДСТАВИТЬ» чувствительна к регистру, из текста ею не было удалено первое вхождение. Если нужно учитывать вхождения в любом регистре, могут понадобиться функции СТРОЧН или ПРОПИСН.

Функция ЛЕВСИМВ

Возвращает подстроку из текста в порядке слева направо в заданном количестве символов.

Синтаксис: =ЛЕВСИМВ(текст; [количество_знаков])

  • текст – строка либо ссылка на ячейку, содержащую текст, из которого необходимо вернуть подстроку;
  • количество_знаков – необязательный аргумент. Целое число, указывающее, какое количество символов необходимо вернуть из текста. По умолчанию принимает значение 1.

Формула: =ЛЕВСИМВ(«Произвольный текст»;8) – возвращенное значение «Произвол».

Текстовые функции Excel

Строка в ячейке A1 содержит текст, в котором имеются 2 подстроки «старый». Нам необходимо подставить на место первого вхождения строку «новый». В результате часть текста «…старый-старый…», заменяется на «…новый-старый…».

специалист

Мнение эксперта

Витальева Анжела, консультант по работе с офисными программами

Со всеми вопросами обращайтесь ко мне!

Задать вопрос эксперту

Принимает целое число, указывающее порядковый номер вхождения старый_текст, которое подлежит замене, все остальные вхождения затронуты не будут. Если же вам нужны дополнительные объяснения, обращайтесь ко мне!

Давайте проверять оценки (учителя мы или где?). Если в В1 «5» пусть пишет «отлично», а если не «5». Итак, выделяем ячейку С1 и пишем в строке формул (но можно и в самой ячейке) следующее: =ЕСЛИ(В1=5;»отлично»;»что сказать?») . Теперь внесем в ячейку В1 число 5. Что появилось в С1? Слово «отлично».

Логические формулы в Excel. Формула проверки условия ЕСЛИ. Информационные технологии — Каталог статей — Сайт для администрации школы

  • искомый_текст – строка, которую необходимо найти;
  • текст_для_поиска – текст, в котором осуществляется поиск первого аргумента;
  • нач_позиция – необязательный элемент. Принимает целое число, которое указывает, с какого символа текст_для_поиска необходимо начинать просмотр. По умолчанию принимает значение 1.

Еще одним способом является смешанный тип ввода, когда сначала выделяется начало диапазона при помощи мыши, а правильный размер вводитсья с клавиатуры. В предыдущем примере, можно выделить A1:A10 (десять видимых ячеек), потом сразу же ввести с клавиатуры «00» — получится искомый диапазон A1:A1000. Выражение будет работать верно, но скроллинг при помощи мыши при этом не требуется.

Что делать если Excel не хочет сохранять формулу, пишет что содержит больше значений, ссылок и имен, чем допускается текущим форматом файла??? (это 1/2 часть моей формулы =ЕСЛИ(ПСТР(c18;1;3)=»ов/»;ЗНАЧЕН(ПСТР(c18;4;6));ЕСЛИ(ПСТР(c18;1;3)=»ob/»;ЗНАЧЕН(ПСТР(c18;4;6));0))+то же самое, только для 31 др.ячейки)


Здравствуйте.
Можно применить именованные формулы. Можно попытаться оптимизировать формулу, если знать каков должен быть результат. Выложите небольшой примерчик данных с формулой и пояснениями, что должно получиться и постараемся сократить формулу.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…
www.excel-vba.ru
Просто СПАСИБО [+оказать+]
Считаешь СПАСИБО мало? Яндекс.Деньги: 41001332272872; WM: R298726502453


1. Можно написать попроще, например
ЕСЛИ(ИЛИ(ПСТР(C18;1;3)=»ов/»;ПСТР(C18;1;3)=»ob/»);—ПСТР(C18;4;6);»»)
2. Можно кусок формулы засунуть в именованный диапазон (вставка — Имя)
3. Кладите файл

Скажи мне, кудесник, любимец ба’гов…

Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995



А в чем разница первой и второй таблиц?
Сделал по одной из них.

=СУММ(ЕСЛИ((ПСТР(C18:AG18;1;3)="ов/")+(ПСТР(C18:AG18;1;3)="ob/");ЕСЛИ(ЕОШИБКА(--ПСТР(C18:AG18;4;6));0;--ПСТР(C18:AG18;4;6));0))
формула массива, вводится нажатием контрл шифт ентер
второе ЕСЛИ только потому, что в ячейке AF62 написано «от/н». Так и должно быть?

Скажи мне, кудесник, любимец ба’гов…

Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995


Исходя из логики сокращений можно чуть покороче (также формула массива):
=СУММ(ЕСЛИ(ЕЧИСЛО(—ПСТР(C18:AG18;4;6));—ПСТР(C18:AG18;4;6)))

Хотя числа, посчитанные Вами вручную отличаются в некоторых местах при любой формуле :-


Еще вариант:

=СУММ(ЕСЛИ(ЕЧИСЛО(--ПОДСТАВИТЬ(C18:AG18;"ов/";""));--ПОДСТАВИТЬ(C18:AG18;"ов/";"");0))
формула массива



А вот тут, на форуме, и учат.
Если человек не просто просит «Сделайте все за меня», а сначала (как Вы) сам постарается что-нибудь придумать, не получается — пишет «Я сделал так и так, а как можно еще?». Вот ему приятно помочь, объяснить, подсказать. А если этот человек еще и девушка, то вдвойне приятно. Так что пишите, спрашивайте — а мы с удовольствием Вам поможем.

Скажи мне, кудесник, любимец ба’гов…

Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995


Здравствуйте, Борода!

Помогите, мне тоже, пожалуйста, сократить формулу, у меня формула с функцией ЕСЛИ с 8-ми вложениями, а больше 7-ми вложений эксель не обрабатывает.

Мне нужно, чтобы в реестр стоимости услуг — стоимоть 1 подъема машиниста и стропальщика автоматически бралась из таблицы — калькуляция.

Я составила формулу — все работает для 7-ми разных цен, а восьмую не могу включить в формулу:

=ЕСЛИ(K28<623;$W$8;ЕСЛИ(И(K28<747;K28>745);$W$9;ЕСЛИ(И(K28<892;K28>890);$W$10;ЕСЛИ(И(K28<1037;K28>1035);$W$11;ЕСЛИ(И(K28<1265;K28>1263);$W$12;ЕСЛИ(И(K28<1265;K28>1263);$W$12;ЕСЛИ(И(K28<1701;K28>1699);$W$14)))))))

Буду очень признательна, если ответите, я уже весь мозг сломала, как сделать иначе, но пока ничего не придумала.


Я не очень понял из какой таблицы условия брать нужно. Откуда у Вас число 747 взялось? И откуда 745?
попробуйте для М28 формулу
=ИНДЕКС($W$8:$W$15;ПОИСКПОЗ($K28;$AL$8:$AL$15))

Скажи мне, кудесник, любимец ба’гов…

Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995


А так не прокатит? :)

Может и я на что сгожусь … Если сгодился, можете меня по+благодарить+.


Wasilic
_Boroda_
Блин, какие вы умные, я не перестаю восхищаться, я даже толком и не объяснила, из какой таблицы, при каких условиях должна цена браться, вы сами все поняли, посмотрела оба варианта, и так и так хорошо, все работает, спасибо большое за отклик!

P.S. Я вот тут полазила по форуму нашла файл, в котором был приведен пример с функцией ВПР и попробовала создать формулы, тоже получилось, набираюсь опыта, все благодоря Вам, еще раз спасибо.

С ув. Елена.


Формула с индексом вообще супер работает!


Разбивка длинной формулы на 8 ячеек и их сумма, я до токого не додумалась, спасибо, буду применять. (Век живи, век учись!)


Цитата: Elenika от 28.06.2010, 11:58
Wasilic
_Boroda_
Блин, какие вы умные, я не перестаю восхищаться,
С ув. Елена.

Елена! Мне даже не ловко перед _Boroda_. Мне еще далеко до его уровня. Я сам у него многому учусь.

Может и я на что сгожусь … Если сгодился, можете меня по+благодарить+.


Вот давайте теперь друг друга похвалим (хотя, согласен, иногда и не лишним бывает). Ну, раз уж начали, то, в свою очередь, хочу сказать, что, по моему мнению, здесь каждый у каждого учится. И хорошая задача порой не менее ценна, чем ее решение.

Скажи мне, кудесник, любимец ба’гов…

Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995


_Boroda_  , вы работаете программистом? Обучались или сами до всего доходили? наверно и 1с знаете? (это мне просто интересно…)


Цитировать_Boroda_  , вы работаете программистом?

Не угадали. Экономист — аналитик.

ЦитироватьОбучались или сами до всего доходили?

Книжки и практика, практика и еще раз она самая.

Цитироватьнаверно и 1с знаете

немного не по профилю

Скажи мне, кудесник, любимец ба’гов…

Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995


ОГО! Вот экономистом я еще не работала, хотя интересно было бы попробовать. Я бухгалтером работала, а последний год расчетчик зарплаты, поэтому все, что связано с формулами мне интересно, (т.к. программы для автоматического расчета зарплаты не было, приходилось считать в экселе, и для расчета ЕСН создавала формулы с функцией ЕСЛИ.)
А вам нравится работать экономистом, сложно? Или если все файлы с формулами работают как часы, то и любая задача вам поплечу, работать легко?

А какие книжки читали, конкретно по экселю? (Может ссылку дадите, если электронно есть?)


Книги люблю бумажные, поэтому ссылок нет. Посмотрите в поиске на этом сайте. В разных других темах их куча.
Я пользовался этими:
Уокенбах «Подробное руководство по созданию формул в Excel 2002»;
Далглеиш «_сводные_ таблицы в Excel»;
Долженков «Майкрософт Excel 2002 полное руководство».

ЦитироватьА вам нравится работать экономистом, сложно? Или

Сложно. Потому и нравится.

ЦитироватьИли если все файлы с формулами работают как часы, то и любая задача вам поплечу, работать легко?

Так файлы и задачи все время разные. То, что старое — то да, один раз настроил и отдал кому-нибудь, а новенькое — вот это как наркотик. Я думаю, что многие форумчане со мной согласятся.
В тему или не в тему (наверное, музыкой навеяло), вспоминается старая панковская присказка (да-да, в свое время…) в ответ на многочисленные советские лозунги: «То, что вам по плечу — нам пох…».
А с файлом приложенным что сделать нужно?

Скажи мне, кудесник, любимец ба’гов…

Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995


Цитата: _Boroda_ от 28.06.2010, 21:06
Книги люблю бумажные, поэтому ссылок нет. Посмотрите в поиске на этом сайте. В разных других темах их куча.
Я пользовался этими:
Уокенбах «Подробное руководство по созданию формул в Excel 2002»

Спасибо! Поищу в интернете.

Цитироватьа новенькое — вот это как наркотик.

Заинтриговали! Вам нравится именно создавать файл с формулами, сам процесс, да?
Мне тоже нравится автоматизировать расчеты, навели меня на мысль, экономистом работать я еще не пробовала, надо попробовать. Смущает только одно — экономисты вечно работой загружены и часто задерживаются, у вас тоже так?

ЦитироватьА с файлом приложенным что сделать нужно?

А ничего, я просто так его выложила, может кому пригодится.


Содержание

  1. Excel размер формулы превышает
  2. Excel и длинные формулы
  3. Excel размер формулы превышает
  4. Длина Формулы в Excel не Может Превышать 8192 Знака • Функция левсимв
  5. ДЛСТР — функция в Excel с примерами — Справочник функций Excel
  6. Функция ЛЕВСИМВ

Excel размер формулы превышает

имеется древняя относительно большая (4М) сложная двоичная книга на 45 листов, с кучей имён, объектов, макросов, проверкой данных, с условным и специальным форматированием, группировками и пр. Не было разве что внешних связей. Вдруг понадобилось подружить её с другой системой и для этого конвертировать в *.xlsm, но пациент туда не хочет. Ошибка:

«Длина одной или нескольких формул в данной книге превышает допустимую длину, равную 8192 знакам. Чтобы обойти это ограничение, следует сохранить данную книгу в формате двоичной книги Excel»

В поисках источника файл раздербанен до 1 листа, причём вновь созданного. Удалены все родные листы, имена (в т.ч. скрытые), макросы. Но даже эта культя чем-то упирается и не идёт в *.xlsm. Осталось подозрение на содержимое папки External Links, но если его убрать, Excel падает на колени при попытке открыть и восстановить.

имеется древняя относительно большая (4М) сложная двоичная книга на 45 листов, с кучей имён, объектов, макросов, проверкой данных, с условным и специальным форматированием, группировками и пр. Не было разве что внешних связей. Вдруг понадобилось подружить её с другой системой и для этого конвертировать в *.xlsm, но пациент туда не хочет. Ошибка:

«Длина одной или нескольких формул в данной книге превышает допустимую длину, равную 8192 знакам. Чтобы обойти это ограничение, следует сохранить данную книгу в формате двоичной книги Excel»

В поисках источника файл раздербанен до 1 листа, причём вновь созданного. Удалены все родные листы, имена (в т.ч. скрытые), макросы. Но даже эта культя чем-то упирается и не идёт в *.xlsm. Осталось подозрение на содержимое папки External Links, но если его убрать, Excel падает на колени при попытке открыть и восстановить.

Сообщение Уважаемые форумчане,

имеется древняя относительно большая (4М) сложная двоичная книга на 45 листов, с кучей имён, объектов, макросов, проверкой данных, с условным и специальным форматированием, группировками и пр. Не было разве что внешних связей. Вдруг понадобилось подружить её с другой системой и для этого конвертировать в *.xlsm, но пациент туда не хочет. Ошибка:

«Длина одной или нескольких формул в данной книге превышает допустимую длину, равную 8192 знакам. Чтобы обойти это ограничение, следует сохранить данную книгу в формате двоичной книги Excel»

В поисках источника файл раздербанен до 1 листа, причём вновь созданного. Удалены все родные листы, имена (в т.ч. скрытые), макросы. Но даже эта культя чем-то упирается и не идёт в *.xlsm. Осталось подозрение на содержимое папки External Links, но если его убрать, Excel падает на колени при попытке открыть и восстановить.

Есть идеи? Автор — Almost
Дата добавления — 30.12.2019 в 16:18

Источник

Excel и длинные формулы

VBA – очень полезная вещь. Можно консолидировать данные из многих файлов и обрабатывать большие объемы информации с использованием интересных алгоритмов. Например, макрос Nodupes. Он использует возникающую в процессе выполнения кода ошибку как проверку наличия элемента в формируемой коллекции. Есть макросы, использующие рекурсию для формирования всех возможных комбинаций и перестановок.

Но я бы хотел показать несколько примеров использования стандартных функций листа программы Excel. Достаточно часто приходится городить огород из формул, чтобы вытащить из ячеек нужный текст или числа. Происходит это как правило из-за неверного представления данных. Числа — это числа, текст — это текст, не надо их смешивать. Даты (и время) это числа, с которыми можно и нужно производить вычисления. Не надо путать 14.03.2018 с 14 марта 2018 г. Второе это только пользовательский формат даты [$-F800], то, что мы видим в ячейке, а в строке формул будет 14.03.2018. И хватит об этом.

1. Допустим у вас есть таблица с временами начала и окончания каких-то событий, например, телефонных разговоров.

На рисунке часть таблицы _t2. Необходимо вычислить максимальное одновременное количество событий. Для этого есть такая формула:

Формула массивная, ввод подтверждается одновременным нажатием кнопок Control, Shift, Enter (CSE). В строке формул будет видно, что формула в фигурных скобках. МУМНОЖ делает виртуальную матрицу размером число строк таблица на число строк таблицы, в строках которой результаты вычисления, как если бы в строки таблицы была введена следующая формула (для второй строки) =СУММПРОИЗВ(Ч((C$2:C2>A2)))/ =SUMPRODUCT(N((C$2:C2>A2))), и протянуть на всю таблицу.

2. То же самое, но посложнее. Кроме начала и окончания есть количество агрегатов или отдаваемая/получаемая мощность. Необходимо определить максимальную мощность в какой-то момент времени.

Часть таблицы _t1:

Поскольку время — это доля единицы, умножаем значения на количество минут в сутках, чтобы получить целые числа. И второй аргумент МУМНОЖ – столбец значений мощности. В первом случае был сформирован столбец единиц.

3. Слева в таблице представлены суммы, соответствующие определенным интервалам. Необходимо вычислить суммы по месяцам. Предполагается, что суммы распределены равномерно внутри своих интервалов.

В столбце Н первые числа месяцев, в столбце I следующие формулы:

Формулы массивные. Можно было бы использовать СУММПРОИЗВ/SUMPRODUCT, но ЕСЛИОШИБКА не работает без массивного ввода. Также, к сожалению, МАКС и МИН не могут сформировать виртуальный массив значений. Поэтому для вычисления частей интервалов, приходящихся на месяц, используется ЕСЛИ. Так как полученные части могут быть отрицательными, искусственно вызывается ошибка (квадратный корень из отрицательного числа приводит к ней). В исходной таблице можно было обойтись без столбцов длительности интервала и дневной суммы. Формула стала бы немного длиннее.

4. Небольшое развлечение. Сколько в году может быть счастливых пятниц?

Это очень хорошо (здесь), что первая строка листа соответствует 01.01.1901. Поэтому достаточно легко сформировать массив дат года с помощью ИНДЕКС и СТРОКА и считать только пятницы тринадцатое.

5. Размер процентной ставки, зависящей от суммы, встречается достаточно часто. Если пользоваться ими неправильно, то график полученных сумм будет такой как красный график ниже:

Чтобы этого избежать, необходимо применять ставку только к части суммы, приходящейся на интервал. А для младших интервалов брать фиксированные суммы.

Для таких исходных данных:

Формула массивная. В А3 – сумма, для которой нужно вычислить проценты. Исходные данные –tbl.
И, напоследок, кредитная линия с изменяемой процентной ставкой. Формула для расчета суммы процентов в зависимости от дат/сумм траншей/возвратов.

Формула массивная. Считает проценты по дням, учитывает високосные года.

Источник

Excel размер формулы превышает

(в каждой ячейке своя, индивидуальная, заботливо написанная трудолюбивыми руками)

заменил одной формулой:

которая выдает точно теже результаты

гиганской формулы в 1.5 млн. знаков не нашел (и хорошо. )

Вложения

ПочтиГотоваяОснова.rar (268.1 Кб, 6 просмотров)

В Вашем случае необходимо использовать доп столбцы или макросы

По укорачиванию формулы (в ячейке J5):
Вот этот фрагмент (буду объяснять на нём, потому что остальные аналогичны по структуре):

Исходная формула укорачивается в 4,1 раза (общая длинна не более 2000 знаков), причём она не будет увеличиваться при увеличении количества проверяемых столбцов в диапазоне, сейчас обозначенном как B2:F2.

И это только на первый взгляд. Наверняка можно сократить ещё. Всерьёз разбирать формулу в 8 000 знаков совершенно не хочется, да и время позднее

Пытаюсь понять то что вы мне предлагаете , но ни чего не работает .

Описание программы в ячейке J5

Спасибо огромное ! Ваша формула заработала сразу . Я просто сам запутался и перемудрил , а вы даже при этом сделали все правильно .
Мне оказывается нужно было все варианты раздельно а не вместе. А формула длинная оказывается даже мне не нужна была бы . Но все равно не маленькая где то 800 символов .
Всем большое спасибо !

Это моя была бы (т.е. я с ней работал) =ЕСЛИ(И($B1=J$1;$B2=J$2);1;0)+ЕСЛИ( И($B1=J$1;$C2=J$2);1;0)+ЕСЛИ(И($B1= J$1;$D2=J$2);1;0)+ЕСЛИ(И($B1=J$1;$E 2=J$2);1;0)+ЕСЛИ(И($B1=J$1;$F2=J$2) ;1;0)+ЕСЛИ(И($C1=J$1;$B2=J$2);1;0)+ ЕСЛИ(И($C1=J$1;$C2=J$2);1;0)+ЕСЛИ(И ($C1=J$1;$D2=J$2);1;0)+ЕСЛИ(И($C1=J $1;$E2=J$2);1;0)+ЕСЛИ(И($C1=J$1;$F2 =J$2);1;0)+ЕСЛИ(И($D1=J$1;$B2=J$2); 1;0)+ЕСЛИ(И($D1=J$1;$C2=J$2);1;0)+Е СЛИ(И($D1=J$1;$D2=J$2);1;0)+ЕСЛИ(И( $D1=J$1;$E2=J$2);1;0)+ЕСЛИ(И($D1=J$ 1;$F2=J$2);1;0)+ЕСЛИ(И($E1=J$1;$B2= J$2);1;0)+ЕСЛИ(И($E1=J$1;$C2=J$2);1 ;0)+ЕСЛИ(И($E1=J$1;$D2=J$2);1;0)+ЕС ЛИ(И($E1=J$1;$E2=J$2);1;0)+ЕСЛИ(И($ E1=J$1;$F2=J$2);1;0)+ЕСЛИ(И($F1=J$1 ;$B2=J$2);1;0)+ЕСЛИ(И($F1=J$1;$C2=J $2);1;0)+ЕСЛИ(И($F1=J$1;$D2=J$2);1; 0)+ЕСЛИ(И($F1=J$1;$E2=J$2);1;0)+ЕСЛ И(И($F1=J$1;$F2=J$2);1;0)

А в таком виде вместо моей ваша =ЕСЛИ(И(СУММПРОИЗВ((J$1=$B1:$F1)*1) >0;СУММПРОИЗВ((J$2=$B2:$F2)*1)>0);С УММПРОИЗВ((J$2=$B2:$F2)*1)

Источник

Длина Формулы в Excel не Может Превышать 8192 Знака • Функция левсимв

Всем привет, сегодня снова работаем с эксель таблицей и шаблоном в ворд, в этом видео я вам покажу как работать с большим текстом, если у нас допустим, в нашей ячейке будет содержаться текста значительно больше чем 255 символов.

С этим вы обычной можете столкнуться при создании шаблона, для экспорта данных из эксель в ворд, при замене текста, дополнительно я покажу как исправить еще одну ошибку.

Давайте возьмём пример из первого видео, перейдете по ссылке в описании на странице есть файл в архиве.

Давайте сделаем так что у нас в заголовке таблицы будет не адрес, а текст для примера. Будем практиковаться на основе ячейки C2 .

Давайте сделаем проверку длинны текста в ячейке, используя функцию ДЛСТР — длина строки. У нас здесь сейчас находится 15 символов.

Сделаем больше текста для этого я в Microsoft Word используя функцию LOREM() , которая сформирует случайный текст.

Теперь я скопирую текст, нужен будет блокнот, вставлю текст из буфера обмена, уберу лишние отступы переносы.

Давайте посмотрим какой длины у нас получится сейчас этот текст. Так вот у нас даже не помещается текст на экране, поправим таблицу. Длина текста в ячейке 598 символов с пробелами.

Давайте перейдём в Редактор Visual Basic, alt+f11 и посмотрим код прошлого примера.

Исправим название переменной адрес на текст, здесь исправим на текст и посмотрим что у нас получится.

Теперь откроем шаблон и заменим Адрес на Текст и исправим конструкцию для замены на &text .

Сохраним, закроем все лишнее, совместим для наглядности эксель файл и папку для вывода ворд файлов.

Посмотрим, что теперь получится, изменю масштаб, для доступа к кнопке запуска макроса.

Появляется ошибка № 5854 — слишком длинный строковый параметр.

И хотя бланк сформировался, произошло не то что ожидалось, ID вывели, серийный номер не изменился, потому как по коду данного макроса, мы не дошли до номера мы остановились вот здесь, ошибка произошла выше.

Давайте откроем диспетчер задач, существует проблема которую мы сейчас решим, иначе у нас при любой ошибке в работе макроса в Диспетчере задач в фоне остается запущен экземпляр Microsoft Word в котором рухнул наш шаблон.

Давайте ещё раз попробуем сформировать посмотрим, что у изменится.

Опять ошибка, и сейчас в Диспетчере задач повис Microsoft Word, его нужно закрыть и так придется делать постоянно, будем снимать задачу иначе будут появляться новые ошибки.

Давайте теперь сделаем выход из нашей функции, где мои работаем, здесь у нас создание файла проходит нормально, этот кусок у нас нормально отрабатывает.

Это у нас метка перехода, если произойдет ошибка, мы перейдём в конец модуля, вот здесь мы сделаем Exit Sub — Выход из модуля.

Ниже напишем ErrorHandler: наша метка и здесь нам нужно будет вставить код сохранения, закрытия и выхода из Word.

Вот теперь мы избавимся проблемы, когда у нас будет зависать в Диспетчере задач Microsoft Word, который мы не успеваем закрыть.

Давайте выполним макрос, появится сообщение — не выполнено слишком длинный строковый параметр, в принципе у нас документ сформировался, но он в целом не полностью отработал.

Сейчас мы исправим эту проблему, кстати гляну в диспетчер задач у нас Microsoft Word нигде не висит, и он нам не мешает. OK.

Теперь снова перейдём в редактор VBA. и разобьем переменную Text$ на фрагменты допустимой длины.

Ну кроме исправлю маленькую опечатку, тут естественно должен быть &text .

Дайте я посмотрю, что изменится, хотя даже если мы исправили это значение, всё равно ничего не получилось.

Теперь удалим снова бланк, вернемся вот сюда, зададим переменную temp равно Left возьмём от переменной Text$ 255 символов, снова создадим переменную temp2, воспользуемся теперь функцией Mid , мы возьмём начиная с 256 символа текст длиной 255 символов.

Теперь нужно будет продублировать здесь строку для замены значений, укажем переменные temp , temp2 , здесь мы сделаем заменяемое значение text2 .

Теперь мы шагнем от 256 + 255 равно 511, начиная с 512 символа мы опять шагнем на 255 символов.

Ещё продублирую строку замены, переменная temp3 , значение text3 .

Как нам указать в шаблоне заменяемые значения? А мы их ведем просто в наш шаблон, уже есть вот эта строка &text , мы её скопируем и вставим несколько раз, дописав числа 2 и 3.

То есть у нас всякий раз вот этот фрагмент текст будет заменяться на значения из наших переменных temp , temp2 , temp3 . Можно в коде VBA продолжать добавлять разбивку основного текста на части, но будьте внимательны, указывая смещение и длину символов. Соответствующе правки так же вносите в шаблон.

Давайте попробуем запустить и посмотрим, что получится, закрыли, свернули.

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

Следующие файлы так же сформировались, но тут у нас все осталось как обычно.

То есть у нас 512 + 255 получается 767, следующий шаг в 255 символов можно делать с 768 знака.

У нас же есть ещё место и дальше можно продолжать опять там делать дальше разбивку, если у вас будет очень большой текст.

ДЛСТР — функция в Excel с примерами — Справочник функций Excel

Обратите внимание на 5 и 6 строки — поскольку функция «ПОДСТАВИТЬ» чувствительна к регистру, из текста ею не было удалено первое вхождение. Если нужно учитывать вхождения в любом регистре, могут понадобиться функции СТРОЧН или ПРОПИСН.

Функция ЛЕВСИМВ

Возвращает подстроку из текста в порядке слева направо в заданном количестве символов.

Синтаксис: =ЛЕВСИМВ(текст; [количество_знаков])

  • текст – строка либо ссылка на ячейку, содержащую текст, из которого необходимо вернуть подстроку;
  • количество_знаков – необязательный аргумент. Целое число, указывающее, какое количество символов необходимо вернуть из текста. По умолчанию принимает значение 1.

Формула: =ЛЕВСИМВ(«Произвольный текст»;8) – возвращенное значение «Произвол».

Источник

Понравилась статья? Поделить с друзьями:
  • Excel разбить ячейку по запятой
  • Excel разбить ячейку на несколько по пробелам
  • Excel разбить ячейки если
  • Excel разбить таблицу при печати
  • Excel разбить таблицу на таблицы