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

Вход

Регистрация

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

 

= Мир MS Excel/Использование двух правил проверки данных для одного диапазо - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Использование двух правил проверки данных для одного диапазо
dimanechaev2015 Дата: Пятница, 25.08.2023, 23:20 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 1
Репутация: 0 ±
Замечаний: 20% ±

Google Sheet
Добрый вечер. Вопрос по Google Sheet. Имеется лист, на котором есть столбик с выпадающим списком. Внизу идет подсчет, сколько выбрано рабочих дней, а сколько выходных. Суть в том, что когда набирается 4 выходных, нужно, чтобы блокировалась возможность в этом столбце поставить еще выходной и всплывало сообщение об этом. Нужно при помощи "Проверки данных" или какого-то скрипта реализовать данную возможность.
Пока что удалось добиться такого при помощи "проверки данных", но тогда у меня пропадает возможность выбирать значение из выпадающего списка.

Ниже прикладываю скриншот того, как это должно выглядеть в рабочем виде.
К сообщению приложен файл: 7314435.jpg (54.3 Kb)
 
Ответить
СообщениеДобрый вечер. Вопрос по Google Sheet. Имеется лист, на котором есть столбик с выпадающим списком. Внизу идет подсчет, сколько выбрано рабочих дней, а сколько выходных. Суть в том, что когда набирается 4 выходных, нужно, чтобы блокировалась возможность в этом столбце поставить еще выходной и всплывало сообщение об этом. Нужно при помощи "Проверки данных" или какого-то скрипта реализовать данную возможность.
Пока что удалось добиться такого при помощи "проверки данных", но тогда у меня пропадает возможность выбирать значение из выпадающего списка.

Ниже прикладываю скриншот того, как это должно выглядеть в рабочем виде.

Автор - dimanechaev2015
Дата добавления - 25.08.2023 в 23:20
Gustav Дата: Понедельник, 28.08.2023, 11:18 | Сообщение № 2
Группа: Админы
Ранг: Участник клуба
Сообщений: 2792
Репутация: 1155 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Можно "Проверку данных" данных "потратить" на организацию выпадающих списков, а проверку на превышение заданного количества выходных сделать скриптом примерно такого вида:
[vba]
Код
function onEdit(e) {
    var range = e.range; // SpreadsheetApp.getActive().getActiveRange();

    if (range.getSheet().getName() == 'Лист4') { // тут указать свой лист
        var waColFirst = 2;  // номер первой колонки рабочей области (wa = work area)
        var waColLast  = 3;  // номер последней колонки раб.области
        var waRowFirst = 2;  // номер первой строки раб.области
        var waRowLast  = 11; // номер последней строки раб.области
        var maxDaysOff = 4;  // максимальное кол-во выходных на колонку дня

        if (range.getColumn() <= waColLast && range.getLastColumn() >= waColFirst &&
            range.getRow()    <= waRowLast && range.getLastRow()    >= waRowFirst) {

            var vals = range.getSheet().getRange(waRowFirst, range.getColumn(), waRowLast-waRowFirst+1).getValues();
            var cnt = 0;
            vals.forEach(v => { if (v[0] == 'Выходной') cnt++ });
            if (cnt > maxDaysOff) {
                Browser.msgBox('Выходных в этот день станет больше '+maxDaysOff+' ! Отменяем ввод!');
                if (range.getNumRows() == 1 && range.getNumColumns() == 1) {
                    range.setValue(e.oldValue); // для одной ячейки восстанавливаем предыдущее значение
                } else {
                    range.clearContent(); // если вдруг в редактируемом диапазоне несколько ячеек, то стираем все
                }  
            }
        }
    }
}
[/vba]


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеМожно "Проверку данных" данных "потратить" на организацию выпадающих списков, а проверку на превышение заданного количества выходных сделать скриптом примерно такого вида:
[vba]
Код
function onEdit(e) {
    var range = e.range; // SpreadsheetApp.getActive().getActiveRange();

    if (range.getSheet().getName() == 'Лист4') { // тут указать свой лист
        var waColFirst = 2;  // номер первой колонки рабочей области (wa = work area)
        var waColLast  = 3;  // номер последней колонки раб.области
        var waRowFirst = 2;  // номер первой строки раб.области
        var waRowLast  = 11; // номер последней строки раб.области
        var maxDaysOff = 4;  // максимальное кол-во выходных на колонку дня

        if (range.getColumn() <= waColLast && range.getLastColumn() >= waColFirst &&
            range.getRow()    <= waRowLast && range.getLastRow()    >= waRowFirst) {

            var vals = range.getSheet().getRange(waRowFirst, range.getColumn(), waRowLast-waRowFirst+1).getValues();
            var cnt = 0;
            vals.forEach(v => { if (v[0] == 'Выходной') cnt++ });
            if (cnt > maxDaysOff) {
                Browser.msgBox('Выходных в этот день станет больше '+maxDaysOff+' ! Отменяем ввод!');
                if (range.getNumRows() == 1 && range.getNumColumns() == 1) {
                    range.setValue(e.oldValue); // для одной ячейки восстанавливаем предыдущее значение
                } else {
                    range.clearContent(); // если вдруг в редактируемом диапазоне несколько ячеек, то стираем все
                }  
            }
        }
    }
}
[/vba]

Автор - Gustav
Дата добавления - 28.08.2023 в 11:18
  • Страница 1 из 1
  • 1
Поиск:

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