Страницы: 1
RSS
[ Закрыто ] Разбить таблицу по листам
 
Приветствую, во вложении пример таблицы на листе "общая" которую нужно разбить на листы.
Я вижу два варианта алгоритма разбивки:
1.  либо ориентироваться на цвет. тоесть всегда после зеленого цвета пропускать 5 строк и вместе с ними вырезать на другой лист и т.д.
2. либо вырезать на другой лист значения между названиями ячеек в столбце А Таблица 1 и Таблица1 на 4 и 31 строке вкючительно и вместе с ними вырезать.

Проблема в первом случае это то, что другие строки могут быть тоже разукрашены, но в другой цвет
Проблема во втором случае это то, что ячейка в столбце А может быть объденена с В, С и т.д. , но в любом случае ее содержимое будет одинаковым как сверху так и снизу.
 
Никто не даст подсказку как это сделать?
 
Подсказку можно: пишите код, который будет это делать. Определяете заголовок таблицы. Запоминаете номер строки. Применяете Find или цикл по массиву для поиска конца таблицы. Копируте от запомненной строки до найденной на новый лист.
Задача не так проста, нюансов, возможно,  много. Шансов на то, что кто-то сделает это за Вас мало.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
В модуль листа:
Код
Public Sub www()
    Dim l&, b&, r As Range, sh As Worksheet
    l = Me.Cells(Rows.Count, 1).End(xlUp).Row
    Set r = Me.Range("a:b").Find("Таблица", Me.Cells(l, 1), xlValues, xlPart, , 2, 0)
    If Not r Is Nothing Then
        Do
            b = r.Row: Set sh = Worksheets.Add
            Me.Rows(b & ":" & l).Cut sh.[a1]
            l = Me.Cells(Rows.Count, 1).End(xlUp).Row
            Set r = Me.[a:b].FindPrevious(Me.Range("a" & l))
        Loop While Not r Is Nothing
    End If
End Sub
Изменено: KuklP - 13.08.2013 18:11:29 (Из-за объединенных ячеек find работал неправильно)
Я сам - дурнее всякого примера! ...
 
--вы забыли наименование в столбце 1
--наименование одной высоты или разной

например в таблице 100 строк клиента1 и 68 клиента2( в страницу влезает 30 строк не учитывая расширения)

какой должен быть выход

30 строк кл1 + 5 строк итога по странице
еще 30+5
еще 30+5
остаток 10+5
----------
30 строк кл2+5
30 строк+5
8+5
====================
или
====================
35 строк кл1
35 стр
30стр+5  --итог в конце --один
---
35 стр кл2
32стр (с подписью дает 37, недопустимо, поэтому одна строка уходит на 3-ю страницу
1стр+5
======================
======================
нюансов много
может у вас по клиенту всего не более 30 строк и длинных наименований нет

===зачем голову ломать==
 
Спасибо, но что-то не получается. Меня немного осенило! Проще выполнить данную задачу по следующему алгоритму:
1 Ищем в столбце В, начиная с верхней строки значение ячейки = ИТОГО
2 Пропускаем ниже 5 строк
3 вырезаем данные на другой лист (новый)
4 Возвращаемся на исходный лист, продолжаем искать данные в столбце В с верхней строки до значения = ИТОГО
5 Пропускаем ниже 5 строк
6 вырезаем данные на другой лист (второй новый) и т.д.

Помогите с написанием макроса по данному алгоритму
Изменено: Денис Колосов - 14.08.2013 09:39:51
 
Цитата
Помогите с написанием макроса по данному алгоритму
Место для вашего тех задания и заказа - http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=list&FID=7
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Тут должен быть простой макрос.
Изменено: Денис Колосов - 14.08.2013 10:28:34
 
Так и закажите простой) Сообщения #4 и #5 видели?
 
#4 У меня не робит пишет Compile error (ошибка компиляции)
#5 Данные вопросы исключаются при соблюдении алгоритма предложенного в #6
Но в любом случае спасибо всем за внимание к моей задаче.
 
Денис, так почему бы не ответить каждому, кто потратил на Вас время? А то создаётся впечатление, что Вы вообще не читали эти ответы.
 
Юрий, возможно вы меня не правильно поняли. Я ОЧЕНЬ благодарен всем участникам данного сайта, тем более модераторам, которые всегда "на страже"!
Хочу объяснить, что в #6 я ответил что предложенный макрос у меня не работает и там же продумал как упростить задачу и исключить возникшие вопросы. Как говорится хотелось поменьше флуда.
Тем не менее, galina mur, The_Prist, KuklP спасибо большое за ваше внимание и помощь!!!
Юра, при всем моем уважении к вашим знаниям и труду, Вы как всегда умеете обострить ситуацию на пустом месте  ;)
 
Я не обостряю, а просто напоминаю, что отвечать - элементарная вежливость. Вы же на самом деле не ответили ни Сергею (KuklP), ни Галине. Ответ я вижу только в #10. Вот я о чём. И не нужно про "как всегда" и "на пустом месте".
 
Цитата
Денис Колосов:
Спасибо, но что-то не получается. Меня немного осенило! Проще выполнить данную задачу по следующему алгоритму:...
Так выполняйте. Я написал Вам макрос, к-рый работает в Вашем примере(см. файл).
"что-то не получается" - это на лавочке, щелкая семечки. А тут принято выкладывать пример, где не получается. Однако, с Вашим отношением, Вам правильно рекомендуют - в раздел "Работа".
Я сам - дурнее всякого примера! ...
 
Ладно, опустим беседу про внимательное чтение первых слов #6 и "элементарную вежливость" в #13. Своего неуважения я НЕ ПРОЯВЛЯЛ. Участников темы БЛАГОДАРИЛ неоднократно. БЛАГОДАРЮ и еще раз, но только не потому что Юре что-то показалось, а потому что все мы тут делаем доброе дело. И наверняка многие из нас продолжают помогать людям в познании Экселя в офисах. Согласитесь, что это очень приятное занятие! У себя в офисе я кассу за оказанную мной помощь не устанавливаю, а помогаю чем могу, чем не могу - спрашиваю кто может знать. Мне это интересно.
Если данный сайт строится только на коммерческой основе, то так его и назовите и не будет необходимости писать в каждой теме "вам сюда" или "место для вашего заказа тут" или "закажите простой макрос". Кто не хочет париться, тот всеравно сразу к вам идет! Вот на что надо обращать внимание Уважаемый модератор, а не на то обращаюсь я на "вы" или "ты", "видел ли я то или се", "кому я ответил а кому нет" . Из-за Вас уже половина данной темы превратилась во флуд, чего я и опасался!!!
Изменено: Денис Колосов - 14.08.2013 13:22:00
Страницы: 1
Наверх