Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Количество повторяющихся значений подряд - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Количество повторяющихся значений подряд
KyDecHuk_83 Дата: Воскресенье, 09.08.2026, 13:38 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 23
Репутация: 0 ±
Замечаний: 0% ±

2007
Здравствуйте,

По возможности прошу помочь с формулой.
Есть таблица прилагаемого вида, для искомой команды хотелось бы получить в ячейке значение - сколько игр (туров) подряд до отчетного матча команда играла без ничейного результата.

Ранее задавал на форуме похожий вопрос, но для немного измененного формата таблицы.
Получил работающую формулу, задается как формула массива.
Массив в любом случае д.б. применен для рассматриваемого случая?

Спасибо.
К сообщению приложен файл: 3225811.xlsx (15.4 Kb)
 
Ответить
СообщениеЗдравствуйте,

По возможности прошу помочь с формулой.
Есть таблица прилагаемого вида, для искомой команды хотелось бы получить в ячейке значение - сколько игр (туров) подряд до отчетного матча команда играла без ничейного результата.

Ранее задавал на форуме похожий вопрос, но для немного измененного формата таблицы.
Получил работающую формулу, задается как формула массива.
Массив в любом случае д.б. применен для рассматриваемого случая?

Спасибо.

Автор - KyDecHuk_83
Дата добавления - 09.08.2026 в 13:38
Gustav Дата: Понедельник, 10.08.2026, 02:23 | Сообщение № 2
Группа: Админы
Ранг: Участник клуба
Сообщений: 2883
Репутация: 1224 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
В версии Excel 2007 я бы решал задачу так: создал бы промежуточную табличку, в которой строки будут команды, а столбцы - туры. Я сделал это в диапазоне I26:O35 (см. на рисунке)


В области данных этой таблички, в диапазоне J28:M35, на пересечении строки команды и столбца тура ставим "1", если результат "Нет ничьей" или ставим "0", если результат "Ничья". Далее в колонке "СЦЕПКА" собираем нули и единицы в общую строку, в которой затем ищем непрерывную подстроку из единиц максимальной длины. Длина этой максимальной строки и будет ответом на интересующий вопрос.

Формула для ячейки J28 - формула массива с вводом по Ctrl+Shift+Enter (после ввода в одну ячейку распространить на диапазон J28:M35):
Код
=--("Нет ничьей"=ИНДЕКС($G$6:$G$999; ЕСЛИОШИБКА(ПОИСКПОЗ(1;($B$6:$B$999=J$27)*($C$6:$C$999=$I28);0);ПОИСКПОЗ(1;($B$6:$B$999=J$27)*($D$6:$D$999=$I28);0))))


Формула для ячейки N28 - обычная, не массивная (после ввода в одну ячейку распространить на диапазон N28:N35):
Код
=СЦЕПИТЬ(J28;K28;L28;M28)


Формула для ячейки O28 - формула массива с вводом по Ctrl+Shift+Enter (после ввода в одну ячейку распространить на диапазон O28:O35):
Код
=МАКС(ЕСЛИОШИБКА(ДЛСТР(ПСТР(N28; ПОИСК(ПОВТОР("1"; СТРОКА(ДВССЫЛ("1:"&ДЛСТР(N28))));N28); СТРОКА(ДВССЫЛ("1:"&ДЛСТР(N28)))));0))


Вообще работать с такими формулами, пригодными для версии 2007, в 2026 году - занятие довольно тоскливое. Настоятельно рекомендую Вам подумать об обновлении до современных версий Excel, либо о переходе в Таблицы Гугл (последние - бесплатные, что не может не радовать). Современный уровень формулостроения в этих продуктах позволяет решить Вашу задачу довольно лихо, а при использовании функции LET - вообще одной(!) суперформулой.

P.S. Файлик Excel со своим решением, конечно, тоже приложу :)
К сообщению приложен файл: 7753413.png (52.5 Kb) · 6291819.xlsx (15.7 Kb)


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеВ версии Excel 2007 я бы решал задачу так: создал бы промежуточную табличку, в которой строки будут команды, а столбцы - туры. Я сделал это в диапазоне I26:O35 (см. на рисунке)


В области данных этой таблички, в диапазоне J28:M35, на пересечении строки команды и столбца тура ставим "1", если результат "Нет ничьей" или ставим "0", если результат "Ничья". Далее в колонке "СЦЕПКА" собираем нули и единицы в общую строку, в которой затем ищем непрерывную подстроку из единиц максимальной длины. Длина этой максимальной строки и будет ответом на интересующий вопрос.

Формула для ячейки J28 - формула массива с вводом по Ctrl+Shift+Enter (после ввода в одну ячейку распространить на диапазон J28:M35):
Код
=--("Нет ничьей"=ИНДЕКС($G$6:$G$999; ЕСЛИОШИБКА(ПОИСКПОЗ(1;($B$6:$B$999=J$27)*($C$6:$C$999=$I28);0);ПОИСКПОЗ(1;($B$6:$B$999=J$27)*($D$6:$D$999=$I28);0))))


Формула для ячейки N28 - обычная, не массивная (после ввода в одну ячейку распространить на диапазон N28:N35):
Код
=СЦЕПИТЬ(J28;K28;L28;M28)


Формула для ячейки O28 - формула массива с вводом по Ctrl+Shift+Enter (после ввода в одну ячейку распространить на диапазон O28:O35):
Код
=МАКС(ЕСЛИОШИБКА(ДЛСТР(ПСТР(N28; ПОИСК(ПОВТОР("1"; СТРОКА(ДВССЫЛ("1:"&ДЛСТР(N28))));N28); СТРОКА(ДВССЫЛ("1:"&ДЛСТР(N28)))));0))


Вообще работать с такими формулами, пригодными для версии 2007, в 2026 году - занятие довольно тоскливое. Настоятельно рекомендую Вам подумать об обновлении до современных версий Excel, либо о переходе в Таблицы Гугл (последние - бесплатные, что не может не радовать). Современный уровень формулостроения в этих продуктах позволяет решить Вашу задачу довольно лихо, а при использовании функции LET - вообще одной(!) суперформулой.

P.S. Файлик Excel со своим решением, конечно, тоже приложу :)

Автор - Gustav
Дата добавления - 10.08.2026 в 02:23
KyDecHuk_83 Дата: Понедельник, 10.08.2026, 06:46 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 23
Репутация: 0 ±
Замечаний: 0% ±

2007
Да, наверное стоит обновиться.
Жаль, конечно, что для версии 2007 нет удобного решения.
Спасибо за развернутый ответ.
 
Ответить
СообщениеДа, наверное стоит обновиться.
Жаль, конечно, что для версии 2007 нет удобного решения.
Спасибо за развернутый ответ.

Автор - KyDecHuk_83
Дата добавления - 10.08.2026 в 06:46
Gustav Дата: Понедельник, 10.08.2026, 15:53 | Сообщение № 4
Группа: Админы
Ранг: Участник клуба
Сообщений: 2883
Репутация: 1224 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Я задействовал ИИ и получил шикарную формулу для Гугл Таблиц (см. ниже). Привожу свои реплики (промпты), которые я написал в процессе диалога с ИИ:

Цитата
Есть Гугл Таблица по ссылке https://docs.google.com/spreads....0#gid=0
Нужно написать формулу, вычисляющую на листе Лист1 значения в диапазоне O28:O35 для списка команд, заданных в диапазоне I28:I35

я хочу единственную формулу динамического массива с LET для ячейки O28, формула должна содержать все промежуточные вычисления

вместо ОБЪЕДИНИТЬ можно использовать JOIN

исход матча это колонка G6:G21

В Гугл Таблице эта формула работает с явным указанием функкции ArrayFormula вокруг LET

Результатом переписки с ИИ стала единственная формула для ячейки O28 (я ее для наглядности поместил в следующую ячейку P28):

[vba]
Код
=ArrayFormula(LET(
  список_команд; I28:I35;
  матчи_команда1; C6:C;
  матчи_команда2; D6:D;
  исход_матча; G6:G;

  BYROW(список_команд; LAMBDA(команда;
    LET(
      фильтр_исходов; TRANSPOSE(FILTER(исход_матча; (матчи_команда1=команда) + (матчи_команда2=команда)));
      бинарный_массив; IF(фильтр_исходов="Нет ничьей"; "1"; "0");
      строка_результатов; JOIN(""; бинарный_массив);
      массив_длин; LEN(SPLIT(строка_результатов; "0"));
      IFERROR(MAX(массив_длин); 0)
    )
  ))
))
[/vba]
В основном формулу разработал ИИ (Gemini, как я понимаю - в общем, тот, который в Хроме по умолчанию доступен). Я лишь скорректировал некоторые адреса диапазонов (в частности "исход_матча"), добавил TRANSPOSE и обернул LET в функцию ArrayFormula (без нее не хотели правильно считаться "бинарный_массив" и "массив_длин").

Согласитесь, результат - убойный и потрясающе наглядный. И заметьте, все имена переменных придумал ИИ, причем, придумал нехило продуманно и обоснованно!

Я поместил решение в свою Гугл Таблицу с общим доступом на чтение. Каждый желающий может скопировать ее к себе на свой Гугл Диск и поиграться с решением.
Ссылка: https://docs.google.com/spreads....sharing
ID таблицы (если ссылка когда-нибудь перестанет работать): 156TzXvNqs8EAOMEjlg6zz9H49D40iIGDQKSkE9IZDEU


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеЯ задействовал ИИ и получил шикарную формулу для Гугл Таблиц (см. ниже). Привожу свои реплики (промпты), которые я написал в процессе диалога с ИИ:

Цитата
Есть Гугл Таблица по ссылке https://docs.google.com/spreads....0#gid=0
Нужно написать формулу, вычисляющую на листе Лист1 значения в диапазоне O28:O35 для списка команд, заданных в диапазоне I28:I35

я хочу единственную формулу динамического массива с LET для ячейки O28, формула должна содержать все промежуточные вычисления

вместо ОБЪЕДИНИТЬ можно использовать JOIN

исход матча это колонка G6:G21

В Гугл Таблице эта формула работает с явным указанием функкции ArrayFormula вокруг LET

Результатом переписки с ИИ стала единственная формула для ячейки O28 (я ее для наглядности поместил в следующую ячейку P28):

[vba]
Код
=ArrayFormula(LET(
  список_команд; I28:I35;
  матчи_команда1; C6:C;
  матчи_команда2; D6:D;
  исход_матча; G6:G;

  BYROW(список_команд; LAMBDA(команда;
    LET(
      фильтр_исходов; TRANSPOSE(FILTER(исход_матча; (матчи_команда1=команда) + (матчи_команда2=команда)));
      бинарный_массив; IF(фильтр_исходов="Нет ничьей"; "1"; "0");
      строка_результатов; JOIN(""; бинарный_массив);
      массив_длин; LEN(SPLIT(строка_результатов; "0"));
      IFERROR(MAX(массив_длин); 0)
    )
  ))
))
[/vba]
В основном формулу разработал ИИ (Gemini, как я понимаю - в общем, тот, который в Хроме по умолчанию доступен). Я лишь скорректировал некоторые адреса диапазонов (в частности "исход_матча"), добавил TRANSPOSE и обернул LET в функцию ArrayFormula (без нее не хотели правильно считаться "бинарный_массив" и "массив_длин").

Согласитесь, результат - убойный и потрясающе наглядный. И заметьте, все имена переменных придумал ИИ, причем, придумал нехило продуманно и обоснованно!

Я поместил решение в свою Гугл Таблицу с общим доступом на чтение. Каждый желающий может скопировать ее к себе на свой Гугл Диск и поиграться с решением.
Ссылка: https://docs.google.com/spreads....sharing
ID таблицы (если ссылка когда-нибудь перестанет работать): 156TzXvNqs8EAOMEjlg6zz9H49D40iIGDQKSkE9IZDEU

Автор - Gustav
Дата добавления - 10.08.2026 в 15:53
i691198 Дата: Вторник, 11.08.2026, 14:12 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 485
Репутация: 149 ±
Замечаний: 0% ±

2016
Здравствуйте. Для новых офисов можно такой формулой
Код
=LET(F;ФИЛЬТР(--($G$6:$G$35="Нет ничьей");($C$6:$C$35=J8)+($D$6:$D$35=J8));Z;ПОСЛЕД(СЧЁТЗ(F));МАКС(ЧАСТОТА(Z;(F<>1)*Z)-1))
К сообщению приложен файл: sample_40.xlsx (11.5 Kb)
 
Ответить
СообщениеЗдравствуйте. Для новых офисов можно такой формулой
Код
=LET(F;ФИЛЬТР(--($G$6:$G$35="Нет ничьей");($C$6:$C$35=J8)+($D$6:$D$35=J8));Z;ПОСЛЕД(СЧЁТЗ(F));МАКС(ЧАСТОТА(Z;(F<>1)*Z)-1))

Автор - i691198
Дата добавления - 11.08.2026 в 14:12
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2026 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!