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

Вход

Регистрация

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

 

= Мир MS Excel/макрос копирования определенных строк - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » макрос копирования определенных строк (Макросы/Sub)
макрос копирования определенных строк
amaksimus85 Дата: Воскресенье, 05.02.2023, 22:19 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 20% ±

Здравствуйте.
Нужно из листа "ВЗВЕШИВАНИЕ" скопировать строки, в которых ячейки в столбце G будут равны: или '1'!E4, тогда в таблицу лист '1', или '2'!E4, тогда в таблицу лист '2', или '3'!E4, тогда в таблицу лист '3' и т.д.
Пробовал функциями ЕСЛИ, ВПР и ИНДЕКС, но это очень долго и трудоемко.
Какими способами (макросами или функциями) можно это сделать.
К сообщению приложен файл: 4132410.xls (86.5 Kb)


Сообщение отредактировал amaksimus85 - Воскресенье, 05.02.2023, 22:20
 
Ответить
СообщениеЗдравствуйте.
Нужно из листа "ВЗВЕШИВАНИЕ" скопировать строки, в которых ячейки в столбце G будут равны: или '1'!E4, тогда в таблицу лист '1', или '2'!E4, тогда в таблицу лист '2', или '3'!E4, тогда в таблицу лист '3' и т.д.
Пробовал функциями ЕСЛИ, ВПР и ИНДЕКС, но это очень долго и трудоемко.
Какими способами (макросами или функциями) можно это сделать.

Автор - amaksimus85
Дата добавления - 05.02.2023 в 22:19
cmivadwot Дата: Воскресенье, 05.02.2023, 22:59 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 452
Репутация: 86 ±
Замечаний: 0% ±

365
amaksimus85, полуавтомат....
К сообщению приложен файл: 3843669.xls (149.0 Kb)
 
Ответить
Сообщениеamaksimus85, полуавтомат....

Автор - cmivadwot
Дата добавления - 05.02.2023 в 22:59
amaksimus85 Дата: Понедельник, 06.02.2023, 12:29 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 20% ±

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


Сообщение отредактировал Serge_007 - Понедельник, 06.02.2023, 15:30
 
Ответить
Сообщениеспасибо хороший варинт.
но все равно придется вручную нажимать на фильтр. не на много шагов отличается от макроса сортировки и дальнейшего копирования строк в нужные листы...

Автор - amaksimus85
Дата добавления - 06.02.2023 в 12:29
mgt Дата: Понедельник, 06.02.2023, 15:09 | Сообщение № 4
Группа: Пользователи
Ранг: Участник
Сообщений: 98
Репутация: 25 ±
Замечаний: 0% ±

Excel 2010
Несовсем ясно зачем попарное объединение строк в ваших бланках. Наверное чтобы усложнить жизнь при написании макросов.

[vba]
Код

Application.ScreenUpdating = False
Dim c As Range
Dim sh As Worksheet
Dim ash As Worksheet
Set ash = Sheets("ВЗВЕШИВАНИЕ")
Set c = ash.Range("c6").Offset(1, 0)
For Each sh In ThisWorkbook.Worksheets
    If sh.Name <> ash.Name Then
        sh.Range("a7:g65536").ClearContents
    End If
Next
ash.Select
Do While c.Value <> ""
    For Each sh In ThisWorkbook.Worksheets
        If sh.Name <> ash.Name Then
            If sh.Range("e4").Value = c.Offset(0, 4).Value Then
                ash.Select
                ash.Range(c.Offset(0, -2), c.Offset(0, 4)).Select
                Selection.Copy
                sh.Activate
                sh.Range("a65536").End(xlUp).Offset(2, 0).Select
                ActiveSheet.Paste
            End If
        End If
    Next
    ash.Select
    Set c = c.Offset(1, 0)
    c.Select
Loop
Application.ScreenUpdating = True
[/vba]


Сообщение отредактировал mgt - Понедельник, 06.02.2023, 15:15
 
Ответить
СообщениеНесовсем ясно зачем попарное объединение строк в ваших бланках. Наверное чтобы усложнить жизнь при написании макросов.

[vba]
Код

Application.ScreenUpdating = False
Dim c As Range
Dim sh As Worksheet
Dim ash As Worksheet
Set ash = Sheets("ВЗВЕШИВАНИЕ")
Set c = ash.Range("c6").Offset(1, 0)
For Each sh In ThisWorkbook.Worksheets
    If sh.Name <> ash.Name Then
        sh.Range("a7:g65536").ClearContents
    End If
Next
ash.Select
Do While c.Value <> ""
    For Each sh In ThisWorkbook.Worksheets
        If sh.Name <> ash.Name Then
            If sh.Range("e4").Value = c.Offset(0, 4).Value Then
                ash.Select
                ash.Range(c.Offset(0, -2), c.Offset(0, 4)).Select
                Selection.Copy
                sh.Activate
                sh.Range("a65536").End(xlUp).Offset(2, 0).Select
                ActiveSheet.Paste
            End If
        End If
    Next
    ash.Select
    Set c = c.Offset(1, 0)
    c.Select
Loop
Application.ScreenUpdating = True
[/vba]

Автор - mgt
Дата добавления - 06.02.2023 в 15:09
amaksimus85 Дата: Понедельник, 06.02.2023, 22:01 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 20% ±

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



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



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

Автор - amaksimus85
Дата добавления - 06.02.2023 в 22:01
mgt Дата: Вторник, 07.02.2023, 14:19 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 98
Репутация: 25 ±
Замечаний: 0% ±

Excel 2010
что ннужно изменить в Вашем макросе, чтобы подходил для обычных одинарных строк?

Лень переписывать. В текущем коде замените как указано в комментарии.
[vba]
Код

Application.ScreenUpdating = False
Dim c As Range
Dim sh As Worksheet
Dim ash As Worksheet
Set ash = Sheets("ВЗВЕШИВАНИЕ")
Set c = ash.Range("c6").Offset(1, 0)
For Each sh In ThisWorkbook.Worksheets
    If sh.Name <> ash.Name Then
        sh.Range("a7:g65536").ClearContents
    End If
Next
ash.Select
Do While c.Value <> ""
    For Each sh In ThisWorkbook.Worksheets
        If sh.Name <> ash.Name Then
            If sh.Range("e4").Value = c.Offset(0, 4).Value Then
                ash.Select
                ash.Range(c.Offset(0, -2), c.Offset(0, 4)).Select
                Selection.Copy
                sh.Activate
                sh.Range("a65536").End(xlUp).Offset(2, 0).Select ' заменить на sh.Range("a65536").End(xlUp).Offset(1, 0).Select если отменить объединение строк
                ActiveSheet.Paste
            End If
        End If
    Next
    ash.Select
    Set c = c.Offset(1, 0)
    c.Select
Loop
Application.ScreenUpdating = True
[/vba]
 
Ответить
Сообщение
что ннужно изменить в Вашем макросе, чтобы подходил для обычных одинарных строк?

Лень переписывать. В текущем коде замените как указано в комментарии.
[vba]
Код

Application.ScreenUpdating = False
Dim c As Range
Dim sh As Worksheet
Dim ash As Worksheet
Set ash = Sheets("ВЗВЕШИВАНИЕ")
Set c = ash.Range("c6").Offset(1, 0)
For Each sh In ThisWorkbook.Worksheets
    If sh.Name <> ash.Name Then
        sh.Range("a7:g65536").ClearContents
    End If
Next
ash.Select
Do While c.Value <> ""
    For Each sh In ThisWorkbook.Worksheets
        If sh.Name <> ash.Name Then
            If sh.Range("e4").Value = c.Offset(0, 4).Value Then
                ash.Select
                ash.Range(c.Offset(0, -2), c.Offset(0, 4)).Select
                Selection.Copy
                sh.Activate
                sh.Range("a65536").End(xlUp).Offset(2, 0).Select ' заменить на sh.Range("a65536").End(xlUp).Offset(1, 0).Select если отменить объединение строк
                ActiveSheet.Paste
            End If
        End If
    Next
    ash.Select
    Set c = c.Offset(1, 0)
    c.Select
Loop
Application.ScreenUpdating = True
[/vba]

Автор - mgt
Дата добавления - 07.02.2023 в 14:19
amaksimus85 Дата: Понедельник, 13.02.2023, 11:39 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 20% ±

mgt, Здравствуйте. Спасибо еще раз за макрос. Он работает в книге для примера, но не работает в моей рабочей, где он и нужен. Может, у Вас найдется время глянуть?
модуль3, copyweight
К сообщению приложен файл: ...xlsm (364.1 Kb)
 
Ответить
Сообщениеmgt, Здравствуйте. Спасибо еще раз за макрос. Он работает в книге для примера, но не работает в моей рабочей, где он и нужен. Может, у Вас найдется время глянуть?
модуль3, copyweight

Автор - amaksimus85
Дата добавления - 13.02.2023 в 11:39
mgt Дата: Вторник, 14.02.2023, 09:14 | Сообщение № 8
Группа: Пользователи
Ранг: Участник
Сообщений: 98
Репутация: 25 ±
Замечаний: 0% ±

Excel 2010
Не могу скачать ваш файл
 
Ответить
СообщениеНе могу скачать ваш файл

Автор - mgt
Дата добавления - 14.02.2023 в 09:14
amaksimus85 Дата: Понедельник, 27.02.2023, 11:54 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 20% ±

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

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

Вопрос. Можно ли дать комнду макросу чтобы копировал строки в листы, которые в начале книги или в конце, или после конкретного листа ("ВЗВЕШИВАНИЕ)?
К сообщению приложен файл: primer.xlsm (98.3 Kb)


Сообщение отредактировал amaksimus85 - Понедельник, 27.02.2023, 14:34
 
Ответить
Сообщениеmgt, понял, почему не работает макрос , опубликованный выше,в другой книге.

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

Вопрос. Можно ли дать комнду макросу чтобы копировал строки в листы, которые в начале книги или в конце, или после конкретного листа ("ВЗВЕШИВАНИЕ)?

Автор - amaksimus85
Дата добавления - 27.02.2023 в 11:54
mgt Дата: Вторник, 28.02.2023, 10:53 | Сообщение № 10
Группа: Пользователи
Ранг: Участник
Сообщений: 98
Репутация: 25 ±
Замечаний: 0% ±

Excel 2010
Пример для листов справа от листа ВЗВЕШИВАНИЕ
К сообщению приложен файл: 4561933.xlsm (99.1 Kb)
 
Ответить
СообщениеПример для листов справа от листа ВЗВЕШИВАНИЕ

Автор - mgt
Дата добавления - 28.02.2023 в 10:53
Мир MS Excel » Вопросы и решения » Вопросы по VBA » макрос копирования определенных строк (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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