Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


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

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

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

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

В строке кода
Код:

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
Репутация: 10
По умолчанию

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

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

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

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

Если заголовки столбцов всегда находятся в 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, 13:18   #8
paveltol
Новичок
 
Регистрация: 19.03.2015
Сообщений: 3
Репутация: 10
Восклицание просьба помочь

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

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

Последний раз редактировалось paveltol; 19.03.2015 в 13:26.
paveltol вне форума   Ответить с цитированием
Старый 19.03.2015, 14:48   #9
IgorGO
МегаМодератор
СуперМодератор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Адрес: УКРАЇНА, Київ
Сообщений: 8,947
Репутация: 1648

icq: 7934250
skype: i2x0,5
По умолчанию

по п.4)

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

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

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

Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите сделать автоматический перенос данных с одного листа на другой 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


13:26.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru