powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Формула массива для работы с номером в ячейке, суммирование чётных и нечётных, выделение
21 сообщений из 46, страница 2 из 2
Формула массива для работы с номером в ячейке, суммирование чётных и нечётных, выделение
    #37425961
Фотография vikttur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо, что подняли тему. Моя последняя формула ошибочна - выдает не одно число, а массив из двух чисел. Не там стоит скобка, да последний массив записан наоборот, нужно " {3;1} "
С учетом последних пожеланий исправленная:

Код: plaintext
1.
=ЕСЛИ(ИЛИ(ДЛСТР(B3)={8;13})*ЕЧИСЛО(B3);ЕСЛИ(10-ПРАВСИМВ(СУММ(--ПСТР(B3-ПРАВСИМВ(B3)&ПОВТОР("0";13);СТРОКА($1:$6)*2-{0;1};1)*{3;1}))=--ПРАВСИМВ(B3);"ОК";"Штрих-код не верен!");"Кто код испортил? Переписать!")

При длине строки не равной 8 или 13, или если код записан не числом - предупреждение;
Если контрольное число не совпадает - другое предупреждение.

Ivan33, у Вас еще небольшая ошибка: при протягивании формулы нужно было закрепить СТРОКА($1:$150) .
...
Рейтинг: 0 / 0
Формула массива для работы с номером в ячейке, суммирование чётных и нечётных, выделение
    #37425964
Фотография vikttur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan33, в Вашем примере есть Проверка_4. Что это, не понял.
...
Рейтинг: 0 / 0
Формула массива для работы с номером в ячейке, суммирование чётных и нечётных, выделение
    #37426154
Михаил Ч.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vikttur
Код: plaintext
1.
=ЕСЛИ(ИЛИ(ДЛСТР(B3)={8;13})*ЕЧИСЛО(B3);ЕСЛИ(10-ПРАВСИМВ(СУММ(--ПСТР(B3-ПРАВСИМВ(B3)&ПОВТОР("0";13);СТРОКА($1:$6)*2-{0;1};1)*{3;1}))=--ПРАВСИМВ(B3);"ОК";"Штрих-код не верен!");"Кто код испортил? Переписать!")

Вариант с проверками:
Код: plaintext
=ЕСЛИ(И(ЕЧИСЛО(-B3);ИЛИ(ДЛСТР(B3)={8;12;13}));ЕСЛИ(ОСТАТ(СУММ(ПСТР(ТЕКСТ(B3;ПОВТОР(0;14));{1:3:5:7:9:11:13}+{0;1};1)*{3;1});10);"Ошибка в штрихкоде";"ОК");"Это не штрихкод")

Виктор, твой вариант формулы на штрихкодах 50705689 и 46009333 (EAN-8), вадает "Штрих-код не верен!", хотя штрихкод верный, а на коде 12345678 - "ОК", хотя он не верный
...
Рейтинг: 0 / 0
Формула массива для работы с номером в ячейке, суммирование чётных и нечётных, выделение
    #37426166
Фотография vikttur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно, ты прав. Я не смотрел логику вычисления разных стандартов, использовал логику первого поста автора. По авторскому варианту формула работает:
10-ПРАВСИМВ(СУММ(четных)*3+СУММ(нечетных))
По этой формуле в коде 50705689 контрольное число должно быть 7:
10-(ПРАВСИМВ((0+0+6)*3+(5+7+5+8))=7
...
Рейтинг: 0 / 0
Формула массива для работы с номером в ячейке, суммирование чётных и нечётных, выделение
    #37426176
Михаил Ч.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vikttur,
Ссылку на Википедию давал выше, свою формулу делал строго по принцыпу, указанному там
...
Рейтинг: 0 / 0
Формула массива для работы с номером в ячейке, суммирование чётных и нечётных, выделение
    #37426179
Фотография vikttur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрел по ссылке. Да, расчет отличается.
...
Рейтинг: 0 / 0
Формула массива для работы с номером в ячейке, суммирование чётных и нечётных, выделение
    #37426181
Фотография vikttur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь я понял, почему автор упорно хотел формулу для 8- и 13-значных кодов :)
...
Рейтинг: 0 / 0
Формула массива для работы с номером в ячейке, суммирование чётных и нечётных, выделение
    #37426339
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Ч.ИЛИ(ДЛСТР(B3)={8;12;13}))

Михаил, вот в этот кусочего можно включать и другие фиксированные размеры? например 128, 256?
...
Рейтинг: 0 / 0
Формула массива для работы с номером в ячейке, суммирование чётных и нечётных, выделение
    #37426346
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
viktturIvan33, в Вашем примере есть Проверка_4. Что это, не понял.это попытка подсчитать повторы в диапазоне. То есть штрих-код не должен повторяться в этом диапазоне. То есть их может быть несколько, но не повторяться. Делать пытался это через массив, однако это не совсем то, что было надо. Была попытка подсчитать в одной ячейке количество повторов. Если их больше 1 для одного кода, то считать это повтором.
...
Рейтинг: 0 / 0
Формула массива для работы с номером в ячейке, суммирование чётных и нечётных, выделение
    #37426355
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
viktturIvan33, в Вашем примере есть Проверка_4. Что это, не понял. Поэтому, как оказалось, повторы подсчитываются относительно первой ячейки диапазона. Если смотреть пример, что приложил, то формула работает если её по строкам растянуть.
...
Рейтинг: 0 / 0
Формула массива для работы с номером в ячейке, суммирование чётных и нечётных, выделение
    #37426471
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
viktturIvan33, в Вашем примере есть Проверка_4. Что это, не понял. хотя на неё не обращайте внимание. она и такая сгодится.
...
Рейтинг: 0 / 0
Формула массива для работы с номером в ячейке, суммирование чётных и нечётных, выделение
    #37426850
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, просветите ещё по теме. Пытаюсь сделать то же с ИНН (см. ссылку на википедию). Там они, эти номера, могут быть 12 и 10 символов.

Что не очень понять пример, с авторОСТАТ(СУММ(ПСТР(ТЕКСТ(C27;ПОВТОР(0;14));{1:3:5:7:9:11:13}+{0;1};1)*{3;1});10)

для ИНН

500100732259 (12 символов)

и формулы

автор=СУММ(ПСТР(ТЕКСТ(C14;ПОВТОР(0;13));{1:2:3:4:5:6:7:8:9:10};1)*{7;2;4;10;3;5;9;4;6;8}) получается 1024, а должно 148. понимаю, что ерунда и нужен ещё какой-то параметр типа автор+{0;1}
...
Рейтинг: 0 / 0
Формула массива для работы с номером в ячейке, суммирование чётных и нечётных, выделение
    #37426935
Фотография vikttur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С остатком нет сложностей:
Код: plaintext
=ОСТАТ(сумма;10)

Что суммирует СУММ()?
Код: plaintext
ПСТР(ТЕКСТ(C27;ПОВТОР(0;14));{1:3:5:7:9:11:13}+{0;1};1)*{3;1}
Упрощенно ПСТР(текст;нач_позиция;1)*{3;1}
Код: plaintext
текст=ТЕКСТ(C27;ПОВТОР(0;14)) 
- добавляем нули справа чтобы избежать ошибки, если длина кода меньше.
Код: plaintext
нач_позиция={1:3:5:7:9:11:13}+{0;1}
- последовательный выбор начальной позиции; с помощью +{0;1} создается два массива - нечетных чисел ({1:3:5:7:9:11:13}+0) и четных чисел ({1:3:5:7:9:11:13}+1). Т.е. функция ПСТР() выбирает один знак кода ("1" в конце функции), порядковый номер которого задается массивами четных и нечетных чисел.
ПСТР(...)*{3;1} - числа массива, который суммировался с нулем, умножается на 3, числа второго массива на 1.
В итоге массивы суммируются.
...
Рейтинг: 0 / 0
Формула массива для работы с номером в ячейке, суммирование чётных и нечётных, выделение
    #37426991
Михаил Ч.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для ИНН

ИНН12 (две контрольные цифры):
Код: plaintext
=И(ПРАВСИМВ(ОСТАТ(СУММ(ПСТР(B2;СТРОКА($1:$10);1)*{7:2:4:10:3:5:9:4:6:8});11))=ПСТР(B2;11;1);ПРАВСИМВ(ОСТАТ(СУММ(ПСТР(B2;СТРОКА($1:$11);1)*{3:7:2:4:10:3:5:9:4:6:8});11))=ПРАВСИМВ(B2))

ИНН10 (одна контрольная цифра):
Код: plaintext
=ПРАВСИМВ(ОСТАТ(СУММ(ПСТР(B3;СТРОКА($1:$9);1)*{2:4:10:3:5:9:4:6:8});11))=ПРАВСИМВ(B3)
...
Рейтинг: 0 / 0
Формула массива для работы с номером в ячейке, суммирование чётных и нечётных, выделение
    #37427597
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Ч.Для ИНН

ИНН12 (две контрольные цифры):
Код: plaintext
=И(ПРАВСИМВ(ОСТАТ(СУММ(ПСТР(B2;СТРОКА($1:$10);1)*{7:2:4:10:3:5:9:4:6:8});11))=ПСТР(B2;11;1);ПРАВСИМВ(ОСТАТ(СУММ(ПСТР(B2;СТРОКА($1:$11);1)*{3:7:2:4:10:3:5:9:4:6:8});11))=ПРАВСИМВ(B2))

ИНН10 (одна контрольная цифра):
Код: plaintext
=ПРАВСИМВ(ОСТАТ(СУММ(ПСТР(B3;СТРОКА($1:$9);1)*{2:4:10:3:5:9:4:6:8});11))=ПРАВСИМВ(B3)
результат. почему-то в обоих случаях ЛОЖЬ.
...
Рейтинг: 0 / 0
Формула массива для работы с номером в ячейке, суммирование чётных и нечётных, выделение
    #37427598
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Ч.Для ИНН

ИНН12 (две контрольные цифры):
Код: plaintext
=И(ПРАВСИМВ(ОСТАТ(СУММ(ПСТР(B2;СТРОКА($1:$10);1)*{7:2:4:10:3:5:9:4:6:8});11))=ПСТР(B2;11;1);ПРАВСИМВ(ОСТАТ(СУММ(ПСТР(B2;СТРОКА($1:$11);1)*{3:7:2:4:10:3:5:9:4:6:8});11))=ПРАВСИМВ(B2))

ИНН10 (одна контрольная цифра):
Код: plaintext
=ПРАВСИМВ(ОСТАТ(СУММ(ПСТР(B3;СТРОКА($1:$9);1)*{2:4:10:3:5:9:4:6:8});11))=ПРАВСИМВ(B3)
или это формула массива? а в линейную формулу это не получится уложить?
...
Рейтинг: 0 / 0
Формула массива для работы с номером в ячейке, суммирование чётных и нечётных, выделение
    #37427602
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Ч.Для ИНН

ИНН12 (две контрольные цифры):
Код: plaintext
=И(ПРАВСИМВ(ОСТАТ(СУММ(ПСТР(B2;СТРОКА($1:$10);1)*{7:2:4:10:3:5:9:4:6:8});11))=ПСТР(B2;11;1);ПРАВСИМВ(ОСТАТ(СУММ(ПСТР(B2;СТРОКА($1:$11);1)*{3:7:2:4:10:3:5:9:4:6:8});11))=ПРАВСИМВ(B2))

ИНН10 (одна контрольная цифра):
Код: plaintext
=ПРАВСИМВ(ОСТАТ(СУММ(ПСТР(B3;СТРОКА($1:$9);1)*{2:4:10:3:5:9:4:6:8});11))=ПРАВСИМВ(B3)
с массивом вроде работает. тут просто проверка тоже нужна. если, не уложить, то всё равно спасибо. сколько надо долбить экцель, чтобы такие штуки делать?
...
Рейтинг: 0 / 0
Формула массива для работы с номером в ячейке, суммирование чётных и нечётных, выделение
    #37427607
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Ч.с массивом вроде работает. пардон, вот правильный с массивом.
...
Рейтинг: 0 / 0
Формула массива для работы с номером в ячейке, суммирование чётных и нечётных, выделение
    #37427610
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
viktturС остатком нет сложностей:
Код: plaintext
=ОСТАТ(сумма;10)

Что суммирует СУММ()?
Код: plaintext
ПСТР(ТЕКСТ(C27;ПОВТОР(0;14));{1:3:5:7:9:11:13}+{0;1};1)*{3;1}
Упрощенно ПСТР(текст;нач_позиция;1)*{3;1}
Код: plaintext
текст=ТЕКСТ(C27;ПОВТОР(0;14)) 
- добавляем нули справа чтобы избежать ошибки, если длина кода меньше.
Код: plaintext
нач_позиция={1:3:5:7:9:11:13}+{0;1}
- последовательный выбор начальной позиции; с помощью +{0;1} создается два массива - нечетных чисел ({1:3:5:7:9:11:13}+0) и четных чисел ({1:3:5:7:9:11:13}+1). Т.е. функция ПСТР() выбирает один знак кода ("1" в конце функции), порядковый номер которого задается массивами четных и нечетных чисел.
ПСТР(...)*{3;1} - числа массива, который суммировался с нулем, умножается на 3, числа второго массива на 1.
В итоге массивы суммируются.Виктор, спасибо.
...
Рейтинг: 0 / 0
Формула массива для работы с номером в ячейке, суммирование чётных и нечётных, выделение
    #37428261
Михаил Ч.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan33или это формула массива? а в линейную формулу это не получится уложить?
Можно сделать и без массивного ввода:
Код: plaintext
=И(ПРАВСИМВ(ОСТАТ(СУММПРОИЗВ(ПСТР(B2;{1:2:3:4:5:6:7:8:9:10};1)*{7:2:4:10:3:5:9:4:6:8});11))=ПСТР(B2;11;1);ПРАВСИМВ(ОСТАТ(СУММПРОИЗВ(ПСТР(B2;{1:2:3:4:5:6:7:8:9:10:11};1)*{3:7:2:4:10:3:5:9:4:6:8});11))=ПРАВСИМВ(B2))

Код: plaintext
=ПРАВСИМВ(ОСТАТ(СУММПРОИЗВ(ПСТР(B3;{1:2:3:4:5:6:7:8:9};1)*{2:4:10:3:5:9:4:6:8});11))=ПРАВСИМВ(B3)

тема называется "Формула массива...", поэтому предложил соответствующую формулу.

Думаю, что вместо СТРОКА(...), в данном случае, лучше использовать массив констант. Будет уверенность, что формулы не нарушатся при вставке/удалении строк
...
Рейтинг: 0 / 0
Формула массива для работы с номером в ячейке, суммирование чётных и нечётных, выделение
    #37430409
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил Ч.
Код: plaintext
=И(ПРАВСИМВ(ОСТАТ(СУММПРОИЗВ(ПСТР(B2;{1:2:3:4:5:6:7:8:9:10};1)*{7:2:4:10:3:5:9:4:6:8});11))=ПСТР(B2;11;1);ПРАВСИМВ(ОСТАТ(СУММПРОИЗВ(ПСТР(B2;{1:2:3:4:5:6:7:8:9:10:11};1)*{3:7:2:4:10:3:5:9:4:6:8});11))=ПРАВСИМВ(B2))

Спасибо, Михаил, работает. Пришлось для применения с функцией ЕСЛИ (проверки) сделать промежуточные ячейки. А то формула с ЕСЛИ ругалась на уровень вложенности.
...
Рейтинг: 0 / 0
21 сообщений из 46, страница 2 из 2
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Формула массива для работы с номером в ячейке, суммирование чётных и нечётных, выделение
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]