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

Вход

Регистрация

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

 

= Мир MS Excel/Копирование по условию списка данных - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Копирование по условию списка данных
Leojse Дата: Суббота, 15.09.2018, 11:29 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 148
Репутация: 1 ±
Замечаний: 0% ±

2010/2013
Добрый день, уважаемые форумчане!
Помогите, пожалуйста, по следующему вопросу.
Есть книга, в которой данные из одной таблицы (лист "Исходные данные") нужно представить формате другой таблицы (лист "Результат").
Сейчас, я делаю лист "Результат" вручную в следующем порядке: на листе "Нужный формат" из списка (ячейка "B1") выбираю нужный магазин. После того, как таблица пересчиталась, копирую данные магазина в лист "Результат". Затем, возвращаюсь в "Нужный формат", выбираю следующий магазин, копирую на лист "Результат" и так далее. Структуры листов "Исходные данные", "Нужный формат", "Результат" статичны. Проблема в том, что в примере лишь малая часть данных. На самом деле, таблицы гораздо больше, и магазинов также больше.
Подскажите, пожалуйста, возможно ли сделать так, чтобы можно было задавать список магазинов заранее, к примеру, на листе "Список магазинов" в таблице "Список для поиска", чтобы данные из того списка поочередно попадали в список на лист "Нужный формат" (ячейка "B1"), и после того, как таблица в "Нужном формате" пересчитывалась, данные копировались бы на лист "Результат"?
Если Вас не затруднит, не могли бы Вы в коде написать комментарии.
Заранее огромное спасибо за любую подсказку!
К сообщению приложен файл: 2497286.xlsx (13.0 Kb)


Сообщение отредактировал Leojse - Суббота, 15.09.2018, 11:31
 
Ответить
СообщениеДобрый день, уважаемые форумчане!
Помогите, пожалуйста, по следующему вопросу.
Есть книга, в которой данные из одной таблицы (лист "Исходные данные") нужно представить формате другой таблицы (лист "Результат").
Сейчас, я делаю лист "Результат" вручную в следующем порядке: на листе "Нужный формат" из списка (ячейка "B1") выбираю нужный магазин. После того, как таблица пересчиталась, копирую данные магазина в лист "Результат". Затем, возвращаюсь в "Нужный формат", выбираю следующий магазин, копирую на лист "Результат" и так далее. Структуры листов "Исходные данные", "Нужный формат", "Результат" статичны. Проблема в том, что в примере лишь малая часть данных. На самом деле, таблицы гораздо больше, и магазинов также больше.
Подскажите, пожалуйста, возможно ли сделать так, чтобы можно было задавать список магазинов заранее, к примеру, на листе "Список магазинов" в таблице "Список для поиска", чтобы данные из того списка поочередно попадали в список на лист "Нужный формат" (ячейка "B1"), и после того, как таблица в "Нужном формате" пересчитывалась, данные копировались бы на лист "Результат"?
Если Вас не затруднит, не могли бы Вы в коде написать комментарии.
Заранее огромное спасибо за любую подсказку!

Автор - Leojse
Дата добавления - 15.09.2018 в 11:29
Pelena Дата: Суббота, 15.09.2018, 15:46 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19530
Репутация: 4637 ±
Замечаний: ±

Excel 365 & Mac Excel
Leojse, эта операция называется Редизайнер таблиц. Можно воспользоваться поиском и найти готовые макросы.
Я предлагаю немного другой способ - через сводную таблицу. Посмотрите видео (задача не Ваша, но алгоритм тот же), результат в файле
К сообщению приложен файл: 0260837.xlsx (19.8 Kb)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеLeojse, эта операция называется Редизайнер таблиц. Можно воспользоваться поиском и найти готовые макросы.
Я предлагаю немного другой способ - через сводную таблицу. Посмотрите видео (задача не Ваша, но алгоритм тот же), результат в файле

Автор - Pelena
Дата добавления - 15.09.2018 в 15:46
Leojse Дата: Суббота, 15.09.2018, 16:13 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 148
Репутация: 1 ±
Замечаний: 0% ±

2010/2013
Pelena, огромное Вам спасибо за ответ!
Я попробовал сделать, как указано в видео. Да, всё получилось. Как вариант, конечно, лучше, чем то, что я делаю сейчас. Таблица сформировалась по всем магазинам. Далее, необходимо пользоваться фильтром и убирать ненужные магазины. Дело в том, что объемы данных очень велики. Наименование магазинов всегда порядка ста штук и я вручную эти наименования перебираю (хотя есть электронный список этих магазинов) через выпадающий список.
Попробовал записать в VBA операцию - выбор значения из списка. VBA вообще ничего не записал.
Pelena, пожалуйста, подскажите, хотя бы, как выбрать значение в выпадающем списке из VBA?
 
Ответить
СообщениеPelena, огромное Вам спасибо за ответ!
Я попробовал сделать, как указано в видео. Да, всё получилось. Как вариант, конечно, лучше, чем то, что я делаю сейчас. Таблица сформировалась по всем магазинам. Далее, необходимо пользоваться фильтром и убирать ненужные магазины. Дело в том, что объемы данных очень велики. Наименование магазинов всегда порядка ста штук и я вручную эти наименования перебираю (хотя есть электронный список этих магазинов) через выпадающий список.
Попробовал записать в VBA операцию - выбор значения из списка. VBA вообще ничего не записал.
Pelena, пожалуйста, подскажите, хотя бы, как выбрать значение в выпадающем списке из VBA?

Автор - Leojse
Дата добавления - 15.09.2018 в 16:13
Pelena Дата: Суббота, 15.09.2018, 16:37 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 19530
Репутация: 4637 ±
Замечаний: ±

Excel 365 & Mac Excel
как выбрать значение в выпадающем списке из VBA?

Просто присвоить ячейке В1 нужное значение
[vba]
Код
Range("B1")=...
[/vba]
Вы бы показали свои варианты кода, чтобы не с нуля писать


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
как выбрать значение в выпадающем списке из VBA?

Просто присвоить ячейке В1 нужное значение
[vba]
Код
Range("B1")=...
[/vba]
Вы бы показали свои варианты кода, чтобы не с нуля писать

Автор - Pelena
Дата добавления - 15.09.2018 в 16:37
Kuzmich Дата: Суббота, 15.09.2018, 18:46 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 715
Репутация: 157 ±
Замечаний: 0% ±

Excel 2003
Цитата
возможно ли сделать так, чтобы можно было задавать список магазинов заранее

Я бы на листе Исходные данные в каком-либо столбце проставил признак (например +),
который бы указывал, что данные по выбранному магазину надо переносить на лист Результат.
Затем запускаем макрос, который переносит данные.
 
Ответить
Сообщение
Цитата
возможно ли сделать так, чтобы можно было задавать список магазинов заранее

Я бы на листе Исходные данные в каком-либо столбце проставил признак (например +),
который бы указывал, что данные по выбранному магазину надо переносить на лист Результат.
Затем запускаем макрос, который переносит данные.

Автор - Kuzmich
Дата добавления - 15.09.2018 в 18:46
Pelena Дата: Суббота, 15.09.2018, 18:55 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 19530
Репутация: 4637 ±
Замечаний: ±

Excel 365 & Mac Excel
Leojse, посмотрите такой вариант. За основу взят макрос отсюда
К сообщению приложен файл: 2497286.xlsm (23.2 Kb)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеLeojse, посмотрите такой вариант. За основу взят макрос отсюда

Автор - Pelena
Дата добавления - 15.09.2018 в 18:55
Leojse Дата: Суббота, 15.09.2018, 21:26 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 148
Репутация: 1 ±
Замечаний: 0% ±

2010/2013
Kuzmich, Pelena, спасибо за подсказки!
Попробовал редизайн по ссылке в сообщении 6 от Pelena. Всё же на выходе получается не то, что нужно.
В примере лишь маленький фрагмент реальной таблицы на листе "Результат". На самом деле, структура там и вовсе, мягко говоря, не очень хорошая - где-то нужно превратить часть исходной таблицы в "плоскую", где-то часть таблицы нужно оставить двумерной. Поэтому я и сделал таблицу-"Результат" через ВПР со списком.
Всё же, прошу помощи в коде для моих нужд.
Ход мыслей у меня такой - определить диапазон списка для отбора данных (лист "Список магазинов", столбец D).
Затем, в ячейку "B1" листа "Нужный формат" вставляем содержимое первой ячейки (лист "Список магазинов", ячейка D2).
Таблица пересчитывается. Выделяем диапазон таблицы без шапки и копируем на лист "Результат".
После копирования таблицы, в ячейку "B1" листа "Нужный формат" вставляем следующее значение из "Списка магазинов" (ячейка D3) и так далее.
Полагаю, что это цикл в цикле, и поэтому вообще теряюсь, как это можно сделать.
К моему стыду, в модуле всего пара строк.
Пожалуйста, помогите решить задачу.
К сообщению приложен файл: 8303836.xls (49.0 Kb)


Сообщение отредактировал Leojse - Суббота, 15.09.2018, 21:40
 
Ответить
СообщениеKuzmich, Pelena, спасибо за подсказки!
Попробовал редизайн по ссылке в сообщении 6 от Pelena. Всё же на выходе получается не то, что нужно.
В примере лишь маленький фрагмент реальной таблицы на листе "Результат". На самом деле, структура там и вовсе, мягко говоря, не очень хорошая - где-то нужно превратить часть исходной таблицы в "плоскую", где-то часть таблицы нужно оставить двумерной. Поэтому я и сделал таблицу-"Результат" через ВПР со списком.
Всё же, прошу помощи в коде для моих нужд.
Ход мыслей у меня такой - определить диапазон списка для отбора данных (лист "Список магазинов", столбец D).
Затем, в ячейку "B1" листа "Нужный формат" вставляем содержимое первой ячейки (лист "Список магазинов", ячейка D2).
Таблица пересчитывается. Выделяем диапазон таблицы без шапки и копируем на лист "Результат".
После копирования таблицы, в ячейку "B1" листа "Нужный формат" вставляем следующее значение из "Списка магазинов" (ячейка D3) и так далее.
Полагаю, что это цикл в цикле, и поэтому вообще теряюсь, как это можно сделать.
К моему стыду, в модуле всего пара строк.
Пожалуйста, помогите решить задачу.

Автор - Leojse
Дата добавления - 15.09.2018 в 21:26
Pelena Дата: Суббота, 15.09.2018, 21:26 | Сообщение № 8
Группа: Админы
Ранг: Местный житель
Сообщений: 19530
Репутация: 4637 ±
Замечаний: ±

Excel 365 & Mac Excel
Я же Вам готовое решение в файле выложила. Не подошло?


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеЯ же Вам готовое решение в файле выложила. Не подошло?

Автор - Pelena
Дата добавления - 15.09.2018 в 21:26
Leojse Дата: Суббота, 15.09.2018, 21:28 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 148
Репутация: 1 ±
Замечаний: 0% ±

2010/2013
Pelena, к сожалению, нет, не подошло.
 
Ответить
СообщениеPelena, к сожалению, нет, не подошло.

Автор - Leojse
Дата добавления - 15.09.2018 в 21:28
Leojse Дата: Суббота, 15.09.2018, 22:08 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 148
Репутация: 1 ±
Замечаний: 0% ±

2010/2013
У меня получилось последовательно вставлять значения в ячейку "B1" листа "Нужный формат". Точнее, цикл вставляет поочередно значения в ячейку B1.
Подскажите, пожалуйста, а как копировать таблицу на лист "результат" после вставки первого значения, затем второго и так далее?
К сообщению приложен файл: 1767601.xls (49.0 Kb)


Сообщение отредактировал Leojse - Суббота, 15.09.2018, 22:11
 
Ответить
СообщениеУ меня получилось последовательно вставлять значения в ячейку "B1" листа "Нужный формат". Точнее, цикл вставляет поочередно значения в ячейку B1.
Подскажите, пожалуйста, а как копировать таблицу на лист "результат" после вставки первого значения, затем второго и так далее?

Автор - Leojse
Дата добавления - 15.09.2018 в 22:08
Kuzmich Дата: Суббота, 15.09.2018, 22:34 | Сообщение № 11
Группа: Проверенные
Ранг: Ветеран
Сообщений: 715
Репутация: 157 ±
Замечаний: 0% ±

Excel 2003
Цитата
Ход мыслей у меня такой - определить диапазон списка для отбора данных (лист "Список магазинов", столбец D).

При активном листе "Список магазинов" запустите макрос (в стандартном модуле)
[vba]
Код
Sub iPerenos()
Dim i As Long
Dim iLastRow As Long
Dim FoundCell As Range
Dim Result As Worksheet
Dim j As Integer
  Set Result = ThisWorkbook.Worksheets("Результат")
   iLastRow = Result.Cells(Result.Rows.Count, "A").End(xlUp).Row + 1
   Result.Range("A2:C" & iLastRow).ClearContents
With Worksheets("Исходные данные")
   iLastRow = Cells(Rows.Count, "D").End(xlUp).Row
  For i = 2 To iLastRow
    Set FoundCell = .Columns(1).Find(Cells(i, "D"), , xlValues, xlWhole)
     If Not FoundCell Is Nothing Then
       Result.Range("A" & Result.Cells(Result.Rows.Count, "A").End(xlUp).Row + 1).Resize(12) = FoundCell
       .Range(.Cells(1, "B"), .Cells(1, "M")).Copy
       Result.Range("B" & Result.Cells(Result.Rows.Count, "B").End(xlUp).Row + 1).PasteSpecial _
               xlPasteValues, , Transpose:=True
       .Range(.Cells(FoundCell.Row, "B"), .Cells(FoundCell.Row, "M")).Copy
       Result.Range("C" & Result.Cells(Result.Rows.Count, "C").End(xlUp).Row + 1).PasteSpecial _
               xlPasteValues, , Transpose:=True
     End If
  Next
End With
End Sub
[/vba]
 
Ответить
Сообщение
Цитата
Ход мыслей у меня такой - определить диапазон списка для отбора данных (лист "Список магазинов", столбец D).

При активном листе "Список магазинов" запустите макрос (в стандартном модуле)
[vba]
Код
Sub iPerenos()
Dim i As Long
Dim iLastRow As Long
Dim FoundCell As Range
Dim Result As Worksheet
Dim j As Integer
  Set Result = ThisWorkbook.Worksheets("Результат")
   iLastRow = Result.Cells(Result.Rows.Count, "A").End(xlUp).Row + 1
   Result.Range("A2:C" & iLastRow).ClearContents
With Worksheets("Исходные данные")
   iLastRow = Cells(Rows.Count, "D").End(xlUp).Row
  For i = 2 To iLastRow
    Set FoundCell = .Columns(1).Find(Cells(i, "D"), , xlValues, xlWhole)
     If Not FoundCell Is Nothing Then
       Result.Range("A" & Result.Cells(Result.Rows.Count, "A").End(xlUp).Row + 1).Resize(12) = FoundCell
       .Range(.Cells(1, "B"), .Cells(1, "M")).Copy
       Result.Range("B" & Result.Cells(Result.Rows.Count, "B").End(xlUp).Row + 1).PasteSpecial _
               xlPasteValues, , Transpose:=True
       .Range(.Cells(FoundCell.Row, "B"), .Cells(FoundCell.Row, "M")).Copy
       Result.Range("C" & Result.Cells(Result.Rows.Count, "C").End(xlUp).Row + 1).PasteSpecial _
               xlPasteValues, , Transpose:=True
     End If
  Next
End With
End Sub
[/vba]

Автор - Kuzmich
Дата добавления - 15.09.2018 в 22:34
Leojse Дата: Суббота, 15.09.2018, 22:55 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 148
Репутация: 1 ±
Замечаний: 0% ±

2010/2013
Kuzmich, огромное Вам спасибо!
 
Ответить
СообщениеKuzmich, огромное Вам спасибо!

Автор - Leojse
Дата добавления - 15.09.2018 в 22:55
Leojse Дата: Суббота, 15.09.2018, 23:46 | Сообщение № 13
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 148
Репутация: 1 ±
Замечаний: 0% ±

2010/2013
Подскажите, пожалуйста, не могли бы Вы посмореть мой код и поправить его, чтобы всё корректно работало.
Код, который написал Kuzmich, работает, никаких претензий нет, но всё-таки мне самому хочется также решить решить задачу с тем кодом, который я смог написать сам. Сейчас код копирует последний из списка магазин. Возможно ли как-то оптимизировать мой код, чтобы после каждой подстановки данные копировались на лист результат? Читал про Step, но не смог применить.

Сам разобрался. Спасибо всем еще раз!
К сообщению приложен файл: 8920696.xls (49.5 Kb)


Сообщение отредактировал Leojse - Суббота, 15.09.2018, 23:52
 
Ответить
СообщениеПодскажите, пожалуйста, не могли бы Вы посмореть мой код и поправить его, чтобы всё корректно работало.
Код, который написал Kuzmich, работает, никаких претензий нет, но всё-таки мне самому хочется также решить решить задачу с тем кодом, который я смог написать сам. Сейчас код копирует последний из списка магазин. Возможно ли как-то оптимизировать мой код, чтобы после каждой подстановки данные копировались на лист результат? Читал про Step, но не смог применить.

Сам разобрался. Спасибо всем еще раз!

Автор - Leojse
Дата добавления - 15.09.2018 в 23:46
Kuzmich Дата: Воскресенье, 16.09.2018, 00:06 | Сообщение № 14
Группа: Проверенные
Ранг: Ветеран
Сообщений: 715
Репутация: 157 ±
Замечаний: 0% ±

Excel 2003
Цитата
с тем кодом, который я смог написать сам.

[vba]
Код
Sub Выборка()
Dim lLastRow As Long
Dim i&, Inp1 As Range
'подстановка значений в лист "Нужный формат"
  Set Inp1 = Worksheets("Нужный формат").Range("B1")
  lLastRow = Worksheets("Список магазинов").Cells(Rows.Count, 4).End(xlUp).Row
With Sheets("Список магазинов")
  For i = 2 To lLastRow
    Inp1 = .Cells(i, "D")
  'копирование данных на лист "Результат"
Dim YLastRow As Long
    YLastRow = Worksheets("Результат").Cells(Rows.Count, 1).End(xlUp).Row
    Worksheets("Нужный формат").Range("A3:C14").Copy
   With Worksheets("Результат").Cells(YLastRow + 1, 1)
     .PasteSpecial Paste:=xlPasteValues
     .PasteSpecial Paste:=xlPasteFormats
   End With
  Next
End With
End Sub
[/vba]
 
Ответить
Сообщение
Цитата
с тем кодом, который я смог написать сам.

[vba]
Код
Sub Выборка()
Dim lLastRow As Long
Dim i&, Inp1 As Range
'подстановка значений в лист "Нужный формат"
  Set Inp1 = Worksheets("Нужный формат").Range("B1")
  lLastRow = Worksheets("Список магазинов").Cells(Rows.Count, 4).End(xlUp).Row
With Sheets("Список магазинов")
  For i = 2 To lLastRow
    Inp1 = .Cells(i, "D")
  'копирование данных на лист "Результат"
Dim YLastRow As Long
    YLastRow = Worksheets("Результат").Cells(Rows.Count, 1).End(xlUp).Row
    Worksheets("Нужный формат").Range("A3:C14").Copy
   With Worksheets("Результат").Cells(YLastRow + 1, 1)
     .PasteSpecial Paste:=xlPasteValues
     .PasteSpecial Paste:=xlPasteFormats
   End With
  Next
End With
End Sub
[/vba]

Автор - Kuzmich
Дата добавления - 16.09.2018 в 00:06
  • Страница 1 из 1
  • 1
Поиск:

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