Уважаемые форумчане! Прошу помочь с макросом. На лист "Загрузить" происходит выгрузка из медицинской программы (так, как указано в примере). Необходимо данные столбца "B" листа "Загрузить" занести строго по отделениям в столбец "E" листа "Форма". 1. Основная трудность заключается в том, что на листе "Загрузить" могут отсутствовать любые отделения (если пациенты в них не находятся, например, название "Неврологическое" в столбце "А" будет отсутствовать и информация в столбце "В" по нему тоже - а сразу пойдет "Терапевтическое" после "Кардиологического"). На листе "Форма" при этом, структура четко задана и, если нет данных в отделении на листе "Загрузить", то нужно просто пропустить этот блок и скопировать в соответствующие отделения данные. 2. Вторая трудность заключается в том, что количество строк по отделениям на листе "Загрузить" изменяется при ежедневной выгрузке. На листе "Форма" на каждое отделение в столбце "E" будет отведено 60 строк (в примере - 10).
Как сделать это макросом, чтобы он работал по ключевым словам - названиям отделений, учитывал пропуски отделений, выделял изменяющийся диапазон и правильно вставлял на лист "Форма"?
Макрос в примере (макрорекордером записал) показывает, как вставить без учета имеющихся требований.
Уважаемые форумчане! Прошу помочь с макросом. На лист "Загрузить" происходит выгрузка из медицинской программы (так, как указано в примере). Необходимо данные столбца "B" листа "Загрузить" занести строго по отделениям в столбец "E" листа "Форма". 1. Основная трудность заключается в том, что на листе "Загрузить" могут отсутствовать любые отделения (если пациенты в них не находятся, например, название "Неврологическое" в столбце "А" будет отсутствовать и информация в столбце "В" по нему тоже - а сразу пойдет "Терапевтическое" после "Кардиологического"). На листе "Форма" при этом, структура четко задана и, если нет данных в отделении на листе "Загрузить", то нужно просто пропустить этот блок и скопировать в соответствующие отделения данные. 2. Вторая трудность заключается в том, что количество строк по отделениям на листе "Загрузить" изменяется при ежедневной выгрузке. На листе "Форма" на каждое отделение в столбце "E" будет отведено 60 строк (в примере - 10).
Как сделать это макросом, чтобы он работал по ключевым словам - названиям отделений, учитывал пропуски отделений, выделял изменяющийся диапазон и правильно вставлял на лист "Форма"?
Макрос в примере (макрорекордером записал) показывает, как вставить без учета имеющихся требований.Leviven
Kuzmich, Числа переносить не надо. Только фамилии из столбца "В" листа "Загрузить" в столбец "Е" листа "Форма". И названия отделений тоже переносить не надо - они уже есть в столбце "А" на листе "Форма".
Kuzmich, Числа переносить не надо. Только фамилии из столбца "В" листа "Загрузить" в столбец "Е" листа "Форма". И названия отделений тоже переносить не надо - они уже есть в столбце "А" на листе "Форма".Leviven
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]
Привяжите макрос к своей кнопке [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
Kuzmich, Это я понял. Просто для удобства я сократил количество строк на листе "Форма". Их на самом деле - 305 (по 60 строк для фамилий на каждое отделение + по 1 строчке для названия отделений). Тогда, получается, что нужно сделать [vba]
Код
Range("E2:E305").ClearContents
[/vba] Так?
Kuzmich, Это я понял. Просто для удобства я сократил количество строк на листе "Форма". Их на самом деле - 305 (по 60 строк для фамилий на каждое отделение + по 1 строчке для названия отделений). Тогда, получается, что нужно сделать [vba]
Kuzmich, Прошу прощения, но вот макрос Perenesti перестал работать. Останавливается на строке:[vba]
Код
For Each rng In .Range("A1:A" & iLastRow).SpecialCells(2, 1).Areas
[/vba], которую подсвечивает. Ума не приложу, что делать. Файл во вложении. Там еще макросы есть для отмены объединения ячеек и удаления повторов после разъединения.
Kuzmich, Прошу прощения, но вот макрос Perenesti перестал работать. Останавливается на строке:[vba]
Код
For Each rng In .Range("A1:A" & iLastRow).SpecialCells(2, 1).Areas
[/vba], которую подсвечивает. Ума не приложу, что делать. Файл во вложении. Там еще макросы есть для отмены объединения ячеек и удаления повторов после разъединения.Leviven
Разобрался. Дело в том, что выгруженный из программы на лист "Загрузить" список имеет текстовый формат. От этого макрос и не работает. Применил форматирование его в общий: [vba]
Код
With ActiveSheet.UsedRange .Replace ",", "." arr = .Value .NumberFormat = "General" .Value = arr End With
[/vba] Все заработало
Разобрался. Дело в том, что выгруженный из программы на лист "Загрузить" список имеет текстовый формат. От этого макрос и не работает. Применил форматирование его в общий: [vba]
Код
With ActiveSheet.UsedRange .Replace ",", "." arr = .Value .NumberFormat = "General" .Value = arr End With