Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
Подсчет длительности времени в Таблицах Гугл (Google Sheets), делаем подсчёт длительности времени в формате ММ:СС.000 в Таблицах Гугл (Google Sheets)
 
пока не совсем понял.

в примере вы подставили
Код
INDEX(SPLIT(INDEX(SPLIT(substitute(C4;".";";");":");2);";");1)
и там также отображается ерунда в виде 40:16.11

пробовал вот так
0:20,11 (запятая)
0:20;11 (точка с запятой)
0:20:11 (двоеточие)

в таком виде расчёт вообще исчезает.
Подсчет длительности времени в Таблицах Гугл (Google Sheets), делаем подсчёт длительности времени в формате ММ:СС.000 в Таблицах Гугл (Google Sheets)
 
Продолжение следует...

в общем эксперимент привел к выводу, что либо у Гугла проблема с числом 11 (одиннадцать), либо у меня в коде что-то не так.

проблема заключается в том, что если ДОЛИ СЕКУНДЫ ставить цифры 11, то что-то странное происходит с кодом, и он сходит с ума.


Задача (напомню):
(пример специально показан на одном листе)

- на одном листе вводим время спортсмена по маске AA:BB.XX,
ГДЕ:
АА - минуты,
BB - секунды,
XX - доли секунды

- на другом листе автоматически появляется преобразования этого времени по формуле:
Код
=ЕСЛИОШИБКА((((ИНДЕКС(SPLIT(C4;":");1)*60+ИНДЕКС(SPLIT(ИНДЕКС(SPLIT(C4;":");2);".");1)+ИНДЕКС(SPLIT(C4;".");2)/100))/86400);"")
для подсчёта занятого места.


Замечено, что если ДОЛИ СЕКУНДЫ в себе содержать цифру 11 ( на пример 00:11.11 ),
то мы получаем вместо правильно введенного времени 00:11.11 вот такую преобразованную ерунду - 40:07.11

Посмотрите пожалуйста, что у меня в коде не так...?
https://docs.google.com/spreadsheets/d/1EG40YLxYqhM7BZa4jP4cbh9KG4VEfPd_aYk8rQw8­qjY/edit?usp=sharing
Поиск определенных слов в ячейке (Google Таблицы), ищем определенные слова в ячейке и пишем ИСТИНА или ЛОЖЬ
 
Код
=ИЛИ(СЧЁТЕСЛИ(I15;"*ябл*")>0;СЧЁТЕСЛИ(I15;"*просроч*")>0;СЧЁТЕСЛИ(I15;"*под*")>0)

вот так вроде работает
Поиск определенных слов в ячейке (Google Таблицы), ищем определенные слова в ячейке и пишем ИСТИНА или ЛОЖЬ
 
спасибо. работает.

однако тут можно поместить только одно условие (одно поисковое слово).
а мне как раз надо несколько разных:
Код
=СЧЁТЕСЛИ(I15;"*ябл*";"*нз*";"*просроч*")>0

Но в таком случае формула не работает.

...может как-то или завернуть в СЧЕТЕСЛИ ?

Код
=СЧЁТЕСЛИ(I15;(ИЛИ(I15="яблоко";I15="ябл";I15="нз";I15="просроч")))>0

и так тоже не работает.

Поиск определенных слов в ячейке (Google Таблицы), ищем определенные слова в ячейке и пишем ИСТИНА или ЛОЖЬ
 
Задача:
есть ячейка КОММЕНТАРИИ.
в этой ячейке могут находится разные слова, в том числе и знаки препинания.

Задача вычленить из этой ячейки определенные слова, и в строке с формулой написать ИСТИНА или ЛОЖЬ

Рабочий вариант для этих целей не нашел.

Пока только сообразил вот так:
Код
=ИЛИ(E8="яблоко";E8="ябл")
Но, если оставляем такой вариант, то при добавлении в ячейку с комментариями хотя бы одну лишнюю  букву - оператор ИЛИ пишет ЛОЖЬ

Может, кто подскажет вариант?
Зависимый выпадающий список в ГуглТаблицах, зависимый выпадающий список на AppScript
 
Работает.
спасибо вам добрый человек  :D  ещё раз за помощь.

Цитата
написал:
потому что нигде нет выхода из скрипта, если активен какой-то другой лист или указание ему работать только в том случае, если изменения на конкретном листе сделаны. Вот он и работает на всех.

я где-то в глубине души догадывался об этом  :D  но опять-таки... не понимая логики работы скрипта - трудно вносить свои изменения. а логику работы скрипта поймать трудно когда ты гуманитарий - ум работает на другое  8)
Цитата
написал:
А вспомнить, что Вам в Вашей же теме ранее уже показывали код, который будет на конкретном листе срабатывать тоже не было времени?  
да, именно эту тему и вспомнил сразу  8)  и даже подставлял кусок кода... как мне казалось вот этого:
Код
var sheet = SpreadsheetApp.getActiveSheet(); 
if (sheet.getName() == "ЗАЯВКИ"){
но что-то в момент вставки он у меня не работал....


Может тогда вы знаете, как заменить стиль у выпадающих списков?
По стандарту списки идут в стиле "Стрелка", а мне бы заменить на стиль "Чип".

Проблема в том, что когда меняешь значение в основном списке в 6-й колонке(стиль ЧИП), то какой бы стиль не стоял в 8й и 9й колонке - в этих колонках стиль постоянно сбрасывается, так как зависимые списки обновляются. Стиль ЧИП остаётся только в основной 6й колонке.
Изменено: Данил И - 03.05.2023 13:28:26
Зависимый выпадающий список в ГуглТаблицах, зависимый выпадающий список на AppScript
 
Понадобилось тут сделать зависимый выпадающий список. Не нашел ничего лучше, как видеоурок  :D написания скрипта на AppScript.

Задача скрипта:
- в 6-й колонке находится выпадающий список, и при выборе определенного значения из этого списка в 8й и 9й колонке выпадают зависимые от 6й колонки списки… Скрипт работает. С этим всё ок.

Однако есть проблема: скрипт работает НА ВСЕХ листах вместо определённого… Хотя в скрипте точно указал лист на котором он должен работать…

Может кто в курсе, что в этом скрипте не так? Почему он работает сразу на всех листах?
Код
function onEdit(){
let ss = SpreadsheetApp.getActiveSpreadsheet();
let sheet = ss.getSheetByName("ЗАЯВКИ");
let sheetDb = ss.getSheetByName("SYS_LIST_CATEGORY");

let ar = sheet.getActiveCell();
if(ar.getColumn()!==6){return}
let valToFind = ar.getValue();
ar.offset(0, 3).clearContent().clearDataValidations();
ar.offset(0, 2).clearContent().clearDataValidations();

let values = sheetDb.getRange(9,1,1,sheetDb.getLastColumn()).getValues();

let col = values[0].indexOf(valToFind)+1;
console.log(col);
let range = sheetDb.getRange(10, col, 3,1).getValues();
//для установки неопределенного диапазона
//let range = sheetDb.getRange(10, col, 3,1);
console.log(range);
let validation = SpreadsheetApp.newDataValidation().requireValueInList(range).build();
//для установки неопределенного диапазона
//let validation = SpreadsheetApp.newDataValidation().requireValueInRange(range).build();

//sheet.getRange(ar.getRow(), 2).setDataValidation(validation);
ar.offset(0, 2).setDataValidation(validation);
ar.offset(0, 3).setDataValidation(validation);
}


PS
да, времени не было создавать ещё один GoogleSheets с примером, чтобы его можно было увидеть по ссылке.
Подсчет длительности времени в Таблицах Гугл (Google Sheets), делаем подсчёт длительности времени в формате ММ:СС.000 в Таблицах Гугл (Google Sheets)
 
Цитата
написал:
нигде не увидел подобного. Возможно где-то с форматами напутали.
да, сейчас всё нормально отображается. наверно был глюк с форматами ячейки.

спасибо. формула работает - вставил формулу куда надо  ;)  и всё сразу заработало без глюков.
Всё чётко работает на ПК в браузере и на мобильных устройствах в приложении ГуглТаблицы.
Подсчет длительности времени в Таблицах Гугл (Google Sheets), делаем подсчёт длительности времени в формате ММ:СС.000 в Таблицах Гугл (Google Sheets)
 
Спасибо. Теперь более-менее понятно. То есть, функции всё равно сколько цифр после точки?


Но у меня ко что-то не получается.
Посмотрите, в таблице, время напротив красных галочек, там ВРЕМЯ написано 02:30.122 (ММ:СС.ссс), а в результатах (рядом красные цифры) формула пересчитала как 24:02.122


Почему так?

PS
конкретно в этом примере формула нужна для нормальной работы ранжирования занятых мест. Иначе места не проставляются.
Подсчет длительности времени в Таблицах Гугл (Google Sheets), делаем подсчёт длительности времени в формате ММ:СС.000 в Таблицах Гугл (Google Sheets)
 
Цитата
написал:
Написал функцию ConvrtTime() , она преобразует  текст в секунды
спасибо.
в дебаге функция не может выполнится и пишет ошибку:
TypeError: Cannot read properties of undefined (reading 'split')

может по этому функция не работала в приложении Гугл Таблицы?
Подсчет длительности времени в Таблицах Гугл (Google Sheets), делаем подсчёт длительности времени в формате ММ:СС.000 в Таблицах Гугл (Google Sheets)
 
Да, спасибо.
Вот теперь работает на мобильных устройствах в приложении ГуглТаблицы.

А можно пояснить логику работы формулы. Пока что-то не понял. Но судя по всему Сплитом мы соединяем цифры, а Индексом ищем строку в ячейке с временем…

Я пытался изменить формулу под ДВЕ цифры после точки(на всякий), но не понимая логики работы формулы, так и не смог.
Подсчет длительности времени в Таблицах Гугл (Google Sheets), делаем подсчёт длительности времени в формате ММ:СС.000 в Таблицах Гугл (Google Sheets)
 
Да, работает.
Я немного подкорректировал формулу добавив =ЕСЛИОШИБКА

Однако работает "микс" из этих формул только на ПК в браузере.
На мобильных устройствах с использованием приложения "ГуглТаблицы" - работает наполовину...
То есть, при открытии таблицы в программе - постоянно горит надпись ЗАГРУЗКА ДАННЫХ. Но после того, как я обернул формулы в =ЕСЛИОШИБКА стало отображаться пустота... Однако, пересчёт(работа) формул сразу начинается если сделать любое изменение времени: добавив в существующее время 001 долю секунды.
Очень странная работа формул в приложении... дурь какая-то.

Может кто знает, как решить эту проблему? чтобы эти формулы работали и в приложении "ГуглТаблицы" для iOS и Android ?
Подсчет длительности времени в Таблицах Гугл (Google Sheets), делаем подсчёт длительности времени в формате ММ:СС.000 в Таблицах Гугл (Google Sheets)
 
Цитата
написал:
Мы еще меньше понимаем - файл, в котором Вы что-то хотите получить так и не видно.
сделал: https://docs.google.com/spreadsheets/d/1RMjBiFFmSPdFmYR2ICAL_cHOh_71xF9dJADCqJFN­QDs/edit?usp=sharing

Цитата
написал:
так складывайте.
складываю по вашему примеру... что-то не попёрло.
Пишет ошибку ЗНАЧ:
"Аргумент Параметр 1 в функции ADD поддерживает только значения типа "число". Тип значения "00:30.001" – текст, поэтому его нельзя привести к типу "число"."
Подсчет длительности времени в Таблицах Гугл (Google Sheets), делаем подсчёт длительности времени в формате ММ:СС.000 в Таблицах Гугл (Google Sheets)
 
Цитата
написал:
А вот ВРЕМЗНАЧ точно требует только один аргумент, а у Вас их два...
что-то я совсем запутался…
мне надо сложить две ячейки и получить результат в третьей ячейке….
два - так как надо сложить две ячейки.
пока ничего не понимаю…  :D

попробовал поставить один аргумент ВРЕМЗНАЧ для ячейки в которой будет результат - и тишина, как было 00:00.000, так и осталось
Изменено: Данил И - 26.04.2023 15:04:41
Подсчет длительности времени в Таблицах Гугл (Google Sheets), делаем подсчёт длительности времени в формате ММ:СС.000 в Таблицах Гугл (Google Sheets)
 
...я понятия не имею где взять этот чатGPT.
эта тема прошла как-то мимо меня.


прочитав одну статью, пример взял тут:
https://docs.google.com/spreadsheets/d/1zOWy919I6lLgOvAIF6fMyxoPTjGA9psnd-QJt9vmlW0/edit#gid=9686104...
(прямо в статье ссылка на этот пример)

но он же тут как-то работает и тоже без других аргументов...
Изменено: Данил И - 26.04.2023 11:11:06
Подсчет длительности времени в Таблицах Гугл (Google Sheets), делаем подсчёт длительности времени в формате ММ:СС.000 в Таблицах Гугл (Google Sheets)
 
Всем привет.
проблема с подсчётом времени...

есть таблица с ячейками "время-1" и "время-2" в формате ММ:СС.000 - то есть, минуты:секунды.долисекунды (три цифры после точки).

время-1                время-2                сумма
00:30.001              02:30.123                 ?
00:20.191              05:30.001                 ?
01:10.000              02:20.341                 ?


Задача подсчитать ячейку временем-1 + временем-2 и поставить результат в ячейку СУММА.

Проблема в том что формула =СУММ тут не работает, так как формат ММ:СС.000 почему-то считается за текст....

В интернете нашел только такое решение:
Код
=ArrayFormula(ТЕКСТ(СУММ(ЕСЛИОШИБКА(ВРЕМЗНАЧ(I6;K6)));"mm:ss.000"))

Но оно тоже не работает  :cry:
Может я что-то не так делаю?
Штамп даты в Таблицах Гугл (Google Sheets), автоматическая вставка даты в определенную ячейку при редактировании определенной ячейки
 
РЕШЕНО!

СПАСИБО !!!  :D  Всё работает. Штамп даты проставляет на нужном листе.

Код
function auto_set_date(){
var sheet = SpreadsheetApp.getActiveSheet(); 
if (sheet.getName() == "ЗАЯВКИ"){
var ar = sheet.getActiveRange();
var a_col = ar.getColumn();
if(a_col == 2 && ar.offset(0,6).getValue() == ""){
ar.offset(0,6).setValue(new Date());  
}
}
}
Штамп даты в Таблицах Гугл (Google Sheets), автоматическая вставка даты в определенную ячейку при редактировании определенной ячейки
 
Цитата
написал:
Еще хотел спросить - зачем три знака равенства?
ну как бы не знаю. взял код с видео урока на ютубе. там автор именно так и писал код. но там не стаяла задача выполнять код на конкретном листе. это потом уже пользователи в комментариях под видео просили поделиться советом как выполнять этот код на конкретном листе(листах). но автор особо не отвечает на этот вопрос.

Цитата
написал:
И возможно, имеет смысл хоть какую-то визуальную проверку сделать на то, какое имя листа выводится:
Цитата
написал:
теперь при любом изменении должно показываться сообщение с именем листа
в сообщении выводится имя КНИГИ, а не листа и код опять не работает.

PS
Да, и на наличие пробелов тоже проверял - в названии листов и книги пробелов нет ни спереди ни сзади.
Изменено: Данил И - 30.01.2023 11:11:37
Штамп даты в Таблицах Гугл (Google Sheets), автоматическая вставка даты в определенную ячейку при редактировании определенной ячейки
 
не поверите   :D  этот способ тоже не работает :D  

я конечно особо не разбираюсь в таком коде, но всё таки логически предположил, что если "не работает", то скорее всего код не находит лист с нужным названием...?

...так как код в изначальном виде работает, но на всех листах сразу...
то есть код наверно не находит лист с нужным названием даже не смотря на то, что содержит указание на каком листе ему работать:
Код
let sheet = ss.getSheetByName('ЗАЯВКИ');
Как-то так что ли... не знаю...
альтернатива РАНГ ?, альтернатива функции РАНГ
 
РЕШЕНО!

Напомню, задача была найти какую-нибудь альтернативу функции =РАНГ для ранжирования(простановки) мест в спортивных соревнованиях.

Функция =РАНГ, равно как и =РАНГ.РВ не подходит для ранжирования мест в спортивных соревнованиях, так как не умеет правильно ранжировать места с условием, что несколько спортсменов могут занять ОДИНАКОВЫЕ места исходя из времени заплыва/забега/звезда...

Решение нашёл применением функции массива к формулам: =ЕСЛИ, =ЕПУСТО, =СЧËТ и =ЧАСТОТА.
Только в таком виде эта формула подходит для ранжирования мест в спортивных соревнованиях:
Код
=ЕСЛИ(ЕПУСТО(H60);"";СЧЁТ(1/ЧАСТОТА(($H$60:$H$68<=H60)*$H$60:$H$68;$H$60:$H$68)))
(не забываем нажать SHIFT+CTRL+ENTER для того, чтобы применить массив)

Простой рецепт создания формулы:
(не вдаваясь в подробности логики работы формулы)

ГДЕ:
=ЕСЛИ(ЕПУСТО(_номер_первой_ячейки_с_временем_);""
  • следит за тем, что если ВРЕМЯ у спортсмена отсутствует(не заполненная ячейка), то ставим в ячейку с этой формулой (т.е. предназначенную для отображения мест) - ПУСТОТУ, тем самым исключив ячейку из общего подсчёта всех ячеек в массиве. Номер ячейки не "заморожен" знаком доллара, так как должен изменяться.
  • Если в формулу не поставить "ЕСЛИ(ЕПУСТО...",  то вместо "пустоты" формула проставит " 1 " (первые места) всем спортсменам у которых отсутствует время.

=СЧЁТ(1/ЧАСТОТА(($H$60:$H$68<=H60)*$H$60:$H$68;$H$60:$H$68))
  • подсчитываем(ранжируем) диапазон ячеек с H60 по H68 (в моём случае) содержащих ВРЕМЯ спортсменов. Диапазон должен быть "заморожен" знаком доллара.
  • Переменная <= говорит о том, в какую сторону сортировать места - в данном случае самое КОРОТКОЕ время - ПЕРВОЕ место. Если переменную поставить наоборот: => то это будет - самое ДЛИННОЕ время на ПЕРВОМ месте.
  • После переменной идёт номер первой ячейки с временем - он НЕ должен быть заморожен знаком доллара.
  • Далее знак умножения.
  • Далее - диапазон ячеек со временем пишем дважды. Этот диапазон обязательно "замораживаем" знаком доллара.
После этого у нас получается формула:
Код
=ЕСЛИ(ЕПУСТО(H60);"";СЧЁТ(1/ЧАСТОТА(($H$60:$H$68<=H60)*$H$60:$H$68;$H$60:$H$68)))

Далее переводим формулу в массив нажатием на клавиатуре SHIFT+CTRL+ENTER и у формулы автоматом появляются фигурные скобки массива:
Код
={ЕСЛИ(ЕПУСТО(H60);"";СЧЁТ(1/ЧАСТОТА(($H$60:$H$68<=H60)*$H$60:$H$68;$H$60:$H$68)))}

Далее просто копируем формулу протягиванием вниз на нужное количество ячеек - в моём случае это уже с ячейки H61 по H68 и получаем формулу в массиве (с фигурными скобками):
Код
={ЕСЛИ(ЕПУСТО(H60);"";СЧЁТ(1/ЧАСТОТА(($H$60:$H$68<=H60)*$H$60:$H$68;$H$60:$H$68)))}
={ЕСЛИ(ЕПУСТО(H61);"";СЧЁТ(1/ЧАСТОТА(($H$60:$H$68<=H61)*$H$60:$H$68;$H$60:$H$68)))}
={ЕСЛИ(ЕПУСТО(H62);"";СЧЁТ(1/ЧАСТОТА(($H$60:$H$68<=H62)*$H$60:$H$68;$H$60:$H$68)))}
={ЕСЛИ(ЕПУСТО(H63);"";СЧЁТ(1/ЧАСТОТА(($H$60:$H$68<=H63)*$H$60:$H$68;$H$60:$H$68)))}
={ЕСЛИ(ЕПУСТО(H64);"";СЧЁТ(1/ЧАСТОТА(($H$60:$H$68<=H64)*$H$60:$H$68;$H$60:$H$68)))}
={ЕСЛИ(ЕПУСТО(H65);"";СЧЁТ(1/ЧАСТОТА(($H$60:$H$68<=H65)*$H$60:$H$68;$H$60:$H$68)))}
={ЕСЛИ(ЕПУСТО(H66);"";СЧЁТ(1/ЧАСТОТА(($H$60:$H$68<=H66)*$H$60:$H$68;$H$60:$H$68)))}
={ЕСЛИ(ЕПУСТО(H67);"";СЧЁТ(1/ЧАСТОТА(($H$60:$H$68<=H67)*$H$60:$H$68;$H$60:$H$68)))}
={ЕСЛИ(ЕПУСТО(H68);"";СЧЁТ(1/ЧАСТОТА(($H$60:$H$68<=H68)*$H$60:$H$68;$H$60:$H$68)))}

Ранжирование мест в спортивных соревнованиях готово!
(аплодисменты) :)  :D  ;)



PS

Если берём Гугл Таблицы (Google Sheets) и делаем таблицу спортивных соревнований онлайн, а не локально в Эксель на компьютере, ТО копируем эту формулу:
Код
=ЕСЛИ(ЕПУСТО(H60);"";СЧЁТ(1/ЧАСТОТА(($H$60:$H$68<=H60)*$H$60:$H$68;$H$60:$H$68)))
в нашу Гугл Таблицу и нажимаем SHIFT+CMD+ENTER (для компьютеров Mac), тем самым вводим нашу формулу в массив.

Однако в отличаемо от Эксель, формула массива в Гугл Таблице примет вот такой вид:
Код
=ArrayFormula((ЕСЛИ(ЕПУСТО(I60);"";СЧЁТ(1/ЧАСТОТА(($I$54:$I$68<=I60)*$I$54:$I$68;$I$54:$I$68)))))
(то есть появятся не фигурные скобки, а формула массива Гугл: =ArrayFormula(_вся_наша_формула_ ) )

Далее, также как и в Эксель, копируем формулу протягиванием вниз на нужное количество ячеек. Всё.  ;)
Теперь у нас правильный подсчёт мест спортсменов в онлайне  :)  в Гугл Таблицах (Google Sheets). :D  
Изменено: Данил И - 29.01.2023 10:46:23
Штамп даты в Таблицах Гугл (Google Sheets), автоматическая вставка даты в определенную ячейку при редактировании определенной ячейки
 
спасибо.
но в таком виде код тоже не работает - штамп даты не проставляется даже там где нужно  :(  
Штамп даты в Таблицах Гугл (Google Sheets), автоматическая вставка даты в определенную ячейку при редактировании определенной ячейки
 
Всем привет.
...задача была в Гугл таблицах (Google Sheets) в автоматическом режиме вставлять сегодняшнюю дату(дату редактирования) в определённую ячейку при редактировании определенной ячейки.
В поисках сего наткнулся на такой код:
Код
function auto_set_date(){
let ss = SpreadsheetApp.getActiveSpreadsheet();
let sheet = ss.getSheetByName('ЗАЯВКИ');


let ar = sheet.getActiveRange();

let a_col = ar.getColumn();
// let a_row = ar.getRow();

if(a_col === 2 && ar.offset(0,6).getValue()===''){
ar.offset(0,6).setValue(new Date());  
}
}

Код работает....но абсолютно на всех листах... а надо только на одном.

В поисках решения проблемы наткнулся на такой код:
Код
if (sheet.getName()==="Нужный лист"){весь код} 
пояснение куда вставить этот кусок кода отсутствовало и я так понял, что надо вставить этот кусок кода строкой №1 и в скобках "весь код" вписать весь код начиная со строки "function auto_set_date(){".
То есть вот так:
Код
if (sheet.getName()==='ЗАЯВКИ'){
function auto_set_date(){
let ss = SpreadsheetApp.getActiveSpreadsheet();
let sheet = ss.getSheetByName('ЗАЯВКИ');


let ar = sheet.getActiveRange();

let a_col = ar.getColumn();
// let a_row = ar.getRow();

if(a_col === 2 && ar.offset(0,6).getValue()===''){
ar.offset(0,6).setValue(new Date());  
}
}
}

Ну я так и сделал... и при таком раскладе код полностью перестал работать.

Кто знает как решить эту проблему - как заставить этот код работать только на определённом листе?
Изменено: Данил И - 28.01.2023 14:09:03
Таблица для соревнований по плаванию, Создание таблицы для соревнований по плаванию с умными алгоритмами.
 
Цитата
написал:
у вас лист "ЗАПЛЫВЫ"
в файле может быть назван "ЗАПЛЫВЫ " (видите пробел в конце, его видно в кавычках и СОВЕРШЕННО не видно в названии листа
пока вы в коде не будете к нему обращаться по его имени - ничего не получится((
между "ЗАПЛЫВЫ" и "ЗАПЛЫВЫ " с точки зрения компьютера разница такая же, как между  МОСКВОЙ и СЫЗРАНЬЮ, т.е. огромная, непреодолимая разница
проверил название листов - пробела нет ни где.
проверил название в коде в кавычках - тоже самое, пробела нет.
проверил в меню Project, где дерево листов, зашел в каждый лист - пробела ни где небыло.
:(
А обычными формулами можно такое сделать?

Кстати, макросы и файлы XLSM не читаются в облаках - нр в Гугл Документах (таблицах), ни в Яндекс Документах (таблицах).
А гугл таблицы, кстати, ещё и глючат с некоторыми формулами на русском.
Таблица для соревнований по плаванию, Создание таблицы для соревнований по плаванию с умными алгоритмами.
 
Цитата
написал:
Цитата
написал:
нет, что-то там не так пошло - выдал ошибку.
Код скопирован в ошибочной кодировке.
При копировании нужно переключить на русскую раскладку.
Ну или нажмите "Отладка" и в жёлтой строке исправьте названия листов и таблиц.  
совет не помог :(
копировал и на русской раскладке и на английской...
и просто из строки удалил слово ЗАПЛЫВЫ и заново написал на клавиатуре "ЗАПЛЫВЫ"
ничего не помогает :(

ещё пробовал не копировать, а текстом с клавиатуры набрать этот кусок кода - не помогло :(
Изменено: Данил И - 13.01.2023 21:54:35
Таблица для соревнований по плаванию, Создание таблицы для соревнований по плаванию с умными алгоритмами.
 
Цитата
написал:
я делал такое
на входе заявки участников
ФИО, пол, год рождения, команда (клуб) и список: стиль плаванья-заявленное время
макрос формировал таблицы заплывов № заплыва, стиль, пол, возраст, время заплыва
и сама таблица:
№ дорожки, Участник, Результат
в один заплыв собирались участники одного возраста, приблизительно одной силы и, по возможности, в одном заплыве были участники из разных команд
если по какому-то стилю, полу, оставался 1 спортсмен, то он "пристраивался" к более взрослому заплыву
в сформированные таблицы заплывов потом вносились индивидуальные результаты
и финальный макрос подбивал итоги соревнований: места, выделялись призеры (для заполнения грамот)
определялись места клубов "Дельфин", "Акулы", "Поплавок", "Нептун"))
значит не один я такой :)
а какой формулой у вас был подсчёт мест?
мне пришлось долго искать решение и извращаться с формулой РАНГ.
И до сих пор меня не устраивает найденное решение:
=ЕСЛИОШИБКА(РАНГ(H6;H$6:H$14;1)+СЧЁТЕСЛИ(H$6:H6;H6)-1;"-")

по этой формуле, если два (или три) участника плывут в одинаковое время, то эта формула выстраивает места по порядку:

00:34,06        4
-                     -
00:23,01        1
-                     -
-                     -
00:28,07        2
00:43,07        5
01:04,01        6
00:28,07        3

В начале я использовал формулу РАНГ без наворотов. В таком случае ДВУМ участникам в одинаковое время определяется 2 место, а следующему по времени частнику определяется 4-е место..... то есть ТРЕТЬЕ место пропущено. как такое может быть?
Таблица для соревнований по плаванию, Создание таблицы для соревнований по плаванию с умными алгоритмами.
 
Цитата
написал:
Да.Цитата написал:И как эти заплывы автоматом добавить прямо в таблицу в лист ЗАПЛЫВЫКод ? 12Вместо    Set rr = sh.Cells(6, 2).Resize(UBound(outputArray, 1), UBound(outputArray, 2))Напишите  Set rr = Sheets("ЗАПЛЫВЫ").Cells(6, 2).Resize(UBound(outputArray, 1), UBound(outputArray, 2))
нет, что-то там не так пошло - выдал ошибку.
Таблица для соревнований по плаванию, Создание таблицы для соревнований по плаванию с умными алгоритмами.
 
Цитата
написал:
Цитата
написал:
к кнопке я ещё вернусь)
большое спасибо.
конечно сам код мне в большинстве своём не ясен, но что-то всё же прочитал :) и подправил :)


   Dim yy As Long
   Dim yg As Long
   Dim iGroup As Long
   Dim vGroup As Variant
   For iGroup = 1 To UBound(aGroups)
       vGroup = aGroups(iGroup)
       yy = yy + 1
       arr(yy, 2) = "Заплыв №" & iGroup
       For yg = 1 To UBound(vGroup, 1)
           yy = yy + 1
           arr(yy, 1) = "дорожка № " & yg
           arr(yy, 2) = vGroup(yg, 1)
           arr(yy, 3) = "Заплыв №" & iGroup
           arr(yy, 4) = vGroup(yg, 2)
           arr(yy, 5) = vGroup(yg, 3)
           arr(yy, 6) = vGroup(yg, 4)
две нижние строки добавил по аналогии и оно заработало :)
           arr(yy, 7) = vGroup(yg, 5) - стиль
           arr(yy, 8) = vGroup(yg, 6) - лучшее время

то есть, заплывы формируются исходя из:
- дорожек максимум 5
- возрастной категории+категории заплыва+лучшего времени?

можно какой-то мануал :) то есть, что меняет та или иная функция в коде.

И как эти заплывы автоматом добавить прямо в таблицу в лист ЗАПЛЫВЫ, но чтобы можно было продолжать изменять участников из выпадающего списка?
Таблица для соревнований по плаванию, Создание таблицы для соревнований по плаванию с умными алгоритмами.
 
Цитата
написал:
Данил И,  https://www.planetaexcel.ru/techniques/3/59/

спасибо....
мне с этим пока трудно...
давайте что-то по попроще.
(но к кнопке я ещё вернусь)

тогда может так?: (Можно ли сделать это функцией ВПР на пример ?)

на листе НАГРАЖДЕНИЕ есть цветные полосы - они просто разделяют возрастную категорию и всё.
Предположим на каждой цветной полосе я создал выпадающий список из возрастов из системного листа SYS_LIST и теперь на каждой цветной полосе можно из списка выбрать любую возрастную категорию.

Так вот, как сделать так (какую формулу прописать в строках), чтобы при выборе определенной возрастной категории на цветной полосе - автоматически, на нижних строках появились данные участников из листа ЗАПЛЫВЫ только той возрастной категории, которая выбрана на цветной полосе.
Причём, если срок допустим 5, а участников в возрастной категории 10, то автоматом должны добавится еще 5 строк...
Таблица для соревнований по плаванию, Создание таблицы для соревнований по плаванию с умными алгоритмами.
 
Цитата
написал:
Цитата
написал:
чтобы была чудо-кнопка
 
Код
    [URL=#]?[/URL]       1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99  100  101  102  103  104  105  106  107  108  109  110  111  112  113  114  115  116  117  118  119  120  121  122  123  124  125  126  127  128  129  130  131  132  133  134  135  136  137  138  139  140  141  142  143  144  145  146  147  148  149  150  151  152  153  154  155  156  157  158  159  160  161  162  163  164  165  166  167  168  169  170  171      Option   Explicit       Private   Const   GROUP_SIZE = 5       Sub   MakeZTable()          CloseEmptyWb          Dim   zayvki   As   Variant          zayvki = Sheets(  "ЗАЯВКИ"  ).ListObjects(  "ЗАЯВКИ"  ).Range.Value          ReplaceZero zayvki, 6                   Dim   wb   As   Workbook          Dim   sh   As   Worksheet          Dim   rr   As   Range          Set   wb = Workbooks.Add(1)          Set   sh = wb.Sheets(1)          Set   rr = sh.Cells(1, 1).Resize(UBound(zayvki, 1), UBound(zayvki, 2))                   rr.Value = zayvki          SortRange rr          zayvki = rr.Value          'rr.EntireColumn.AutoFit                   Dim   aCategory   As   Variant          aCategory = SplitCategory(rr)          rr.Clear                   Dim   aGroups   As   Variant          aGroups = SplitGroups(aCategory)                   Dim   outputArray   As   Variant          outputArray = GetOutputArray(aGroups)                   Set   rr = sh.Cells(6, 2).Resize(UBound(outputArray, 1), UBound(outputArray, 2))          rr.Value = outputArray          rr.EntireColumn.AutoFit    End   Sub       Private   Function   GetOutputArray(aGroups   As   Variant  )   As   Variant          Dim   arr   As   Variant          ReDim   arr(1   To   (GROUP_SIZE + 2) * UBound(aGroups), 1   To   8)                   Dim   yy   As   Long          Dim   yg   As   Long          Dim   iGroup   As   Long          Dim   vGroup   As   Variant          For   iGroup = 1   To   UBound(aGroups)              vGroup = aGroups(iGroup)              yy = yy + 1              arr(yy, 2) =   "Заплыв №"   & iGroup              For   yg = 1   To   UBound(vGroup, 1)                  yy = yy + 1                  arr(yy, 1) =   "дорожка № "   & yg                  arr(yy, 2) = vGroup(yg, 1)                  arr(yy, 3) =   "Заплыв №"   & iGroup                  arr(yy, 4) = vGroup(yg, 2)                  arr(yy, 5) = vGroup(yg, 3)                  arr(yy, 6) = vGroup(yg, 4)              Next              For   yg = UBound(vGroup, 1) + 1   To   GROUP_SIZE                  yy = yy + 1              Next              yy = yy + 1          Next                   GetOutputArray = arr    End   Function       Private   Function   SplitGroups(aCategory   As   Variant  )   As   Variant          Dim   vCategory   As   Variant          Dim   nGroup   As   Long          Dim   y1   As   Long          Dim   y2   As   Long          Dim   arr   As   Variant          Dim   brr   As   Variant          ReDim   arr(0   To   0)          For   Each   vCategory   In   aCategory              If   Not   IsEmpty(vCategory)   Then                  nGroup = WorksheetFunction.RoundUp(UBound(vCategory, 1) / GROUP_SIZE, 0)                  y1 = 1                  Do                      If   nGroup <= 0   Then   Exit   Do                      If   y1 > UBound(vCategory, 1)   Then   Exit   Do                      y2 = UBound(vCategory, 1) - y1 + 1                      If   nGroup > 1   Then   y2 = WorksheetFunction.Round(y2 / nGroup, 0)                      y2 = y1 + y2 - 1                      brr = GetSubRowsArray(vCategory, y1, y2)                                           ReDim   Preserve   arr(0   To   UBound(arr) + 1)                      arr(UBound(arr)) = brr                      Erase   brr                      y1 = y2 + 1                      nGroup = nGroup - 1                  Loop              End   If          Next          SplitGroups = arr    End   Function       Private   Function   GetSubRowsArray(arr   As   Variant  , y1   As   Long  , y2   As   Long  )   As   Variant          Dim   brr   As   Variant          ReDim   brr(1   To   y2 - y1 + 1, 1   To   UBound(arr, 2))          Dim   yy   As   Long          Dim   xx   As   Long          For   yy = 1   To   UBound(brr, 1)              For   xx = 1   To   UBound(brr, 2)                  brr(yy, xx) = arr(y1 + yy - 1, xx)              Next          Next          GetSubRowsArray = brr    End   Function       Private   Function   SplitCategory(rr   As   Range)   As   Variant          Dim   arr   As   Variant          Dim   brr   As   Variant          Dim   crr   As   Variant          ReDim   crr(0   To   0)          arr = rr.Value                   Dim   y1   As   Long          Dim   y2   As   Long          With   rr              For   y1 = 2   To   UBound(arr, 1)                  If   Not   IsEmpty(arr(y1, 1))   Then                      For   y2 = y1 + 1   To   UBound(arr, 1)                          If   arr(y2, 5) <> arr(y1, 5)   Then   Exit   For                          If   arr(y2, 3) <> arr(y1, 3)   Then   Exit   For                      Next                      y2 = y2 - 1                      brr = .Range(.Cells(y1, 1), .Cells(y2, UBound(arr, 2))).Value                      ReDim   Preserve   crr(0   To   UBound(crr) + 1)                      crr(UBound(crr)) = brr                      Erase   brr                                           y1 = y2                  End   If              Next          End   With          SplitCategory = crr    End   Function       Private   Sub   SortRange(rr   As   Range)          Dim   sh   As   Worksheet          Set   sh = rr.Parent          With   sh.Sort              .SortFields.Clear              .SortFields.Add Key:=rr.Columns(5), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal              .SortFields.Add Key:=rr.Columns(3), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal              .SortFields.Add Key:=rr.Columns(3), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal              .SetRange rr              .Header = xlYes              .MatchCase =   False              .Orientation = xlTopToBottom              .SortMethod = xlPinYin              .Apply          End   With       End   Sub       Private   Sub   ReplaceZero(arr   As   Variant  , xx   As   Long  )          Dim   yy   As   Long          For   yy = 2   To   UBound(arr, 1)              If   arr(yy, xx) =   "-"   Then   arr(yy, xx) = Empty          Next    End   Sub       Sub   CloseEmptyWb(  Optional   flag   As   Boolean  )          Dim   wb   As   Workbook          For   Each   wb   In   Application.Workbooks              If   wb.Path =   ""   Then   wb.Close   False          Next    End   Sub   
 
спасибо.
но пока ничего не понятно - я не программист.
если можно понунктно что нужно делать... куда вставлять этот код?
Таблица для соревнований по плаванию, Создание таблицы для соревнований по плаванию с умными алгоритмами.
 
Цитата
написал:
Цитата
Данил И написал:
если бы на внимательность
на неё...
шаг 1:
Цитата
МатросНаЗебре написал:
В диспетчере имен создаёте имя ЗАЯВКИ_ФИО, Диапазон: =ЗАЯВКИ[ФИО]
шаг 2:
Цитата
МатросНаЗебре написал:
В проверке данных в Источник: =ЗАЯВКИ_ФИО
а Вы шаг1 сразу в шаг2 запихнули, пропустив создание именованного диапазона.
да спасибо.
вот теперь работает :)
одной проблемой меньше :)
Страницы: 1 2 След.
Наверх