Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
23.07.2019, 10:37:48

Войти
Хотите поблагодарить участника за дельный совет? Нажмите [Повысить]. Так вы заслуженно поднимите репутацию активному участнику.
30 269 Сообщений в 4 796 Тем от 7 119 Пользователей
Последний пользователь: frodlopen
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  Сбор и сравнение текстовых значений на сводный лист
Страниц: [1]   Вниз
Печать
Автор Тема: Сбор и сравнение текстовых значений на сводный лист  (Прочитано 209 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Eltoro
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 2


Просмотр профиля E-mail
« : 16.05.2019, 15:46:41 »

Доброго дня
Возникла проблема с созданием формулы, которая бы на нескольких листах по формулам ИНДЕКС+ПОИСКПОЗ искала текстовые значения и сравнивала их между собой, НО при этом не учитывала пустые ячейки, и листы, на которых нет такой комбинации.
Если значения не совпадают, то выводится ERROR, если все ок, то с любого листа.

Вытянуть значения получается, как и сравнить, но все формулы не пропускают пустые ячейки и считают их 0, по итогу имеем ERROR.
Пытался сначала сделать хотя бы без проверки на равенство, но оказалось что функция ЕПУСТО считает, что если на листе нет такой комбинации, и мы имеем #Н/Д, то это Ок.
=ЕСЛИ(ЕСЛИОШИБКА(ЕПУСТО(ИНДЕКС(Plastic!$E$6:$AI$1000;ПОИСКПОЗ($A6;Plastic!$A$6:$A$1000;0);ПОИСКПОЗ(G$4;Plastic!$E$4:$AI$4;0)));ИСТИНА);1;ИНДЕКС(Plastic!$E$6:$AI$1000;ПОИСКПОЗ($A6;Plastic!$A$6:$A$1000;0);ПОИСКПОЗ(G$4;Plastic!$E$4:$AI$4;0)))
Записан
boa
Постоялец
***

Репутация: +14/-0
Офлайн Офлайн

Сообщений: 145


Доброта спасет мир...


Просмотр профиля WWW
« Ответ #1 : 16.05.2019, 16:29:29 »

Здравствуйте,
Наверное, так хотели
Код: (vb)
=IF(INDEX(Plastic!R1:R1048576;MATCH(RC1;Plastic!C1;0);MATCH(R4C;Plastic!R4;0))=INDEX(Plastic2!R1:R1048576;MATCH(RC1;Plastic2!C1;0);MATCH(R4C;Plastic2!R4;0));
INDEX(Plastic!R1:R1048576;MATCH(RC1;Plastic!C1;0);MATCH(R4C;Plastic!R4;0));
"Err")
Записан

Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

Eltoro
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 2


Просмотр профиля E-mail
« Ответ #2 : 17.05.2019, 13:53:20 »

Немного не то, переформулировал понятнее

Исходная задача : имеется файл с n-ым кол-вом листов (в примере 4 – Plastic1-4). На этих листах содержатся текстовые значения типа Я,НН, В и т.п.
Все эти данные надо собрать со всех листов в один сводный лист по пересечению код/дата по ИНДЕКС + ПОИСКПОЗ,
Условие для сбора – формула не должна учитывать лист если ячейка пустая, и если данных нет (#Н/Д). Если значение на листе есть, то оно должно быть равно значениям на других листах, в противном случае возвращаем ERR!

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

Спасибо заранее
Записан
boa
Постоялец
***

Репутация: +14/-0
Офлайн Офлайн

Сообщений: 145


Доброта спасет мир...


Просмотр профиля WWW
« Ответ #3 : 20.05.2019, 17:18:45 »

Здравствуйте,
тогда пользовательской функцией
Код: (vb)
Function CheckValue(ByVal dDate As Range, ByVal sKod As String, ParamArray values() As Variant)
Dim sh As Variant
Dim sVal As Variant
Dim iCol&, iRow&
    For Each sh In values
    With Worksheets(sh)
        iCol = .Rows(4).Find(dDate.Text, LookIn:=xlValues, LookAt:=xlWhole).Column
        iRow = .Columns(1).Find(sKod, LookIn:=xlValues, LookAt:=xlWhole).Row
        If IsEmpty(sVal) Then
            sVal = .Cells(iRow, iCol)
        Else
            If sVal <> .Cells(iRow, iCol) Then
                CheckValue = "err " & sh
                Exit Function
            End If
        End If
    End With
    Next sh
    CheckValue = sVal
End Function
Записан

Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru