Страницы: 1 2 След.
RSS
сопоставление данных в ячейках по ключу и запись в новой ячейке
 
Доброго времени суток!
Нужна ваша помощь.

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

Заранее спасибо!
 
в .csv ни формулы, ни макросы не сохраняются.
Покажите, что что нужно получить.
 
1)новые столбцы - это
Имя ИТОГООтчество ИТОГО
2)что означают пустые строки? (3,5, 13,14 строки) для чего они в таблице

можно с помощью ЕСЛИ, например пример_сопоставление.xlsm,
смущают только полностью пустые строки
Код
=ЕСЛИ(A2="";E2;A2)
Изменено: Leanna - 05.01.2015 17:51:17
Работать надо не 12 часов, а головой.
 
1) в примере, указал что нужно получить: новые столбцы "+ИТОГО".
2) пустые строки, это строки с отсутствующей информацией, после сопоставления двух таблиц с ВПР. Их нужно заполнить.

Возможно ли их заполнить по ключу "КОДу", который имеется у всех строк?
 
Здравствуйте. А мне непонятно как можно
Цитата
С помощью формулы ВПР сопоставил из двух таблиц данные, в одну.
получить пустые строки в общей таблице, при одинаковом коде? Похоже что две таблицы просто скопированы рядом, либо в Вашей формуле не закреплены диапазоны. Возможно изначально Вы собираете неправильно. Создайте в таблице два листа с данными которые хотите объединить, а на третьем листе напишите формулу объединения.
 
gling, спасибо за комментарий!

Дело в том, что с помощью формулы ВПР были созданы столбцы из РАЗНЫХ ЗНАЧЕНИЙ ПОДСТАНОВКИ, из двух таблиц.
Столбцы A,B,C,D, были сформированы из таблицы со значением подстановки "+Название", а столбцы E,F,G,H из таблицы со значением постановки "+Прочее".
Также получилось, что Значения подстановки не имелись ни в первой, ни во второй таблице, в результате чего появились пустые строки.
Но, имеется общий "Код" для всех значений.

Спасибо Leanna!
с помощью ее формулы возможно заполнить ячейки, где имеется какое либо значение.
Но как быть со строками, где их нет? но в которых имеется "Код"?

Возможно ли по общему "КОДу" дозаполнить пустые строки?
Изменено: Александр - 05.01.2015 23:58:22
 
Все равно непонятно как ВПР смог подставить А2 по коду и не смог подставить А3 по этому же коду.
Если расположение в строках не принципиально, можно отсортировать по первому столбцу, чтобы пустые строки ушли вниз таблицы. Тогда при наличии кода будут заполняться пустые строки верхними данными.
Или создайте копию листа, скопируйте данные из F:H на A:D, специальной вставкой поставив галочку "Пропускать пустые строки", отсортируйте по первому столбцу или удалите пустые строки без фамилий. Получится база с данными, можно еще удалить дубликаты для красоты. После этого формулой ВПР можно выбирать из этой таблицы данные по коду, заполняя первоначальную таблицу.
 
gling, спасибо за вариант решения!

1) ВПР подставлял по значениям подстановки не по "Коду", а по двум другим значениям подстановки, в результате чего на одном Листе появились данные, общим из которых является "Код".
2) попробовал сделать вариант сортировки, но вылетает Ошибка #ССЫЛКА!

не могу понять в чем причина(
 
Почему сразу не делать макросом без всяких предварительных ВПР()?
Сразу из исходных таблиц (хоть десяти) получить результирующую, и быстро.
Хотя конечно если это разовая работа и половина уже сделана - то писать макрос смысла мало, проще формулами добить.
 
Цитата
вылетает Ошибка #ССЫЛКА!
В вашем файле формула должна быть такой:
Код
=ЕСЛИ(ВПР($K2;$K$2:$S$3576;СТОЛБЕЦ(B2);0)=0;ВПР($K2;$K$2:$S$3576;СТОЛБЕЦ(F2);0);ВПР($K2;$K$2:$S$3576;СТОЛБЕЦ(B2);0))
Изменено: gling - 06.01.2015 11:28:39
 
gling, в вашем примере была указана формула:
=ЕСЛИ(ВПР($A2;$A$2:$I$14;СТОЛБЕЦ(B2);0)=0;ВПР($A2;$A$2:$I$14;СТОЛБЕЦ(F2);0);ВПР($A2;$A$2:$I$14;СТОЛБЕЦ(B2);0))
, где СТОЛБЦЫ B2 и F2 соответствовали ячейкам "Фамилия НАЗВАНИЕ" и "Фамилия прочее".

В своем исходном файле я сделал по аналогии, и указал имена ячеек, соответствующие "Фамилия НАЗВАНИЕ" - столбец L2 и "Фамилия прочее" - столбец P2:
=ЕСЛИ(ВПР($K2;$K$2:$S$3611;СТОЛБЕЦ(L2);0)=0;ВПР($K2;$K$2:$S$3611;СТОЛБЕЦ(P2);0);ВПР($K2;$K$2:$S$3611;СТОЛБЕЦ(L2);0)), но появилась ошибка ССЫЛКИ!

подставив вашу формулу:
=ЕСЛИ(ВПР($K2;$K$2:$S$3576;СТОЛБЕЦ(B2);0)=0;ВПР($K2;$K$2:$S$3576;СТОЛБЕЦ(F2);0);ВПР($K2;$K$2:$S$3576;СТОЛБЕЦ(B2);0))
,где Столбцы B2 и F2 соответствуют ПУСТЫМ ячейкам в моей в таблице.
Но это работает!

подскажите пожалуйста, в чем секрет?)
 
Секрет вероятно в том, что от СТОЛБЕЦ(B2) требуется только номер столбца, а не его содержимое.
 
СТОЛБЕЦ(B2)=2; СТОЛБЕЦ(C2)=3.... по формуле с ВПР вам пришлось бы писать число 2 , в следующем столбце менять 2 на 3 и.т.д При применении СТОЛБЕЦ(), при протягивании формулы вправо, число меняется автоматически. ВПР(иском.знач;массив;№столбца в массиве=2 или СТОЛБЕЦ(В...);0)
Изменено: gling - 06.01.2015 12:16:38
 
про автоматическую смену понятно, при протягивании по горизонтали меняется Столбец, по вертикале - номер Строки.

Возможно, что то не совсем понимаю, но в формуле стоят Столбцы "B" и "F", которые в моей таблице:
1. не в массиве данных, и это видно по формуле
=ЕСЛИ(ВПР($K2;$K$2:$S$3576;СТОЛБЕЦ(B2);0)=0;ВПР($K2;$K$2:$S$3576;СТОЛБЕЦ(F2);0);ВПР($K2;$K$2:$S$3576;СТОЛБЕЦ(B2);0))

2. в моей таблице в них другие данные.

Но при этом формула работает!?
 
Попробуйте в любой ячейке написать формулу =СТОЛБЕЦ(B1), в ячейке будет результат 2, а не значение ячейки B1. Это просто число, которое изменяется в результате протягивания Можно выразить и через СТОЛБЕЦ(L2)-10, будет тот же результат.
 
понятно, спасибо.

применил для всего массива данных, и при проверке нашел пустые Итоговые ячейки (0), хотя в массиве имеются соответствующие записи ФИО и имэйл.
что то не работает (
 
потому что ВПР ищет первое попавшее значение
отсортируйте таблицу, что бы пустые значения были внизу.
а лучше прилагайте свой файл в котором не получилось, хотя бы с теми строчками которые не получились.
Работать надо не 12 часов, а головой.
 
Цитата
что то не работает
Прочтите еще раз сообщение #7. Там 2 варианта, а лист с базой можно скрыть, при необходимости.
 
Формула у вас gling рабочая, спасибо.

Leanna, попробовал симулировать в новой таблице с другими данными, все ОК.
если выдернуть строки с не подставленными данными в новой таблице, они подставляются.
Но в исходном файле имеются "нулевые" не подставленные ячейки.

все сделал, как рекомендовал gling, сортировал, в исходной таблице проверял формулы, менял местами столбцы, - все одно.
вся исходная таблица только со значениями подставновки весит 414 кб, прикрепить не могу.
хотел отправить в личку, там вообще нет возможности прикрепить файл.
Изменено: Александр - 08.01.2015 02:07:36
 
Александр, положите на яндекс.диск например и сюда ссылку. Варианты всегда есть, если надо.
Работать надо не 12 часов, а головой.
 
Leanna, согласен)
https://cloud.mail.ru/public/9d07a621f9da/%D0%A1%D0%BE%D0%BF%D0%BE%D1%81%D1%82%­D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5.xlsx
 
Здравствуйте Александр. Оставьте в файле только те строки которые не находит формула и саму строку которая, как вы считаете должна заполниться, остальное можно удалить. Подозреваю, что в одном из кодов лишние пробелы. Проверить можно написав в любой ячейке Код листа 1(табл. 1)= Код листа 2 (табл. 2), и будет понятно в какую сторону рыть.
Изменено: gling - 07.01.2015 15:03:11
 
сделал выборку по не подставленным данным (0), и выборочно проверил несколько кодов: 7204081032, 7204081032, 7203162031, все нормально, пробелов не оказалось.
все записи из второй группы столбцов "+Лицензия", которые не подставились в "+Итого"
 
отсортируйте сначала по первой фамилии, затем по второй фамилии, затем по третьей (от большего к меньшему, так что бы пустые ячейки были внизу), затем по коду. У вас должно так получиться (если я правильно вопрос понимаю)
Работать надо не 12 часов, а головой.
 
делать было нечего...
Для csv из №1

Код
Sub мяу()
    Dim arr, arr1(), odic As Object
    arr = Range("A1").CurrentRegion.Value
    k = UBound(arr, 2)
    Set odic = CreateObject("Scripting.Dictionary")
    For i = 2 To UBound(arr)
        If odic.exists(arr(i, k)) Then
            arr1 = odic.Item(arr(i, k))
        Else
            ReDim arr1(1 To 4)
        End If
        For ii = 1 To k - 1
            If Len(arr(i, ii)) Then
                Select Case True
                Case arr(1, ii) Like "Фамилия*"
                    If Len(arr1(1)) Then Else arr1(1) = arr(i, ii)
                Case arr(1, ii) Like "Имя*"
                    If Len(arr1(2)) Then Else arr1(2) = arr(i, ii)
                Case arr(1, ii) Like "Отчество*"
                    If Len(arr1(3)) Then Else arr1(3) = arr(i, ii)
                Case arr(1, ii) Like "Имэйл*"
                    If Len(arr1(4)) Then Else arr1(4) = arr(i, ii)
                End Select
                odic.Item(arr(i, k)) = arr1
            End If
        Next
    Next

    For i = 2 To UBound(arr)
        Cells(i, k + 1).Resize(, 4) = odic.Item(Cells(i, k).Value)
    Next
End Sub
Изменено: RAN - 07.01.2015 15:46:56
 
Leanna, правильно, спасибо!
только по Коду я сортировку не делал

от RANa сейчас попробую макрос пристроить
 
Leanna, убрал сортировку по Коду, сделал фильтр по нулевым подставлениям (0) в "Фамилия+Итого" и фильтр по "не пустым" ячейкам в "Фамилия Лицензия" в размещенном вами файле, получилось также 68 записей не заполненных.
 
это первая таблица из нескольких, которую мне необходимо сопоставить(
возможно Hugo был прав, на счет макроса.

попробую сверстать данные в одной книге, надеюсь на помощь с макросом
 
RAN, спасибо!
работает для csv из №1
 
Он и для файла из облака работает.
Только столбец кодов должен быть последним.
Страницы: 1 2 След.
Читают тему
Наверх