Excel сбор данных в одну ячейку

 

avantika

Пользователь

Сообщений: 21
Регистрация: 06.05.2013

Уважаемые форумчане, доброго времени суток! В excel я не сильна, поэтому прошу прощения за вопрос, который может показаться слишком простым, но , поискав на форуме , не нашла похожего решения.
Есть файл с несколькими листами, на одном из них нужно в определенной ячейке собрать данные из нескольких ячеек другого листа, отвечающих условию.
Чтобы было понятней: есть лист инвойса, упаковочного, каталога и стикеров, которые должны впоследствии быть наклеены на коробки. Так вот нужно, чтобы из листа с упаковочным программа собрала в этой ячейке из стикера все артикулы, находящиеся в конкретной коробке через запятую.
Посоветуйте, как можно реализовать данное решение, а то у меня уже голова кругом.    
P.S. В упаковочном номер коробки самый левый столбец, может тоже как-то через ВПР, но у меня не вышло, сколько не старалась. Excel 2010.
Файл с примером прилагаю
Заранее спасибо

Прикрепленные файлы

  • пример.xlsx (14.72 КБ)

 

Hugo

Пользователь

Сообщений: 23249
Регистрация: 22.12.2012

C помощью UDF из копилки (макросы нужно разрешить. Но если код UDF поместить в персональную книгу макросов — то можно в этой книге (как и вообще) ничего не разрешать и формат не менять).
Ну или код в надстройку, её в каталог автозапуска Экселя.

Изменено: Hugo06.05.2013 23:44:16

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

См. вариант. В ячейки В11 и Е11 вводим номера.

 

avantika

Пользователь

Сообщений: 21
Регистрация: 06.05.2013

Спасибо большое, даже не знаю, как благодарить. Осталось только разобраться что к чему, и как работает. Вот если б на формулах это всё реализовать… Макросы для меня-темный лес: боюсь их, как огня. Читаю этот код и думаю: боже, какие гениальные люди, надо ж в таком что-то соображать (хотя я и не блондинкО) Но благодаря форуму разобралась во многих функциях, теперь вот и макросы начну осваивать.  :D

 

Hugo

Пользователь

Сообщений: 23249
Регистрация: 22.12.2012

Ну мой вариант на формуле. Написанной пользователем :)
И макросы можно не разрешать, если код в «доверенном» файле.

 

nrb

Пользователь

Сообщений: 13
Регистрация: 15.04.2014

Всем доброго дня! У меня проблема похожая на эту. Надо объединить данные нескольких ячеек по условию. Условие такое: есть коды и расшифровка по ним, но есть коды которые повторяются но расшифровка разная надо объединить эти коды в один, а расшифровки по ним объединить в одну ячейку. Пример во вложенном файле. Мне не нужны макросы и сводные таблицы

 

Hugo

Пользователь

Сообщений: 23249
Регистрация: 22.12.2012

Почему третий вариант 18-ти не подклеили?
Думаю без макросов и сводных на любое количество сделать не получится. Не зря ведь мы все разные UDF писали…

 

Сергей

Пользователь

Сообщений: 11251
Регистрация: 01.01.1970

#8

15.04.2014 09:28:27

Цитата
nrb пишет: Мне не нужны макросы и сводные таблицы

а че так котегорично есть в копилке УДФ Hugo вполне прекрасно справится с данным заданием

Лень двигатель прогресса, доказано!!!

 

Hugo

Пользователь

Сообщений: 23249
Регистрация: 22.12.2012

Да не только моя — я навскидку помню ещё 3 других на эту задачу.

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Макросы и сводные не нужны? Не дам.

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

Пробуйте. Протяните до конца таб. выделенные ячейки. По второму жёлтому столбцу отфильтруйте НЕпустые значения.

<#0>
Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

nrb

Пользователь

Сообщений: 13
Регистрация: 15.04.2014

JayBhagavan

спасибо тебе это удалось ))))) СПАСИБО!!!

 

nrb

Пользователь

Сообщений: 13
Регистрация: 15.04.2014

vikttur

тоже красавец СПАСИБО

 

nrb

Пользователь

Сообщений: 13
Регистрация: 15.04.2014

Отличный форум всем спасибо

 

Владимир

Пользователь

Сообщений: 8196
Регистрация: 21.12.2012

СцепитьЕсли от The_Prist_а.

«..Сладку ягоду рвали вместе, горьку ягоду я одна.»

 

jennso

Пользователь

Сообщений: 2
Регистрация: 12.08.2014

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

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

#17

12.08.2014 13:44:29

Вопрос не по теме. Создайте новую.

Правила здесь

Объединение текста и чисел

Excel для Microsoft 365 Excel 2021 Excel 2019 Excel 2016 Excel 2013 Excel 2010 Excel 2007 Еще…Меньше

Предположим, что для подготовки массовой рассылки необходимо создать правильное предложение из нескольких столбцов данных. Или, возможно, вам нужно отформатирование чисел с текстом, не влияя на формулы, в которые эти числа используются. В Excel есть несколько способов объединения текста и чисел.

Отображение текста до или после числа в ячейке с помощью числового формата

Если столбец, который вы хотите отсортировать, содержит как числа, так и текст, например Product #15, Product #100, Product #200, он может отсортироваться не так, как вы ожидали. Ячейки, содержащие 15, 100 и 200, можно отформатирование таким образом, чтобы они появлялись на #15, product #100 и Product #200.

Используйте пользовательский числовом формате для отображения числа с текстом, не изменяя при этом поведение сортировки числа. Таким образом вы можете изменить способ их изменения, не изменяя значение.

Сделайте следующее:

  1. Выделите ячейки, которые нужно отформатировать.

  2. На вкладке Главная в группе Число щелкните стрелку .
    Кнопка вызова диалогового окна в группе "Число"

  3. В списке Категория выберите категорию, например Настраиваемые, и выберите встроенный формат, похожий на нужный.

  4. В поле Тип введите коды числов, чтобы создать нужный формат.

    Чтобы в ячейке отображался как текст, так и числа, заключив текстовые символы в двойные кавычка (» «) или перед числами, заключив их в обратное начертение ().

    ПРИМЕЧАНИЕ. При редактировании встроенного формата формат не удаляется.

Для отображения

Используйте код

Как это работает

12 в качестве #12

«Product # » 0

Текст в кавычках (включая пробел) отображается перед числом в ячейке. В коде «0» представляет число в ячейке (например, 12).

12:00 по 12:00 по 00:00 по EST

ч:мм AM/PM «EST»

Текущее время отображается с использованием формата даты и времени ч:мм.

-12 из -12,00 долларов США за недостаток и 12 — из-за избыток 12,00 долларов США

$Избыток» 0,00 долларов США;»Недостаток» — 0,00 долларов США

Значение отображается в формате валюты. Кроме того, если ячейка содержит положительное значение (или 0), после него отображается значение «Избыток». Если ячейка содержит отрицательное значение, вместо нее отображается значение «Недостаток».

Объединение текста и чисел из разных ячеек в одной ячейке с помощью формулы

Когда числа и текст объединяются в ячейке, они становятся текстом и перестают работать как числовое значение. Это означает, что с ними больше нельзя выполнять математические операции.

Для объединения чисел используйте функции СОВМЕЩАТЬ или СОВМЕЩАТЬ, ТЕКСТ или ОБЪЕДИНИТЬ, а также оператор амперсанд (&).
 

Примечания: 

  • В Excel 2016, Excel Mobile и Excel в Интернетефункция С ФУНКЦИИ СОВМЕСТИТЬ была заменена функцией СОВМЕСТИМ. Несмотря на то что функция С ФУНКЦИИ СОВМЕСТИТЬ по-прежнему доступна для обратной совместимости, следует использовать функцию СОВМЕСТИМАЯ, так как функция С ФУНКЦИИ СОВМЕСТИМАЯ может быть недоступна в будущих версиях Excel.

  • Объединить объединяет текст из нескольких диапазонов или строк и содержит между текстовыми значениями, которые будут объединены. Если в качестве разделителя используется пустая текстовая строка, функция эффективно объединит диапазоны. В Excel 2013 и предыдущих версиях эта Excel 2013 недоступна.

Примеры

На рисунке ниже приведены различные примеры.

Внимательно посмотрите на использование функции ТЕКСТ во втором примере на рисунке. Если вы присоедините число к текстовой строке с помощью оператора секаций, используйте функцию ТЕКСТ для управления тем, как число отображается. В формуле используется значение из ячейки, на которые ссылается ссылка (в данном примере — 0,4), а не отформатированные значения, которые вы видите в ячейке (40 %). Для восстановления числового форматирования используется функция ТЕКСТ.

Примеры pf, объединяющие текст и числа

Дополнительные сведения

Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.

См. также

  • Функция СЦЕПИТЬ

  • СЦЕП

  • ТЕКСТ

  • Функция TEXTJOIN

Нужна дополнительная помощь?

Хитрости »

1 Май 2011              765456 просмотров


Как собрать данные с нескольких листов или книг?

Очень часто бывает необходимо собрать данные с нескольких листов одной книги или даже с листов нескольких книг. Например, каждую неделю мы получаем некие отчеты от отделов, которые необходимо собрать в одну общую таблицу для построения сводной таблицы. Или это могут быть некие книги прайсов по товарам от разных поставщиком, который опять же надо сначала объединить, а потом уже анализировать. Вручную делать это довольно муторно. И то, муторно это только для первых 20-ти листов/файлов, потом становится просто тошно. Поэтому решил поделиться решением, которое поможет собрать данные со всех листов книги, со всех листов всех указанных книг или только с указанных листов:

'---------------------------------------------------------------------------------------
' Author : Щербаков Дмитрий(The_Prist)
'          Профессиональная разработка приложений для MS Office любой сложности
'          Проведение тренингов по MS Excel
'          https://www.excel-vba.ru
'          info@excel-vba.ru
'          WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
' Purpose: http://www.excel-vba.ru/chto-umeet-excel/kak-sobrat-dannye-s-neskolkix-listov-ili-knig/
'             Процедура сбора данных с нескольки листов/книг
'---------------------------------------------------------------------------------------
Option Explicit
 
Sub Consolidated_Range_of_Books_and_Sheets()
    Dim iBeginRange As Range, rCopy As Range, lCalc As Long, lCol As Long
    Dim oAwb As String, sCopyAddress As String, sSheetName As String
    Dim lLastrow As Long, lLastRowMyBook As Long, li As Long, iLastColumn As Integer
    Dim wsSh As Worksheet, wsDataSheet As Worksheet, bPolyBooks As Boolean, avFiles
    Dim wbAct As Workbook
    Dim bPasteValues As Boolean, IsPasteSheetName As Boolean
 
    On Error Resume Next
    'Выбираем диапазон выборки с книг
    Set iBeginRange = Application.InputBox("Выберите диапазон сбора данных." & vbCrLf & _
                                           "1. При выборе только одной ячейки данные будут собраны со всех листов начиная с этой ячейки. " & _
                                           vbCrLf & "2. При выделении нескольких ячеек данные будут собраны только с указанного диапазона всех листов.", Type:=8)
    'для указания диапазона без диалогового окна:
    'Set iBeginRange = Range("A1:A10") 'диапазон указывается нужный
    'Если диапазон не выбран - завершаем процедуру
    If iBeginRange Is Nothing Then
        Exit Sub
    End If
    'Указываем имя листа
    'Допустимо указывать в имени листа символы подставки ? и *.
    'Если указать только * то данные будут собираться со всех листов
    sSheetName = InputBox("Введите имя листа, с которого собирать данные(если не указан, то данные собираются со всех листов)", "Параметр")
    'Если имя листа не указано - данные будут собраны со вех листов
    If sSheetName = "" Then
        sSheetName = "*"
    End If
    'добавлять ли имя листа в начало таблицы
    IsPasteSheetName = (MsgBox("Вставлять имя листа первым столбцом?", vbQuestion + vbYesNo, "www.wxcel-vba.ru") = vbYes)
    On Error GoTo 0
    'Запрос - вставлять на результирующий лист все данные
    'или только значения ячеек (без формул и форматов)
    bPasteValues = (MsgBox("Вставлять только значения?", vbQuestion + vbYesNo, "www.wxcel-vba.ru") = vbYes)
    'Запрос сбора данных с книг(если Нет - то сбор идет с активной книги)
    If MsgBox("Собрать данные с нескольких книг?", vbInformation + vbYesNo, "www.wxcel-vba.ru") = vbYes Then
        avFiles = Application.GetOpenFilename("Excel files(*.xls*),*.xls*", , "Выбор файлов", , True)
        If VarType(avFiles) = vbBoolean Then Exit Sub
        bPolyBooks = True
        lCol = 1
    Else
        avFiles = Array(ThisWorkbook.FullName)
    End If
    If IsPasteSheetName Then
        lCol = lCol + 1
    End If
    'отключаем обновление экрана, автопересчет формул и отслеживание событий
    'для скорости выполнения кода и для избежания ошибок, если в книгах есть иные коды
    With Application
        lCalc = .Calculation
        .ScreenUpdating = False
        .EnableEvents = False
        .Calculation = xlManual
    End With
    'создаем новый лист в книге для сбора
    Set wsDataSheet = ActiveWorkbook.Sheets.Add(After:=Sheets(Sheets.Count))
    'если нужно сделать сбор данных на новый лист книги с кодом
    'Set wsDataSheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    'цикл по книгам
    For li = LBound(avFiles) To UBound(avFiles)
        If bPolyBooks Then
            Set wbAct = Workbooks.Open(Filename:=avFiles(li))
        Else
            Set wbAct = ThisWorkbook
        End If
        oAwb = wbAct.Name
        'цикл по листам
        For Each wsSh In wbAct.Sheets
            If wsSh.Name Like sSheetName Then
                'Если имя листа совпадает с именем листа, в который собираем данные
                'и сбор идет только с активной книги - то переходим к следующему листу
                If wsSh.Name = wsDataSheet.Name And bPolyBooks = False Then GoTo NEXT_
                With wsSh
                    Select Case iBeginRange.Count
                    Case 1 'собираем данные начиная с указанной ячейки и до конца данных
                        lLastrow = .Cells(1, 1).SpecialCells(xlLastCell).Row
                        iLastColumn = .Cells.SpecialCells(xlLastCell).Column
                        sCopyAddress = .Range(.Cells(iBeginRange.Row, iBeginRange.Column), .Cells(lLastrow, iLastColumn)).Address
                    Case Else 'собираем данные с фиксированного диапазона
                        sCopyAddress = iBeginRange.Address
                    End Select
                    lLastRowMyBook = wsDataSheet.Cells.SpecialCells(xlLastCell).Row + 1
                    'определяем для копирования диапазон только заполненных данных на листе
                    Set rCopy = Intersect(.Range(sCopyAddress).Parent.UsedRange, .Range(sCopyAddress))
                    'вставляем имя книги, с которой собраны данные
                    If lCol > 0 Then
                        If bPolyBooks Then
                            wsDataSheet.Cells(lLastRowMyBook, 1).Resize(rCopy.Rows.Count).Value = oAwb
                        End If
                        If IsPasteSheetName Then
                            wsDataSheet.Cells(lLastRowMyBook, lCol).Resize(rCopy.Rows.Count).Value = .Name
                        End If
                    End If
                    'если вставляем только значения
                    If bPasteValues Then
                        rCopy.Copy
                        wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol).PasteSpecial xlPasteValues
                        wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol).PasteSpecial xlPasteFormats
                    Else 'если вставляем все данные ячеек(формулы, форматы и т.д.)
                        rCopy.Copy wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol)
                    End If
                End With
            End If
NEXT_:
        Next wsSh
        If bPolyBooks Then
            wbAct.Close False
        End If
    Next li
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
        .Calculation = lCalc
    End With
End Sub

Приведенный выше код необходимо вставить в стандартный модуль(Что такое модуль? Какие бывают модули?). Выполнить его можно будет из этой книги нажатием клавиш Alt+F8. В появившемся окне выбрать Consolidated_Range_of_Books_and_Sheets и нажать Выполнить. Так же можно создать на листе кнопку и назначить ей данный макрос. Так же, если впервые работаете с макросами настоятельно рекомендую прочитать статью: Что такое макрос и где его искать?, а так же Почему не работает макрос?

После вызова макроса поочередно будут появляется запросы, в которых надо будет указать исходные параметры:

  • Диапазон сбора данных — Если в окне выбора диапазона выбрать только одну ячейку, то данные будут собраны со всех листов книги/книг, начиная с этой ячейки и до последней ячейки листа.
    Если выбрать несколько ячеек, данные будут собраны только с указанного диапазона всех листов книги/книг. Допускается указать несвязанный(рваный) диапазон(например, только три столбца: A:A,D:D,F:F). Сделать это можно, выделив нужный диапазон с зажатой клавишей Ctrl. Здесь необходимо учитывать, что Excel позволяет одним махом скопировать не любые рваные диапазоны, а только диапазоны одного размера и только если они начинаются с одной строки. Например, если выделить диапазоны A1:B20, F1:H20 — они будут скопированы без проблем. Но если попробовать указать диапазоны со сдвигом: A1:B20, F2:H21 — Excel выдаст ошибку.
  • Имя листа — Необязателен для указания. Если не указан — данные будут собраны со всех листов. Указать можно как точное соответствие имени листа, так и с частичным соответствием. Например, если в книгах для сбора данных необходимо собрать данные только с листа «Январь», то следует так и указать — «Январь». Если требуется собрать данные только с листов, начинающихся с «Продажи»(«Продажи ЮГ», «Продажи НН», «Продажи Запад» и т.д.), то следует применить символ подстановки звездочку — «Продажи*». Если надо собрать с листов, содержащих в имени «продажи»(«Итоговые продажи ЮГ», «Продажи НН», «Сезонные продажи» и т.д.), то указываем «*продажи*». Если надо собрать только с листа «Сезонные продажи», но известно, что вместо пробела может быть нижнее подчеркивание или тире(«Сезонные продажи», «Сезонные_продажи», «Сезонные-продажи») или иной символ, то можно также применить звездочку — «Сезонные*продажи». Но если среди листов могут встречаться и такие как «Сезонные разовые продажи», «Сезонные корпоративные продажи» и т.п., но информацию с них собирать не надо, то можно применить вопросительный знак — «Сезонные?продажи». Вопросительный знак заменяет любой один символ, звездочка — любое количество любых символов.
  • Вставлять имя листа первым столбцом? — если выбрать Да, перед данными в итоговой таблице будут записаны имена листов, с которых были собраны данные. Если будет указано собирать данные с нескольких книг — то имя листа будет во втором столбце, если с листов одной книги — то имя листа будет первым столбцом.
  • Вставлять только значения? — если выбрать Да, то в результирующий лист с листов будут вставлены исключительно значения ячеек (без формул), но при этом сохранятся их форматы(формат чисел, цвет заливки, цвет шрифта, границы и т.п.). Может пригодится, если на листах для сбора записаны формулы, ссылающиеся на другие листы, книги, диапазоны. При обычном копировании может случиться так, что формула выдаст ошибку, т.к. в книге для вставки нет таких листов и диапазонов или данные расположены иначе. Если выбрать Нет, то все ячейки с листов на результирующий будут копироваться в точности как в исходных листах.
  • И последний запрос: Собрать данные с нескольких книг? — если выбрать Да, то появится диалоговое окно выбора файлов. Надо указать все файлы, данные с которых необходимо собрать. Если выбрать Нет, то данные будут собираться с листов только активной книги. При этом, если выбран вариант сбора с нескольких книг, то первым столбцом в итоговой таблице будут записаны имена файлов, с которых были собраны данные

Данные будут собраны на новый лист книги с макросом. Если данные собирались с нескольких книг, то в первый столбец будут занесены имена книг, с которых собраны данные.

Если после сбора данных обнаружили, что после каждого файла/листа много пустых строк, то следует найти в коде строку:

lLastrow = .Cells(1, 1).SpecialCells(xlLastCell).Row

и заменить её на строку примерно следующего содержания:

lLastrow = .Cells(.Rows.Count, 1).End(xlUp).Row

где 1 — это номер столбца на листах данных, в котором искать последнюю заполненную ячейку.
Актуально это для файлов с одинаковой структурой. Например, если сбор идет с листов по продажам, то вполне может быть такое, что в столбце 1 может не быть данных. Поэтому следует определить номер столбца, в котором наполнение данных максимально. Например, это может быть столбец с наименованиями товара или с суммами. Если это столбец D, то следует строку записать так:

lLastrow = .Cells(.Rows.Count, 4).End(xlUp).Row 'ищем последнюю строку в 4-м столбце

Подробнее про определение последней строки можно прочитать в статье: Как определить последнюю ячейку на листе через VBA?

Важное замечание: Если вы используете Excel 2007 и выше и файлы для сбора данных тоже в этом формате, то следует скачанный файл сначала сохранить в формат «Книга Excel с поддержкой макросов(.xlsm)», закрыть и открыть заново. Иначе есть шанс получить ошибку при сборе данных, т.к. Excel будет в режиме совместимости и не сможет поместить на результирующий лист более 65536 строк.

Скачать пример:

  Сбор данных с листов и книг.xls (73,0 KiB, 37 087 скачиваний)

Также см.:
Сбор данных с нескольких листов/книг
Как объединить несколько текстовых файлов в один?
Просмотреть все файлы в папке
План-фактный анализ в Excel при помощи Power Query


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

Выборка значений из столбцов в одну ячейку через запятую

glebanidze

Дата: Среда, 22.05.2019, 14:06 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 16


Репутация:

0

±

Замечаний:
0% ±


Excel для Mac

Добрый день! Уважаемые знатоки! Подскажите пожалуйста, как собрать из столбца по условию (другой столбец) все значения в одну ячейку с разделителем «,»
Файл во вложении.
Формула должна просматривать столбец А и пока не сменится значение, все данные из массива столбцов B,C,D скомпилировать в одну строку, но по ячейкам.
То есть должна остаться одна строка с ячейками «цена, ссылки на фото через запятую в одной ячейке, комментарий»…

К сообщению приложен файл:

5808356.xlsx
(68.1 Kb)

Сообщение отредактировал glebanidzeСреда, 22.05.2019, 14:53

 

Ответить

sboy

Дата: Среда, 22.05.2019, 16:00 |
Сообщение № 2

Группа: Друзья

Ранг: Участник клуба

Сообщений: 2566


Репутация:

724

±

Замечаний:
0% ±


Excel 2010

Добрый день.
Вариант на Power Query

К сообщению приложен файл:

0855500.xlsx
(24.6 Kb)


Яндекс: 410016850021169

 

Ответить

glebanidze

Дата: Среда, 22.05.2019, 16:48 |
Сообщение № 3

Группа: Пользователи

Ранг: Новичок

Сообщений: 16


Репутация:

0

±

Замечаний:
0% ±


Excel для Mac

sboy, Благодарю, буду разбираться!

 

Ответить

Светлый

Дата: Среда, 22.05.2019, 17:04 |
Сообщение № 4

Группа: Друзья

Ранг: Старожил

Сообщений: 1742


Репутация:

479

±

Замечаний:
0% ±


Excel 2013, 2016

И формульное решение. Уникальные. Массивная формула:

Код

=ИНДЕКС(A:A;МИН(ЕСЛИ(СЧЁТЕСЛИ(E$1:E1;A$2:A$99)=0;СТРОКА($2:$99))))&»»

и сцепленные данные (не более 10строк):

Код

=ВПР(E2;A:C;3;)&ЕСЛИ(СЧЁТЕСЛИ(A:A;E2)<=1;»»;», «&ИНДЕКС(C:C;ПОИСКПОЗ(E2;A:A;)+1))&ЕСЛИ(СЧЁТЕСЛИ(A:A;E2)<=2;»»;», «&ИНДЕКС(C:C;ПОИСКПОЗ(E2;A:A;)+2))&ЕСЛИ(СЧЁТЕСЛИ(A:A;E2)<=3;»»;», «&ИНДЕКС(C:C;ПОИСКПОЗ(E2;A:A;)+3))&ЕСЛИ(СЧЁТЕСЛИ(A:A;E2)<=4;»»;», «&ИНДЕКС(C:C;ПОИСКПОЗ(E2;A:A;)+4))&ЕСЛИ(СЧЁТЕСЛИ(A:A;E2)<=5;»»;», «&ИНДЕКС(C:C;ПОИСКПОЗ(E2;A:A;)+5))&ЕСЛИ(СЧЁТЕСЛИ(A:A;E2)<=6;»»;», «&ИНДЕКС(C:C;ПОИСКПОЗ(E2;A:A;)+6))&ЕСЛИ(СЧЁТЕСЛИ(A:A;E2)<=7;»»;», «&ИНДЕКС(C:C;ПОИСКПОЗ(E2;A:A;)+7))&ЕСЛИ(СЧЁТЕСЛИ(A:A;E2)<=8;»»;», «&ИНДЕКС(C:C;ПОИСКПОЗ(E2;A:A;)+8))&ЕСЛИ(СЧЁТЕСЛИ(A:A;E2)<=9;»»;», «&ИНДЕКС(C:C;ПОИСКПОЗ(E2;A:A;)+9))


Программировать проще, чем писать стихи.

 

Ответить

glebanidze

Дата: Среда, 22.05.2019, 17:28 |
Сообщение № 5

Группа: Пользователи

Ранг: Новичок

Сообщений: 16


Репутация:

0

±

Замечаний:
0% ±


Excel для Mac

Светлый, Благодарю, вот формульное решение более актуально!

 

Ответить

glebanidze

Дата: Пятница, 24.05.2019, 21:06 |
Сообщение № 6

Группа: Пользователи

Ранг: Новичок

Сообщений: 16


Репутация:

0

±

Замечаний:
0% ±


Excel для Mac

Светлый, подскажите пожалуйста, а как сделать больше 10 строк… У меня там ведь бывают портянки по несколько тысяч строк… Я вообще голову сломал. У нас работа стоит из-за этой формулы(

 

Ответить

glebanidze

Дата: Пятница, 24.05.2019, 21:10 |
Сообщение № 7

Группа: Пользователи

Ранг: Новичок

Сообщений: 16


Репутация:

0

±

Замечаний:
0% ±


Excel для Mac

sboy, у меня на маке нету power query ((( может, знаете как формулой сделать это? Ну очень нужно… Голову сломал((((
пробовал так: =ЕСЛИ(B3=B2;F2&»,»&F3&»,»&F4&»,»&F5&»,»&F6&»,»&F7&»,»&F8&»,»&F9&»,»&F10;F2)
но проблема в том, что он так берет 10 строк, а их бывает и 3 и 17… какой вот формулой во второй части сделать так, чтобы он останавливался когда b3 не равно b2

 

Ответить

Светлый

Дата: Суббота, 25.05.2019, 08:57 |
Сообщение № 8

Группа: Друзья

Ранг: Старожил

Сообщений: 1742


Репутация:

479

±

Замечаний:
0% ±


Excel 2013, 2016

После фрагмента

Код

&ЕСЛИ(СЧЁТЕСЛИ(A:A;E2)<=9;»»;», «&ИНДЕКС(C:C;ПОИСКПОЗ(E2;A:A;)+9))

вставить

Код

&ЕСЛИ(СЧЁТЕСЛИ(A:A;E2)<=10;»»;», «&ИНДЕКС(C:C;ПОИСКПОЗ(E2;A:A;)+10))

и так далее.
*Чуть подправил формулу, чтобы не выдавал ошибку. 13 строк сцепляет:

Код

=ЕСЛИ(E2=»»;»»;ВПР(E2;A:C;3;)&ЕСЛИ(СЧЁТЕСЛИ(A:A;E2)<=1;»»;», «&ИНДЕКС(C:C;ПОИСКПОЗ(E2;A:A;)+1))&ЕСЛИ(СЧЁТЕСЛИ(A:A;E2)<=2;»»;», «&ИНДЕКС(C:C;ПОИСКПОЗ(E2;A:A;)+2))&ЕСЛИ(СЧЁТЕСЛИ(A:A;E2)<=3;»»;», «&ИНДЕКС(C:C;ПОИСКПОЗ(E2;A:A;)+3))&ЕСЛИ(СЧЁТЕСЛИ(A:A;E2)<=4;»»;», «&ИНДЕКС(C:C;ПОИСКПОЗ(E2;A:A;)+4))&ЕСЛИ(СЧЁТЕСЛИ(A:A;E2)<=5;»»;», «&ИНДЕКС(C:C;ПОИСКПОЗ(E2;A:A;)+5))&ЕСЛИ(СЧЁТЕСЛИ(A:A;E2)<=6;»»;», «&ИНДЕКС(C:C;ПОИСКПОЗ(E2;A:A;)+6))&ЕСЛИ(СЧЁТЕСЛИ(A:A;E2)<=7;»»;», «&ИНДЕКС(C:C;ПОИСКПОЗ(E2;A:A;)+7))&ЕСЛИ(СЧЁТЕСЛИ(A:A;E2)<=8;»»;», «&ИНДЕКС(C:C;ПОИСКПОЗ(E2;A:A;)+8))&ЕСЛИ(СЧЁТЕСЛИ(A:A;E2)<=9;»»;», «&ИНДЕКС(C:C;ПОИСКПОЗ(E2;A:A;)+9))&ЕСЛИ(СЧЁТЕСЛИ(A:A;E2)<=10;»»;», «&ИНДЕКС(C:C;ПОИСКПОЗ(E2;A:A;)+10))&ЕСЛИ(СЧЁТЕСЛИ(A:A;E2)<=11;»»;», «&ИНДЕКС(C:C;ПОИСКПОЗ(E2;A:A;)+11))&ЕСЛИ(СЧЁТЕСЛИ(A:A;E2)<=12;»»;», «&ИНДЕКС(C:C;ПОИСКПОЗ(E2;A:A;)+12)))


Программировать проще, чем писать стихи.

Сообщение отредактировал СветлыйСуббота, 25.05.2019, 09:07

 

Ответить

glebanidze

Дата: Суббота, 25.05.2019, 09:00 |
Сообщение № 9

Группа: Пользователи

Ранг: Новичок

Сообщений: 16


Репутация:

0

±

Замечаний:
0% ±


Excel для Mac

Светлый, Благодарю, я так и думал, но у меня несколько тысяч строк таблица. это же нереально такую формулу сделать…

 

Ответить

Светлый

Дата: Суббота, 25.05.2019, 09:20 |
Сообщение № 10

Группа: Друзья

Ранг: Старожил

Сообщений: 1742


Репутация:

479

±

Замечаний:
0% ±


Excel 2013, 2016

это же нереально такую формулу сделать…

от большого количества строк только время работы будет зависеть. Для каждого уникального может сцеплять как в сообщении №8 до 13 строк.


Программировать проще, чем писать стихи.

 

Ответить

glebanidze

Дата: Суббота, 25.05.2019, 09:41 |
Сообщение № 11

Группа: Пользователи

Ранг: Новичок

Сообщений: 16


Репутация:

0

±

Замечаний:
0% ±


Excel для Mac

Светлый, Ну мне достаточно и чтобы 10 строк сцеплял, хотя их бывает и по 20 с одинаковым значением столбца А. НО! Формула работает только на первые 10 уникальных значений столбца А. А потом не работает…

К сообщению приложен файл:

4619641.xlsx
(56.2 Kb)

 

Ответить

китин

Дата: Суббота, 25.05.2019, 09:48 |
Сообщение № 12

Группа: Модераторы

Ранг: Экселист

Сообщений: 6973


Репутация:

1063

±

Замечаний:
0% ±


Excel 2007;2010;2016

glebanidze, такую формулу в версии до 2016 без макросов не создать. это или UDF СцепитЕсли или ставить 2016 (или 365 не помню точно) там это уже вшито


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852

 

Ответить

Светлый

Дата: Суббота, 25.05.2019, 11:58 |
Сообщение № 13

Группа: Друзья

Ранг: Старожил

Сообщений: 1742


Репутация:

479

±

Замечаний:
0% ±


Excel 2013, 2016

Формула работает только на первые 10 уникальных значений столбца А

Тогда просто увеличить интервал в формуле уникальных:

Код

=ИНДЕКС(A:A;МИН(ЕСЛИ(СЧЁТЕСЛИ(E$1:E1;A$2:A$9999)=0;СТРОКА($2:$9999))))&»»

Десять тысяч строк хватит?


Программировать проще, чем писать стихи.

 

Ответить

glebanidze

Дата: Суббота, 25.05.2019, 12:16 |
Сообщение № 14

Группа: Пользователи

Ранг: Новичок

Сообщений: 16


Репутация:

0

±

Замечаний:
0% ±


Excel для Mac

Светлый, вот в этом и проблема. я так делал и у меня везде вычисляется только одно первое входящее значение и выдается ошибка по ячейке «несогласованная формула» ((( полтергейст какой-то. :'(

 

Ответить

glebanidze

Дата: Суббота, 25.05.2019, 12:17 |
Сообщение № 15

Группа: Пользователи

Ранг: Новичок

Сообщений: 16


Репутация:

0

±

Замечаний:
0% ±


Excel для Mac

китин, Благодарю, только у меня вообще никак не выходит этот макрос сделать… Читаю руководства как UDF этот вставить…

 

Ответить

glebanidze

Дата: Суббота, 25.05.2019, 13:52 |
Сообщение № 16

Группа: Пользователи

Ранг: Новичок

Сообщений: 16


Репутация:

0

±

Замечаний:
0% ±


Excel для Mac

китин, удалось установить UDF макрос. То есть при вводе в ячейке =сцепитьесли эксель предлагает пользовательскую функцию. Только она не работает. ввожу

Код

=СцепитьЕсли(A:A;A3=A2;C:C;»,»)

. Помогите пожалуйста, что не так. Ячейка пустая…

К сообщению приложен файл:

0872996.xls
(97.0 Kb)

Сообщение отредактировал glebanidzeСуббота, 25.05.2019, 14:01

 

Ответить

Светлый

Дата: Суббота, 25.05.2019, 15:32 |
Сообщение № 17

Группа: Друзья

Ранг: Старожил

Сообщений: 1742


Репутация:

479

±

Замечаний:
0% ±


Excel 2013, 2016

только одно первое входящее

Формула массива, вводится одновременным нажатием Ctrl+Shift+Enter.


Программировать проще, чем писать стихи.

 

Ответить

RAN

Дата: Воскресенье, 26.05.2019, 11:47 |
Сообщение № 18

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

1. UDF нужно вставлять не в UserForm, а в стандартный модуль.
2. Огрызок корежит кодировку. Замените кирилицу на латиницу.


Быть или не быть, вот в чем загвоздка!

 

Ответить

glebanidze

Дата: Понедельник, 27.05.2019, 19:52 |
Сообщение № 19

Группа: Пользователи

Ранг: Новичок

Сообщений: 16


Репутация:

0

±

Замечаний:
0% ±


Excel для Mac

Светлый, Спасибо вам большое! Ваши формулы работают и помогли мне очень сильно!

 

Ответить

Иногда при выводе результатов на лист, парсер выводит всплывающее предупреждение следующего содержания:

В столбец 5 «E» 'наименование'
выводится МАССИВ ЗНАЧЕНИЙ
Проверьте настройки вывода в столбец

Всплывающее уведомление выглядит примерно так:

Причина ошибки:

В настройках вывода в этот столбец, парсер в результате выполнения действий получает НЕ ОДНО значение (как должно быть), а МАССИВ значений (несколько результатов)
По умолчанию, такие результаты выводятся на лист сцепленными через разделитель «; » (точка с запятой + пробел)

Решение проблемы:

Нужно отредактировать список действий по выводу в этот столбец.

  • Если вам нужен только один результат из нескольких получаемых, то добавьте в конец списка действие «Несколько первых элементов массива» с параметром 1 (чтобы был взят только первый результат)
     
  • Если вам нужны ВСЕ получаемые результаты в ОДНОЙ ячейке, то добавьте в конец списка действие «Объединить (сцепить) элементы массива», и в параметре этого действия укажите разделитель (например, запятую).
    Тогда программа сцепит все результаты в одну строку.
     
  • Если вам нужны ВСЕ получаемые результаты в ОТДЕЛЬНЫХ ячейках, то в настройках вывода в этот столбец, на вкладке «Несколько столбцов»:

    Тогда программа выведет каждое значение в отдельный столбец, заодно пронумеровав эти столбцы (если нужно)
    Только не забудьте сдвинуть остальные столбцы (например, если у вас вывод столбца Ссылка на фото идет в столбец 5, и там получается массив из 3 ссылок, а столбец 6 занят другими данными, то тогда измените номер столбца 6 на 8 (чтобы освободитьь пару дополнительных столбцов для вывода ссылок на фото)

Когда вам нужно перенести список данных в одну ячейку на листе, обычно вы можете применить Объединить функция для объединения списка ячеек в одну ячейку, но это будет сложно, если необходимо объединить огромные данные. В этой статье я расскажу о некоторых быстрых приемах, которые помогут вам решить эту задачу в Excel.

Перенести данные из столбца в одну ячейку с помощью функции, определяемой пользователем

Перенесите данные из столбца в одну ячейку с помощью Kutools for Excel


За исключением функции Concatenate для объединения списка значений ячеек, вы можете применить следующий код VBA, чтобы получить результат как можно быстрее.

1. Удерживайте ALT + F11 ключи, и он открывает Microsoft Visual Basic для приложений окно.

2. Нажмите Вставить > Модулии вставьте следующий код в Модули Окно.

Код VBA: перенос данных из столбца в одну ячейку

Function transposeRange(Rg As Range)
'updateby Extendoffice
    Dim xCell As Range
    Dim xStr As String
    For Each xCell In Rg
        If Not IsEmpty(xCell.Value) Then
            xStr = xStr & xCell.Value & ","
        End If
    Next
    transposeRange = Left(xStr, Len(xStr) - 1)
End Function

3. Затем сохраните и закройте этот код, вернитесь на лист и введите эту формулу: = транспонированный диапазон (A1: A10) в пустую ячейку, чтобы поместить результат, и нажмите Enter key, вы получите, что все значения ячеек в столбце были расположены в одной ячейке, см. снимок экрана:

док транспонировать клетки в одну ячейку 1

Внимание: В приведенном выше коде A1: A10 — это диапазон списка, который вы хотите перенести в одну ячейку, а также вы можете разделить объединенный контент с другими разделителями, такими как запятая, тире, пробел и т. д., просто изменив запятую в скрипте xStr = xStr & xCell.Value & «,».


Если у вас есть Kutools for Excel, с его мощным инструментом —Сочетать, вы можете объединить данные в столбце, строке или диапазоне в одну ячейку.

После установки Kutools for Excel, пожалуйста, сделайте следующее :( Бесплатная загрузка Kutools for Excel от Yhao сейчас! )

1. Выберите столбец данных, который вы хотите объединить в одну ячейку.

2. Нажмите Кутулс > Слияние и разделениеКомбинируйте строки, столбцы или ячейки без потери данных, см. снимок экрана:

3. В появившемся диалоговом окне выберите Объединить в одну ячейку под Чтобы объединить выбранные ячейки в соответствии со следующими параметрами, а затем укажите разделитель для разделения объединенного содержимого, см. снимок экрана:

док транспонировать клетки в одну ячейку 3

4. Затем нажмите Ok or Применить кнопку, и вы получите следующий результат:

Скачать и бесплатную пробную версию Kutools for Excel Сейчас !



Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (6)


Оценок пока нет. Оцените первым!

Как собрать данные с нескольких листов или книг на один лист?

Одной из классических операций в Excel является копирование данных с одного листа на другой. Скопировал — вставил, никаких вопросов. Проблемы начинаются когда требуется собрать данные из разных источников, например с нескольких листов Excel на одном листе.

Существуют различные способы сбора данных в одном месте, в одной книге или на одном листе. Многократное копирование данных с последующей вставкой в нужном месте не рассматривается по понятным причинам, объединение данных при помощи сводных таблиц — это тоже отдельная тема. Остановимся на способе, который является наиболее эффективным в ситуации, когда требуется собрать большое количество данных с различных листов или книг на одном листе.

Сбор данных с нескольких листов Excel на итоговый лист

Для того чтобы слить данные с разных листов рабочей книги на один лист, потребуется надстройка для Excel по сбору данных. После ее установки Вам останется лишь запустить программу нажатием одной кнопки из ленты Excel и в диалоговом окне выбрать необходимые параметры для сбора информации.

Надстройка позволяет копировать заданные пользователем диапазоны данных на выбранных листах рабочей книги и вставлять скопированные данные на результирующий лист. При выборе диапазонов доступны четыре опции:

1) Используемые диапазоны — это диапазоны, начинающиеся с первой используемой ячейки и заканчивающиеся последней используемой ячейкой;

2) Предварительно выделенные диапазоны на каждом листе — диапазоны, выделенные пользователем самостоятельно, исходя из его потребностей по консолидации данных;

3) Одноименные диапазоны — диапазоны с одинаковым адресом на каждом листе, указанным на активном рабочем листе;

4) Выборочные диапазоны — диапазоны ячеек, начинающиеся с выбранной ячейки и заканчивающиеся концом листа (последней используемой ячейкой).

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

Кроме того, в диалоговом окне надстройки можно указать способ расположения данных на итоговом листе, в зависимости от выбранной опции диапазоны будут располагаться один ниже другого (вертикальное расположение), либо один правее другого (горизонтальное расположение).

Для наглядности, чтобы на итоговом листе можно было видеть где заканчивается один диапазон и начинается другой, предусмотрена возможность отделять диапазоны друг от друга двойной сплошной линией, а также добавлять имена листов перед диапазонами.

Зачастую копируемые диапазоны содержат формулы, которые ссылаются на ячейки, адреса которых выходят за пределы копируемой области, либо наличие которых на итоговом листе нежелательно, для этих случаев добавлена опция «Заменять формулы результатами вычислений». Возможность заменять формулы результатами вычислений отсутствует, если копируемые диапазоны содержат объединенные ячейки.

Когда возникает необходимость собрать с разных листов строки, отвечающие определенным условиям, например, содержащие заданный текст, то предварительно, при помощи надстройки для выборочного выделения строк, можно выделить нужные строки на всех листах, после чего используя опцию «Предварительно выделенные диапазоны на каждом листе» собрать выделенные строки на итоговый лист.

В случае, если итоговый лист содержит ненужные пустые строки, можно провести их автоматическое удаление при помощи надстройки для выборочного удаления строк.

Как правило, после переноса данных на итоговый лист, сами исходные листы становятся ненужными, в этом случае их можно удалить полностью либо выборочно при помощи надстройки для удаления листов.

Видео по сбору данных со всех листов на итоговый лист

Сбор данных с нескольких книг Excel на один лист

Аналогичный сбор данных можно организовать и из разных рабочих книг. Сделать это можно в два этапа при помощи последовательного использования двух надстроек для Excel.

1) При помощи надстройки для объединения рабочих книг в один файл, собрать все листы в одной рабочей книге;

2) При помощи надстройки для сбора данных на итоговый лист, объединить данные с разных листов.

Как собрать данные с нескольких листов excel на один лист

Многие пользователи совершают одну и ту же ошибку: разносят исходную информацию на несколько листов. Таким образом файл становится неудобным для итогового анализа. Представим что такой файл достался Вам, например от уволенного сотрудника, место которого Вы заняли 🙂 В файле 12 листов итогов работы сотрудников по месяцам, содержащие абсолютно одинаковые таблицы, отличающиеся только значениями результативности, и один общий лист, на который необходимо собрать всю информацию за год, для того что бы определить кто из сотрудников работал наиболее результативно.

ПРОБЛЕМА: Как быстро собрать информацию на один лист из нескольких?
И заполнить такую форму:

КАК ЭТО РАБОТАЕТ:
Функция ДВССЫЛ() возвращает ссылку, заданную текстовой строкой. По простому говоря:=ДВССЫЛ( B1 &» !B2 «) — даёт нам ссылку аналогичную = Янв !B2 , потому как в ячейке В1 находится текст Янв , который конкатенируется (сцепляется) посредством оператора конкатенации амперсанда & с указанием конкретной ячейки листа Янв В2 .

КОММЕНТАРИИ: Так же можно использовать подобные конструкции и для извлечения данных из других книг.

МИНУСЫ: Функция ДВССЫЛ() не работает с закрытыми книгами.

ОБЛАСТЬ ПРИМЕНЕНИЯ
: Любая версия Excel

Консолидация данных с нескольких листов

Примечание: Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим ссылку на оригинал (на английском языке).

Для подведения итогов и результатов из отдельных листов, можно объединить данные из каждого листа в главном листе. Листы может быть в той же книге как главном листе или в других книгах. При объединении данных, чтобы упростить можно обновить и статистической обработки при необходимости собирать данные.

Например, если в каждом из региональных офисов есть свой лист расходов, с помощью консолидации можно свести эти данные на главном листе корпоративных расходов. Главный лист также может содержать итоговые и средние значения продаж, данные о складских запасах и информацию о самых популярных товарах в рамках всей компании.

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

Консолидация данных по положению или категории двумя способами.

Консолидация данных по расположению: данные в исходных областях том же порядке и использует одинаковых наклеек. Этот метод используется для консолидации данных из нескольких листов, например отделов бюджета листов, которые были созданы из одного шаблона.

Консолидация по категории: данные в исходных областях не расположены в одном и том же порядке, но имеют одинаковые метки. Используйте этот способ, чтобы консолидировать данные из нескольких листов с разными макетами, но одинаковыми метками данных.

Консолидация данных по категории похоже на создание сводной таблицы. Со сводной таблицей тем не менее, вы можете легко переупорядочение категории. Если вам нужна более гибкие Консолидация по категории, можно создать сводную таблицу .

Примечание: В этой статье были созданы с Excel 2016. Хотя представления могут отличаться при использовании другой версии Excel, шаги одинаковы.

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

Если вы еще не сделано, настройте данные на каждом листе составные, сделав следующее:

Убедитесь, что все диапазоны данных представлены в формате списка. Каждый столбец необходимо иметь метку (верхний колонтитул) в первой строке и содержать похожие данные. Должен быть отсутствуют пустые строки или столбцы в любом месте в списке.

Разместите каждый диапазон на отдельном листе, но не было введено никаких данных в основном листе где план для консолидации данных. Excel будет сделать это для вас.

Убедитесь, что всех диапазонов совпадают.

На основном листе щелкните левый верхний угол области, в которой требуется разместить консолидированные данные.

Примечание: Чтобы избежать перезаписи существующие данные в основном листе, убедитесь, оставьте достаточно ячеек справа и верхний угол консолидированные данные.

Нажмите кнопку данные>Консолидация (в группе Работа с данными ).

Выберите в раскрывающемся списке Функция функцию, которую вы хотите использовать для консолидации данных. По умолчанию используется значение СУММ.

Вот пример, в котором выбраны три диапазоны листа:

Далее в поле ссылка нажмите кнопку Свернуть, чтобы уменьшить масштаб панели и выбрать данные на листе.

Щелкните лист, содержащий данные, которые требуется консолидировать данные и нажмите кнопку Развернуть диалоговое окно справа, чтобы вернуться в диалоговое окно Консолидация .

Если лист, содержащий данные, которые необходимо объединить в другой книге, нажмите кнопку Обзор, чтобы найти необходимую книгу. После поиска и нажмите кнопку ОК, Excel в поле ссылка введите путь к файлу и добавление восклицательный знак, путь к. Чтобы выбрать другие данные можно нажмите Продолжить.

Вот пример, в котором выбраны три диапазоны листа выбранного:

Во всплывающем окне Консолидация нажмите кнопку Добавить. Повторите этот сценарий, чтобы добавить все нужные диапазоны консолидации.

Обновления автоматически и вручную: Если требуется автоматическое обновление консолидации таблицы при изменении исходных данных, просто установите флажок создавать связи с исходными данными. Если это поле остается неограниченный, возможность обновления консолидации вручную.

Связи невозможно создать, если исходная и конечная области находятся на одном листе.

Если необходимо изменить степень диапазона — или замените диапазон — выберите диапазон, во всплывающем окне Консолидация и обновлять его, выполнив указанные выше действия. Создаст новый в ссылке на диапазон, поэтому вам нужно будет сначала удалить предыдущий перед Консолидация еще раз. Просто выберите старой ссылки и нажмите клавишу Delete.

Нажмите кнопку ОК, а Excel создаст консолидации для вас. Кроме того можно применить форматирование. Бывает только необходимо отформатировать один раз, если не перезапустить консолидации.

Все названия, не совпадающие с названиями в других исходных областях, приведут к появлению дополнительных строк или столбцов в консолидированных данных.

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

Если данные для консолидации находятся в разных ячейках разных листов:

Введите формулу со ссылками на ячейки других листов (по одной на каждый лист). Например, чтобы консолидировать данные из листов «Продажи» (в ячейке B4), «Кадры» (в ячейке F5) и «Маркетинг» (в ячейке B9) в ячейке A2 основного листа, введите следующее:

Совет: Чтобы указать ссылку на ячейку — например, продажи! B4 — в формуле, не вводя, введите формулу до того места, куда требуется вставить ссылку, а затем щелкните лист, используйте клавишу tab и затем щелкните ячейку. Excel будет завершена адрес имя и ячейку листа для вас. Примечание: формулы в таких случаях может быть ошибкам, поскольку очень просто случайно выбираемых неправильной ячейки. Также может быть сложно ошибку сразу после ввода сложные формулы.

Если данные для консолидации находятся в одинаковых ячейках разных листов:

Ввод формулы с трехмерной ссылки, которая использует ссылку на диапазон имен листов. Например для консолидации данных в ячейках с A2 по продажам через маркетинга включительно, в ячейке E5 главном листе вы бы введите следующие данные:

Дополнительные сведения

Вы всегда можете задать вопрос специалисту Excel Tech Community, попросить помощи в сообществе Answers community, а также предложить новую функцию или улучшение на веб-сайте Excel User Voice.

Как собрать данные с нескольких листов или книг?

Очень часто бывает необходимо собрать данные с нескольких листов одной книги или даже с листов нескольких книг. Например, каждую неделю мы получаем некие отчеты от отделов, которые необходимо собрать в одну общую таблицу для построения сводной таблицы. Или это могут быть некие книги прайсов по товарам от разных поставщиком, который опять же надо сначала объединить, а потом уже анализировать. Вручную делать это довольно муторно. И то, муторно это только для первых 20-ти листов/файлов, потом становится просто тошно. Поэтому решил поделиться решением, которое поможет собрать данные со всех листов книги, со всех листов всех указанных книг или только с указанных листов:

‘————————————————————————————— ‘ Module : mConsolidated ‘ DateTime : 02.02.2010 17:06 ‘ Author : The_Prist(Щербаков Дмитрий) ‘ Purpose : http://www.excel-vba.ru/chto-umeet-excel/kak-sobrat-dannye-s-neskolkix-listov-ili-knig/ ‘ Процедура сбора данных с нескольки листов/книг ‘————————————————————————————— Option Explicit Sub Consolidated_Range_of_Books_and_Sheets() Dim iBeginRange As Range, rCopy As Range, lCalc As Long, lCol As Long Dim oAwb As String, sCopyAddress As String, sSheetName As String Dim lLastrow As Long, lLastRowMyBook As Long, li As Long, iLastColumn As Integer Dim wsSh As Worksheet, wsDataSheet As Worksheet, bPolyBooks As Boolean, avFiles Dim wbAct As Workbook Dim bPasteValues As Boolean On Error Resume Next ‘Выбираем диапазон выборки с книг Set iBeginRange = Application.InputBox(«Выберите диапазон сбора данных.» & vbCrLf & _ «1. При выборе только одной ячейки данные будут собраны со всех листов начиная с этой ячейки. » & _ vbCrLf & «2. При выделении нескольких ячеек данные будут собраны только с указанного диапазона всех листов.», Type:=8) ‘для указания диапазона без диалогового окна: ‘Set iBeginRange = Range(«A1:A10») ‘диапазон указывается нужный ‘Если диапазон не выбран — завершаем процедуру If iBeginRange Is Nothing Then Exit Sub ‘Указываем имя листа ‘Допустимо указывать в имени листа символы подставки ? и *. ‘Если указать только * то данные будут собираться со всех листов sSheetName = InputBox(«Введите имя листа, с которого собирать данные(если не указан, то данные собираются со всех листов)», «Параметр») ‘Если имя листа не указано — данные будут собраны со вех листов If sSheetName = «» Then sSheetName = «*» On Error GoTo 0 ‘Запрос — вставлять на результирующий лист все данные ‘или только значения ячеек (без формул и форматов) bPasteValues = (MsgBox(«Вставлять только значения?», vbQuestion + vbYesNo, «Excel-VBA») = vbYes) ‘Запрос сбора данных с книг(если Нет — то сбор идет с активной книги) If MsgBox(«Собрать данные с нескольких книг?», vbInformation + vbYesNo, «Excel-VBA») = vbYes Then avFiles = Application.GetOpenFilename(«Excel files(*.xls*),*.xls*», , «Выбор файлов», , True) If VarType(avFiles) = vbBoolean Then Exit Sub bPolyBooks = True lCol = 1 Else avFiles = Array(ThisWorkbook.FullName) End If ‘отключаем обновление экрана, автопересчет формул и отслеживание событий ‘для скорости выполнения кода и для избежания ошибок, если в книгах есть иные коды With Application lCalc = .Calculation .ScreenUpdating = False: .EnableEvents = False: .Calculation = xlManual End With ‘создаем новый лист в книге для сбора Set wsDataSheet = ActiveWorkbook.Sheets.Add(After:=Sheets(Sheets.Count)) ‘если нужно сделать сбор данных на новый лист книги с кодом ‘Set wsDataSheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)) ‘цикл по книгам For li = LBound(avFiles) To UBound(avFiles) If bPolyBooks Then Set wbAct = Workbooks.Open(Filename:=avFiles(li)) Else Set wbAct = ThisWorkbook End If oAwb = wbAct.Name ‘цикл по листам For Each wsSh In wbAct.Worksheets If wsSh.Name Like sSheetName Then ‘Если имя листа совпадает с именем листа, в который собираем данные ‘и сбор идет только с активной книги — то переходим к следующему листу If wsSh.Name = wsDataSheet.Name And bPolyBooks = False Then GoTo NEXT_ With wsSh Select Case iBeginRange.Count Case 1 ‘собираем данные начиная с указанной ячейки и до конца данных lLastrow = .Cells(1, 1).SpecialCells(xlLastCell).Row iLastColumn = .Cells.SpecialCells(xlLastCell).Column sCopyAddress = .Range(.Cells(iBeginRange.Row, iBeginRange.Column), .Cells(lLastrow, iLastColumn)).Address Case Else ‘собираем данные с фиксированного диапазона sCopyAddress = iBeginRange.Address End Select lLastRowMyBook = wsDataSheet.Cells.SpecialCells(xlLastCell).Row + 1 ‘определяем для копирования диапазон только заполненных данных на листе Set rCopy = Intersect(.Range(sCopyAddress).Parent.UsedRange, .Range(sCopyAddress)) ‘вставляем имя книги, с которой собраны данные If lCol Then wsDataSheet.Cells(lLastRowMyBook, 1).Resize(rCopy.Rows.Count).Value = oAwb ‘если вставляем только значения и форматы ячеек If bPasteValues Then rCopy.Copy wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol).PasteSpecial xlPasteValues wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol).PasteSpecial xlPasteFormats Else ‘если вставляем все данные ячеек(значения, формулы, форматы и т.д.) rCopy.Copy wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol) End If End With End If NEXT_: Next wsSh If bPolyBooks Then wbAct.Close False Next li With Application .ScreenUpdating = True: .EnableEvents = True: .Calculation = lCalc End With End Sub

Приведенный выше код необходимо вставить в стандартный модуль(Что такое модуль? Какие бывают модули?). Выполнить его можно будет из этой книги нажатием клавиш Alt+F8. В появившемся окне выбрать Consolidated_Range_of_Books_and_Sheets и нажать Выполнить. Так же можно создать на листе кнопку и назначить ей данный макрос. Так же, если впервые работаете с макросами настоятельно рекомендую прочитать статью: Что такое макрос и где его искать?, а так же Почему не работает макрос?

После вызова макроса поочередно будут появляется запросы, в которых надо будет указать исходные параметры:

  • Диапазон сбора данных — Если в окне выбора диапазона выбрать только одну ячейку, то данные будут собраны со всех листов книги/книг, начиная с этой ячейки и до последней ячейки листа.
    Если выбрать несколько ячеек, данные будут собраны только с указанного диапазона всех листов книги/книг. Допускается указать несвязанный(рваный) диапазон(например, только три столбца: A:A , D:D , F:F ). Сделать это можно, выделив нужный диапазон с зажатой клавишей Ctrl
  • Имя листа — Необязателен для указания. Если не указан — данные будут собраны со всех листов. Указать можно как точное соответствие имени листа, так и с частичным соответствием. Например, если в книгах для сбора данных необходимо собрать данные только с листа «Январь», то следует так и указать — «Январь». Если требуется собрать данные только с листов, начинающихся с «Продажи»(«Продажи ЮГ», «Продажи НН», «Продажи Запад» и т.д.), то следует применить символ подстановки звездочку — «Продажи*». Если надо собрать с листов, содержащих в имени «продажи»(«Итоговые продажи ЮГ», «Продажи НН», «Сезонные продажи» и т.д.), то указываем «*продажи*». Если надо собрать только с листа «Сезонные продажи», но известно, что вместо пробела может быть нижнее подчеркивание или тире(«Сезонные продажи», «Сезонные_продажи», «Сезонные-продажи») или иной символ, то можно также применить звездочку — «Сезонные*продажи». Но если среди листов могут встречаться и такие как «Сезонные разовые продажи», «Сезонные корпоративные продажи» и т.п., но информацию с них собирать не надо, то можно применить вопросительный знак — «Сезонные?продажи». Вопросительный знак заменяет любой один символ, звездочка — любое количество любых символов.
  • Далее появится запрос: Вставлять только значения? — если выбрать Да, то в результирующий лист с листов будут вставлены исключительно значения ячеек (без формул), но при этом сохранятся их форматы(формат чисел, цвет заливки, цвет шрифта, границы и т.п.). Может пригодится, если на листах для сбора записаны формулы, ссылающиеся на другие листы, книги, диапазоны. При обычном копировании может случиться так, что формула выдаст ошибку, т.к. в книге для вставки нет таких листов и диапазонов или данные расположены иначе. Если выбрать Нет, то все ячейки с листов на результирующий будут копироваться в точности как в исходных листах.
  • И последний запрос: Собрать данные с нескольких книг? — если выбрать Да, то появится диалоговое окно выбора файлов. Надо указать все файлы, данные с которых необходимо собрать. Если выбрать Нет, то данные будут собираться с листов только активной книги.

Данные будут собраны на новый лист книги с макросом. Если данные собирались с нескольких книг, то в первый столбец будут занесены имена книг, с которых собраны данные.

Если после сбора данных обнаружили, что после каждого файла/листа много пустых строк, то следует найти в коде строку:

lLastrow = .Cells(1, 1).SpecialCells(xlLastCell).Row

Excel At Excel вып.3: Собираем данные с разных листов

Дано: 22 таблицы унифицированного формата с перечнем помещений от 22 дочерних предприятий.

Задача: сделать сводную таблицу с данными всех 22 таблиц

Итак, решение. Есть три варианта решения данной задачи. Первый — использовать встроенную (начиная с excel 2013) надстройку PowerPivot (об этом методе мы поговорим позднее). Второй — посредством сводной таблицы через несколько диапазонов консолидации. Не люблю этот метод, т.к. такая сводная таблица имеет существенно более ограниченный функционал по сравнению с простой сводной таблицей. Наконец, третий вариант — это создать общую таблицу с использованием функции INDIRECT (ДВССЫЛ). Этому методу и посвятим сегодня наш пост.

Что мы имеем? 22 одинаковых по формату таблицы на отдельных листах и с разным количеством строк в каждой. Соответственно, для построения общей таблицы нам надо решить следующие «проблемы»:

1) как заставить общую таблицу «переключаться» с одного листа данных на другой?;

2) как заставить ее делать это в нужный момент (когда закончились строки на одном листе)?

Начнем со второго вопроса, т.к. ответ на него мы уже знаем. Это циклы, о которых мы подробно говорили в выпуске 2 «Циклы в Excel без VBA». Для решения проблемы достаточно в наш файл добавить лист с перечнем всех обществ, соответствующими названиями листов и количеством подсчетом количества строк на каждом таком листе.

Обратите внимание на формулу в столбце Кол-во записей. Мы могли бы использовать просто COUNTA (СЧЁТА) со ссылкой на каждый лист. Но это потребует времени для «линковки» каждого листа. Плюс мы с вами готовим универсальные решения, которые будут работать в независимости от количества листов.

Именно для этого в функцию COUNTA (СЧЁТА) и внедряется эта чуднАя функция INDIRECT (ДВССЫЛ). Остановимся на ней подробнее.

Функция имеет, по сути, единственный параметр — ref_text (ссылка_на_текст). Что делает эта функция? Всего-навсего преобразует текст в ссылку на ячейку. То есть она преобразует текст, например, «А1» в ссылку и возвращает значение ячейки А1.

Соответственно, зная несложные правила работы с текстом в Excel, мы можем легко сделать текст внутри изменяемым, а значит можем сделать и изменяемыми ссылки, которые будет возвращать функция INDIRECT (ДВССЫЛ).

Разберем пример выше. Функция INDIRECT (ДВССЫЛ) имеет следующий вид:

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

Соответственно, в нашем случае у нас неизменен столбец B:B, а вот название листа меняется. Для «автоматизации» формулы заменяем Название листа на ссылку на название листа с данными по соответствующему обществу (столбец Название листа). Получаем следующее:

где все, что подчеркнуто — текст, а выделено жирным — ссылки.

ВАЖНО! Обратите внимание на кавычки и конкатенацию («склеивание») при помощи амперсента. Не забудьте, что текст вносится в кавычках и соединяется со ссылками при помощи символа &.

Получается, что INDIRECT (ДВССЫЛ) получает название листа из ячеек в столбце А:А (Название листа), а диапазон у нас прописан фиксированно текстом (В:В). COUNTA (СЧЁТА) же просто считает количество строк в столбце В:В на соответствующем листа за вычетом заголовка.

Перейдем к формированию общей таблицы. Как вы уже наверное прикинули, у нас будет два вложенных цикла: один — количество обществ, второй — количество записей на листе данных по соответствующему обществу. Соответственно, нам потребуются два вспомогательных столбца (определим их в столбцы А и В). Ровно так же, как мы делали на примере в выпуске 2 «Циклы в Excel без VBA», пишем формулу первого цикла:

=IF(A2=»»;»»;IF(COUNTIF($A$2:A2;A2)=OFFSET(‘Список обществ’!$E$2;A2-1;0);IF(A2+1>COUNTA(‘Список обществ’!A:A)-1;»»;A2+1);A2))

Затем пишем формулу второго цикла:

Далее при помощи уже знакомой нам функции OFFSET (СМЕЩ) заполняем столбцы из таблицы на листе Список обществ.

Осталось подтянуть данные с 22 листов по обществам. Тут нам опять поможет OFFSET (СМЕЩ), но уже в паре с INDIRECT (ДВССЫЛ).

OFFSET (СМЕЩ) передает в формулу название листа, а конструкция B2+1 — номер строки в столбце Е на том листе.

ВАЖНО! Обратите внимание, что OFFSET (СМЕЩ) вкладывается внутрь INDIRECT (ДВССЫЛ), а не наоборот.

Понравилась статья? Поделить с друзьями:
  • Excel самых часто встречающихся значений
  • Excel самые удобные таблицы
  • Excel самые популярные формулы excel
  • Excel самые важные формулы
  • Excel самоучитель формулы впр