Страницы: 1
RSS
Альтернатива функции ЕПУСТО для объединённых ячеек
 
Требуется альтернатива функции ЕПУСТО для объединённых ячеек.
Исходные условия:
- в хронологическом порядке есть события от 1 до 6 в течении дня (даты);
- необходимо в объединённой ячейке "ответ" вывести результат "метка",
который будет использоваться как необходимое условие для других расчётов.
Определение "метки" должно происходить при обязательном наличии (отсутствии) парных данных (z и x) события.
В случае отсутствия одного из них результат будет некорректным.

Использование в объединённой ячейке "ответ" функции ЕПУСТО и выбор массива
даёт некорректный результат при последующих  изменениях таблицы и формулы (для наглядности верхняя таблица).
После внесения изменений выводиться сообщение о невозможности ввести формулу массива в объединённую ячейку.
 
pvmail, создайте доп.столбец, в котором НЕ будет объединенной ячейки и в ней считайте формулу массива, скройте данный столбец, в объединенной ячейке просто ссылайтесь на скрытый столбец с расчетом.

ps А вообще, использование объединенных ячеек в расчетах - зло.
 
pvmail,
1. С чем у вас проблема? с isblank или всеж с вводом функции массива в объединенную ячейку? Это скорее к названию темы вопрос.
2. можете более корректно написать или в примере показать, когда метка и когда OK, и почему.
По вопросам из тем форума, личку не читаю.
 
StepanWolkoff,
БМВ,

При обработке таблицы целью является сократить количество столбцов,
в которых осуществляется расчёт и выводяться промежуточные результаты.
Эти результаты дальше используются для последующих расчётов и в качестве выбора условий при работе с функциями (макросами) эксель.
Также позволяют визуально упростить длину формул и исключить ошибки.
В ячейках по столбцу "ответ" находится промежуточный результат. Этот столбец и будет скрываться.  

Обращаю ваше внимание, в ячейке "ответ" (две ячейки объединены) на каждую дату введены одинаковые исходные данные (например, пусто)
и одного вида формула (с выбором массива { } и без выбора). Естественно, результаты "ответов" не совпадают.
Такой "сбой" возникает периодически при внесении изменений в формулу, форматирование ячейки, условное форматирование...
Это усложняет работу с таблицами и приводит к ошибкам.

Поэтому хотелось бы заменить функцию ЕПУСТО, при использовании которой надо выбирать для проверки условий два ряда данных, верхний и нижний, да ещё и не забывать использовать F2 и ctrl+shift+enter.

Прикладываю файлы. Для удобства рассмотрения результаты ответов изменены на "А" и "В".

Рисунок удален: превышение допустимого размера вложения [МОДЕРАТОР]
 
Еще раз
Цитата
БМВ написал:
2. можете более корректно написать или в примере показать, когда метка и когда OK, и почему.
тут не ЕПУСТО для вас проблема, а то что вводится функция массива. Значит надо использовать функцию, которая сама на входе ждет массив и выдает результат.
По вопросам из тем форума, личку не читаю.
 
Так?
=ЕСЛИ(СУММПРОИЗВ(($D$8:$I$8<>"")*($D$9:$I$9<>""))>0;"B";"A")
 
MOTO, формула усложняется и удлиняется, что неприемлемо когда обрабатываешь видоизменённые таблицы за несколько лет  с количеством данных исчисляемыми десятками тысяч.

возможно
Цитата
БМВ написал: тут не ЕПУСТО для вас проблема
мне нужно, чтобы была проверка корректности заполнения ячеек исходными данными: наличие "парных" данных по событиям д1...д2,
На основании этой проверки - были события или не были, выводится результат в ячейке "ответ" Хотелось бы, чтобы в строке формул и, главное, в окне выбора аргументов функции был не по-ячеечный выбор исходных данных, а просто диапазон, например D8:I8.
К сожалению  функция ЕПУСТО не учитывает обязательную "парность" данных по событиям "д".

В примере приведена упрощённая таблица, а фактически у меня стоит задача рассчитать  и сравнить по датам десяток параметров, поэтому важна корректность заполнения исхданных.
 
посещают мысли - "упрятать" проверку корректности данных и длину формул-сравнений в макрос. Пока не представляю как.
 
Цитата
pvmail написал: "упрятать" проверку корректности данных и длину формул-сравнений в макрос
Не совсем понял, что имеется ввиду. Какую проверку? Каких формул?
А Ваши 'метки' и 'океи' можно расставлять простенькой UDF. См. желтые ячейки. Опять же, если правильно понял задачу
Код
Function ЕСЛИПУСТО(rng As Range)
arr = rng.Value
For I = 1 To UBound(arr, 2)
    If Not (IsEmpty(arr(1, I)) And IsEmpty(arr(2, I))) Then
        ЕСЛИПУСТО = "okay"
        Exit Function
    End If
Next
ЕСЛИПУСТО = "label"
End Function
Согласие есть продукт при полном непротивлении сторон
 
StepanWolkoff, БМВ, MOTO, Sanja, спасибо за участие.
Sanja, твой вариант очень близок. Единственное, что я изменил -
применил оператор XOR (логическое исключение) вместо
Цитата
Sanja написал:
   If Not (IsEmpty(arr(1, I)) And IsEmpty(arr(2, I))) Then
If IsEmpty(arr(1, I) Xor IsEmpty(arr(2, I)) Then

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

Большое всем спасибо за помощь.  
 
pvmail, к незнакомым обычно обращаются на "Вы"
 
vikttur,  Sanja  уже в одной теме один раз ТС отвечал до этого, это уже почти родственники :-)
Изменено: БМВ - 09.01.2018 23:20:03
По вопросам из тем форума, личку не читаю.
Страницы: 1
Читают тему
Наверх