Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2010, 12:30   #1
dom_sveta
Новичок
Джуниор
 
Регистрация: 21.10.2010
Сообщений: 4
По умолчанию Автоматический перенос строк из одного листа в другой

Добрый день!
Подскажите, пожалуйста. На один лист заносятся общие сведения (прикладываю файл). Задача:
- если значение первой ячейки в строке - Сергей, то вся строка копируется на лист "Сергей";
- если Максим - то на лист с названием "Максим" и т.д.
Имена могут меняться и добавляться, количество столбцов - тоже.
Задача кажется простой, но я первый раз с таким сталкиваюсь. Буду признательна вам за советы и рекомендации. Спасибо!
Вложения
Тип файла: zip Вопрос_знатокам.zip (7.4 Кб, 50 просмотров)
dom_sveta вне форума Ответить с цитированием
Старый 21.10.2010, 13:29   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Посмотрите вложение. Запустите макрос "Main".
Все строки будут перенесены в соответствующие листы. Если встретится менеджер, лист которого отсутствует, то такой лист будет создан.
Вложения
Тип файла: rar Ответ.rar (10.8 Кб, 314 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 21.10.2010, 13:39   #3
dom_sveta
Новичок
Джуниор
 
Регистрация: 21.10.2010
Сообщений: 4
По умолчанию

Спасибо! Здорово!
Скажите, пожалуйста, а что нужно изменить в коде, чтобы данные не переносились, а копировались, т. е. оставались на исходном листе?
dom_sveta вне форума Ответить с цитированием
Старый 21.10.2010, 13:50   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

В строке кода
Код:
aws.Rows(i).Cut ws.Cells(Rows.Count, 1).End(xlUp).Offset(1)
замените Cut на Copy. Но тогда, если запустить макрос несколько раз, он каждый раз будет добавлять соответствующие строки в соответствующие листы. Вы этого не боитесь?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 21.10.2010, 13:58   #5
dom_sveta
Новичок
Джуниор
 
Регистрация: 21.10.2010
Сообщений: 4
По умолчанию

>> замените Cut на Copy.
Спасибо!

>> Но тогда, если запустить макрос несколько раз, он каждый раз будет добавлять соответствующие строки в соответствующие листы. Вы этого не боитесь?
Я об этом думала как раз. Дублирования нужно избежать, и значит, копирование не подойдет.
dom_sveta вне форума Ответить с цитированием
Старый 21.10.2010, 14:12   #6
dom_sveta
Новичок
Джуниор
 
Регистрация: 21.10.2010
Сообщений: 4
По умолчанию

А вы могли бы еще уточнить? Если перед первым столбцом будет добавлен новый (например, с нумерацией строк), как это повлияет на результат запуска макроса? И если да, то хотелось бы сделать так, чтобы определяющим было содержимое ячейки, где указано имя человека. В том случае, если добавление столбцов перед столбцом с именем нарушит действие макроса и "все усложнит", то я постараюсь избежать его добавления. Спасибо!

Последний раз редактировалось dom_sveta; 21.10.2010 в 14:23.
dom_sveta вне форума Ответить с цитированием
Старый 21.10.2010, 16:55   #7
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Если заголовки столбцов всегда находятся в 1-й строке и определяющим является столбец с заголовком "Садовник", то можно его располагать где угодно и макрос заменить на следующий:
Код:
Sub Main()
    Dim i As Long, j As Integer, ws As Worksheet, aws As Worksheet, x As Range
    Set x = Rows(1).Find("Садовник", , , xlWhole)
    If x Is Nothing Then Exit Sub Else j = x.Column
    Application.ScreenUpdating = False: Set aws = Sheets("Общая база")
    For i = aws.Cells(Rows.Count, j).End(xlUp).Row To 2 Step -1
        If aws.Cells(i, j) <> "" Then
            On Error Resume Next: Set ws = ThisWorkbook.Sheets(CStr(aws.Cells(i, j)))
            If Err <> 0 Then
                Set ws = Sheets.Add: ActiveSheet.Name = aws.Cells(i, j): On Error GoTo 0
                aws.Cells.Copy
                ws.Cells.PasteSpecial Paste:=xlPasteColumnWidths
                ws.Cells.PasteSpecial Paste:=xlPasteFormats
            End If
            aws.Rows(i).Cut ws.Cells(Rows.Count, 1).End(xlUp).Offset(1)
    End If: Next
End Sub
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 21.10.2010 в 18:03.
SAS888 вне форума Ответить с цитированием
Старый 19.03.2015, 12:18   #8
paveltol
 
Регистрация: 19.03.2015
Сообщений: 3
Восклицание просьба помочь

Добрый день! Прошу помочь с усложнённой задачей.
Возможно ли доработать макрос таким образом, чтобы:
1) Переносились на новые листы (и соответственно создавались новые листы) только строки с заполненными ячейками столбца "Поставка" листа "Общая база"
2) Все новые листы создавались справа от листа "Общая база"
3) При каждом последующем запуске макроса строки в листах не дублировались, а добавлялись только вновь занесенные, но не обязательно добавленные вниз таблицы "Общая база".

4) Отдельно - просьба подсказать, что менять в коде, если заголовки столбцов занимают более 1 строки, в том числе имеют объединённые ячейки.
Заранее премного благодарен!
Вложения
Тип файла: rar Пример.rar (10.3 Кб, 29 просмотров)

Последний раз редактировалось paveltol; 19.03.2015 в 12:26.
paveltol вне форума Ответить с цитированием
Старый 19.03.2015, 13:48   #9
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

по п.4)

добавлять в код ничего не надо, сократите заголовок до 1 строки и снимите обьединение ячеек.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 19.03.2015, 13:58   #10
paveltol
 
Регистрация: 19.03.2015
Сообщений: 3
По умолчанию

Спасибо. Для работы условия в п.1, насколько понимаю, тоже ничего больше не требуется.
Возможно ли выполнение пунктов 2 и 3?

Последний раз редактировалось paveltol; 20.03.2015 в 08:15.
paveltol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите сделать автоматический перенос данных с одного листа на другой AlexP15 Microsoft Office Excel 8 12.10.2013 16:15
При условии перенос строк из одного листа в другой Ilya_L Microsoft Office Excel 5 19.06.2010 06:15
Перенос данных из одного листа в другой Светланка85 Microsoft Office Excel 2 07.09.2009 09:18
Перенос данных с одного листа на другой knahrn Microsoft Office Excel 4 12.08.2009 08:42
Перенос данных с одного листа в другой Josser Microsoft Office Excel 0 17.07.2009 10:45