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

Вход

Регистрация

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

 

= Мир MS Excel/Копирование динамичных данных на другой лист - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Копирование динамичных данных на другой лист (Макросы/Sub)
Копирование динамичных данных на другой лист
Leviven Дата: Четверг, 23.07.2020, 11:20 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Уважаемые форумчане! Прошу помочь с макросом. На лист "Загрузить" происходит выгрузка из медицинской программы (так, как указано в примере). Необходимо данные столбца "B" листа "Загрузить" занести строго по отделениям в столбец "E" листа "Форма".
1. Основная трудность заключается в том, что на листе "Загрузить" могут отсутствовать любые отделения (если пациенты в них не находятся, например, название "Неврологическое" в столбце "А" будет отсутствовать и информация в столбце "В" по нему тоже - а сразу пойдет "Терапевтическое" после "Кардиологического"). На листе "Форма" при этом, структура четко задана и, если нет данных в отделении на листе "Загрузить", то нужно просто пропустить этот блок и скопировать в соответствующие отделения данные.
2. Вторая трудность заключается в том, что количество строк по отделениям на листе "Загрузить" изменяется при ежедневной выгрузке. На листе "Форма" на каждое отделение в столбце "E" будет отведено 60 строк (в примере - 10).

Как сделать это макросом, чтобы он работал по ключевым словам - названиям отделений, учитывал пропуски отделений, выделял изменяющийся диапазон и правильно вставлял на лист "Форма"?

Макрос в примере (макрорекордером записал) показывает, как вставить без учета имеющихся требований.
К сообщению приложен файл: _-.xls(63.0 Kb)
 
Ответить
СообщениеУважаемые форумчане! Прошу помочь с макросом. На лист "Загрузить" происходит выгрузка из медицинской программы (так, как указано в примере). Необходимо данные столбца "B" листа "Загрузить" занести строго по отделениям в столбец "E" листа "Форма".
1. Основная трудность заключается в том, что на листе "Загрузить" могут отсутствовать любые отделения (если пациенты в них не находятся, например, название "Неврологическое" в столбце "А" будет отсутствовать и информация в столбце "В" по нему тоже - а сразу пойдет "Терапевтическое" после "Кардиологического"). На листе "Форма" при этом, структура четко задана и, если нет данных в отделении на листе "Загрузить", то нужно просто пропустить этот блок и скопировать в соответствующие отделения данные.
2. Вторая трудность заключается в том, что количество строк по отделениям на листе "Загрузить" изменяется при ежедневной выгрузке. На листе "Форма" на каждое отделение в столбце "E" будет отведено 60 строк (в примере - 10).

Как сделать это макросом, чтобы он работал по ключевым словам - названиям отделений, учитывал пропуски отделений, выделял изменяющийся диапазон и правильно вставлял на лист "Форма"?

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

Автор - Leviven
Дата добавления - 23.07.2020 в 11:20
Kuzmich Дата: Четверг, 23.07.2020, 14:22 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 510
Репутация: 99 ±
Замечаний: 0% ±

Excel 2003
Цитата
Как сделать это макросом, чтобы он работал по ключевым словам - названиям отделений

А можно сделать одинаковыми названия отделений на обоих листах?
Травматолого-ортопедическое и Травм-ортопедическое
 
Ответить
Сообщение
Цитата
Как сделать это макросом, чтобы он работал по ключевым словам - названиям отделений

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

Автор - Kuzmich
Дата добавления - 23.07.2020 в 14:22
Leviven Дата: Четверг, 23.07.2020, 14:55 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Kuzmich, Извиняюсь, недоглядел. Прикрепил исправленный
К сообщению приложен файл: 2720958.xls(62.5 Kb)
 
Ответить
СообщениеKuzmich, Извиняюсь, недоглядел. Прикрепил исправленный

Автор - Leviven
Дата добавления - 23.07.2020 в 14:55
Kuzmich Дата: Четверг, 23.07.2020, 15:11 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 510
Репутация: 99 ±
Замечаний: 0% ±

Excel 2003
Фамилии переносятся в столбец Е, а числа надо переносить?
 
Ответить
СообщениеФамилии переносятся в столбец Е, а числа надо переносить?

Автор - Kuzmich
Дата добавления - 23.07.2020 в 15:11
Leviven Дата: Четверг, 23.07.2020, 15:29 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Kuzmich, Числа переносить не надо. Только фамилии из столбца "В" листа "Загрузить" в столбец "Е" листа "Форма". И названия отделений тоже переносить не надо - они уже есть в столбце "А" на листе "Форма".
 
Ответить
СообщениеKuzmich, Числа переносить не надо. Только фамилии из столбца "В" листа "Загрузить" в столбец "Е" листа "Форма". И названия отделений тоже переносить не надо - они уже есть в столбце "А" на листе "Форма".

Автор - Leviven
Дата добавления - 23.07.2020 в 15:29
Kuzmich Дата: Четверг, 23.07.2020, 15:34 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 510
Репутация: 99 ±
Замечаний: 0% ±

Excel 2003
Привяжите макрос к своей кнопке
[vba]
Код
Sub Perenesti()
Dim iLastRow As Long
Dim rng As Range
Dim FoundCell As Range
With Worksheets("Загрузить")
  iLastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
    Range("E2:E54").ClearContents
  For Each rng In .Range("A1:A" & iLastRow).SpecialCells(2, 1).Areas
    Set FoundCell = Columns(1).Find(rng(0, 1), , xlValues, xlWhole)
    rng.Offset(, 1).Copy Cells(FoundCell.Row + 1, 5)
  Next
End With
End Sub
[/vba]


Сообщение отредактировал Kuzmich - Четверг, 23.07.2020, 15:49
 
Ответить
СообщениеПривяжите макрос к своей кнопке
[vba]
Код
Sub Perenesti()
Dim iLastRow As Long
Dim rng As Range
Dim FoundCell As Range
With Worksheets("Загрузить")
  iLastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
    Range("E2:E54").ClearContents
  For Each rng In .Range("A1:A" & iLastRow).SpecialCells(2, 1).Areas
    Set FoundCell = Columns(1).Find(rng(0, 1), , xlValues, xlWhole)
    rng.Offset(, 1).Copy Cells(FoundCell.Row + 1, 5)
  Next
End With
End Sub
[/vba]

Автор - Kuzmich
Дата добавления - 23.07.2020 в 15:34
Leviven Дата: Четверг, 23.07.2020, 15:48 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Kuzmich, СПАСИБО ОГРОМНОЕ! Все работает! Я так понимаю, если [vba]
Код
Range("E2:E54" & iLastRow).ClearContents
[/vba] заменить на [vba]
Код
Range("E2:E" & iLastRow).ClearContents
[/vba], то количество строк в столбце "Е" станет неограниченным?
 
Ответить
СообщениеKuzmich, СПАСИБО ОГРОМНОЕ! Все работает! Я так понимаю, если [vba]
Код
Range("E2:E54" & iLastRow).ClearContents
[/vba] заменить на [vba]
Код
Range("E2:E" & iLastRow).ClearContents
[/vba], то количество строк в столбце "Е" станет неограниченным?

Автор - Leviven
Дата добавления - 23.07.2020 в 15:48
Kuzmich Дата: Четверг, 23.07.2020, 15:51 | Сообщение № 8
Группа: Проверенные
Ранг: Ветеран
Сообщений: 510
Репутация: 99 ±
Замечаний: 0% ±

Excel 2003
Надо оставить
[vba]
Код
Range("E2:E54").ClearContents
[/vba]
iLastRow определяется для листа "Загрузить"
 
Ответить
СообщениеНадо оставить
[vba]
Код
Range("E2:E54").ClearContents
[/vba]
iLastRow определяется для листа "Загрузить"

Автор - Kuzmich
Дата добавления - 23.07.2020 в 15:51
Leviven Дата: Четверг, 23.07.2020, 16:05 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Kuzmich, Это я понял. Просто для удобства я сократил количество строк на листе "Форма". Их на самом деле - 305 (по 60 строк для фамилий на каждое отделение + по 1 строчке для названия отделений). Тогда, получается, что нужно сделать [vba]
Код
Range("E2:E305").ClearContents
[/vba] Так?
 
Ответить
СообщениеKuzmich, Это я понял. Просто для удобства я сократил количество строк на листе "Форма". Их на самом деле - 305 (по 60 строк для фамилий на каждое отделение + по 1 строчке для названия отделений). Тогда, получается, что нужно сделать [vba]
Код
Range("E2:E305").ClearContents
[/vba] Так?

Автор - Leviven
Дата добавления - 23.07.2020 в 16:05
Leviven Дата: Четверг, 23.07.2020, 16:07 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
На листе "Загрузить" будет примерно до 305 строк при максимальной загрузке отделений


Сообщение отредактировал Leviven - Четверг, 23.07.2020, 16:08
 
Ответить
СообщениеНа листе "Загрузить" будет примерно до 305 строк при максимальной загрузке отделений

Автор - Leviven
Дата добавления - 23.07.2020 в 16:07
Leviven Дата: Пятница, 31.07.2020, 12:23 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Kuzmich, Прошу прощения, но вот макрос Perenesti перестал работать. Останавливается на строке:[vba]
Код
For Each rng In .Range("A1:A" & iLastRow).SpecialCells(2, 1).Areas
[/vba], которую подсвечивает. Ума не приложу, что делать. Файл во вложении. Там еще макросы есть для отмены объединения ячеек и удаления повторов после разъединения.
К сообщению приложен файл: 7501447.xls(55.5 Kb)
 
Ответить
СообщениеKuzmich, Прошу прощения, но вот макрос Perenesti перестал работать. Останавливается на строке:[vba]
Код
For Each rng In .Range("A1:A" & iLastRow).SpecialCells(2, 1).Areas
[/vba], которую подсвечивает. Ума не приложу, что делать. Файл во вложении. Там еще макросы есть для отмены объединения ячеек и удаления повторов после разъединения.

Автор - Leviven
Дата добавления - 31.07.2020 в 12:23
Leviven Дата: Понедельник, 03.08.2020, 08:22 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Разобрался. Дело в том, что выгруженный из программы на лист "Загрузить" список имеет текстовый формат. От этого макрос и не работает. Применил форматирование его в общий:
[vba]
Код
With ActiveSheet.UsedRange
.Replace ",", "."
arr = .Value
.NumberFormat = "General"
.Value = arr
End With
[/vba]
Все заработало


Сообщение отредактировал Leviven - Понедельник, 03.08.2020, 08:23
 
Ответить
СообщениеРазобрался. Дело в том, что выгруженный из программы на лист "Загрузить" список имеет текстовый формат. От этого макрос и не работает. Применил форматирование его в общий:
[vba]
Код
With ActiveSheet.UsedRange
.Replace ",", "."
arr = .Value
.NumberFormat = "General"
.Value = arr
End With
[/vba]
Все заработало

Автор - Leviven
Дата добавления - 03.08.2020 в 08:22
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Копирование динамичных данных на другой лист (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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