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

Вход

Регистрация

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

 

= Мир MS Excel/Объединение данных с нескольких листов одного цвета - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Объединение данных с нескольких листов одного цвета
Мурад Дата: Понедельник, 02.10.2017, 17:12 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 520
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
Добрый день, программисты и обычные пользователи!

Подскажите, как изменить макрос, представленный в этой теме, чтобы он собирал свод данных исходя из цвета ярлычка листа. К примеру,
в представленном в той теме примере имеется 2 цвета: бесцветный и лиловый. Нужно, чтобы макрос сделал 2 свода таблиц для каждого цвета.
 
Ответить
СообщениеДобрый день, программисты и обычные пользователи!

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

Автор - Мурад
Дата добавления - 02.10.2017 в 17:12
_Boroda_ Дата: Понедельник, 02.10.2017, 17:29 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Не сильно видоизменяя макрос, просто добавим условие на проверку цвета ярлыка. Ну и шуточку еще небольшую
[vba]
Код
Sub www()
    Dim ws As Worksheet, l&
    With Sheets("Svod")
        .UsedRange.Offset(1).ClearContents
        For Each ws In Worksheets
            If Not ws.Name = .Name Then
                If ws.Tab.Color = .Tab.Color Then
                    l = .Cells.Find("*", [a1], xlFormulas, 1, 1, 2).Row + 1
                    ws.UsedRange.Offset(1).Copy .Range("a" & l)
                End If
            End If
        Next
    End With
    With Sheets("Svоd")
        .UsedRange.Offset(1).ClearContents
        For Each ws In Worksheets
            If Not ws.Name = .Name Then
                If ws.Tab.Color = .Tab.Color Then
                    l = .Cells.Find("*", [a1], xlFormulas, 1, 1, 2).Row + 1
                    ws.UsedRange.Offset(1).Copy .Range("a" & l)
                End If
            End If
        Next
    End With
End Sub
[/vba]
К сообщению приложен файл: 2474640_1.xlsb (39.3 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеНе сильно видоизменяя макрос, просто добавим условие на проверку цвета ярлыка. Ну и шуточку еще небольшую
[vba]
Код
Sub www()
    Dim ws As Worksheet, l&
    With Sheets("Svod")
        .UsedRange.Offset(1).ClearContents
        For Each ws In Worksheets
            If Not ws.Name = .Name Then
                If ws.Tab.Color = .Tab.Color Then
                    l = .Cells.Find("*", [a1], xlFormulas, 1, 1, 2).Row + 1
                    ws.UsedRange.Offset(1).Copy .Range("a" & l)
                End If
            End If
        Next
    End With
    With Sheets("Svоd")
        .UsedRange.Offset(1).ClearContents
        For Each ws In Worksheets
            If Not ws.Name = .Name Then
                If ws.Tab.Color = .Tab.Color Then
                    l = .Cells.Find("*", [a1], xlFormulas, 1, 1, 2).Row + 1
                    ws.UsedRange.Offset(1).Copy .Range("a" & l)
                End If
            End If
        Next
    End With
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 02.10.2017 в 17:29
Мурад Дата: Понедельник, 02.10.2017, 17:32 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 520
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
_Boroda_, спасибо!

Я правильно понимаю, что должны быть предварительно созданы пустые листы для каждого цвета?
 
Ответить
Сообщение_Boroda_, спасибо!

Я правильно понимаю, что должны быть предварительно созданы пустые листы для каждого цвета?

Автор - Мурад
Дата добавления - 02.10.2017 в 17:32
_Boroda_ Дата: Понедельник, 02.10.2017, 17:35 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Да. Только не пустые, а с шапкой.
Посмотрите у меня в приложенном файле

Вот пустой файл
К сообщению приложен файл: 2474640_2.xlsb (37.8 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеДа. Только не пустые, а с шапкой.
Посмотрите у меня в приложенном файле

Вот пустой файл

Автор - _Boroda_
Дата добавления - 02.10.2017 в 17:35
Мурад Дата: Понедельник, 02.10.2017, 17:55 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 520
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
Александр, спасибо! А как добиться одинакового названия листов? Я пытаюсь создать в своей книге одноименные листы, но система ругается)
 
Ответить
СообщениеАлександр, спасибо! А как добиться одинакового названия листов? Я пытаюсь создать в своей книге одноименные листы, но система ругается)

Автор - Мурад
Дата добавления - 02.10.2017 в 17:55
Мурад Дата: Понедельник, 02.10.2017, 18:00 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 520
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
Просто у меня данные в книге окрашены в 3 разные цвета, начинаются числовые строки с ячейки B4. Я создал 3 листа с названиями свод-1, свод-2, свод-3. сделал 3 кнопки с 3 макросами для каждого листа
 
Ответить
СообщениеПросто у меня данные в книге окрашены в 3 разные цвета, начинаются числовые строки с ячейки B4. Я создал 3 листа с названиями свод-1, свод-2, свод-3. сделал 3 кнопки с 3 макросами для каждого листа

Автор - Мурад
Дата добавления - 02.10.2017 в 18:00
_Boroda_ Дата: Понедельник, 02.10.2017, 18:02 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
как добиться одинакового названия листов?
Я как раз про это и писал:
Ну и шуточку еще небольшую
Там буквы "о" разные - латинская и русская :D

сделал 3 кнопки с 3 макросами для каждого листа
Тоже вариант


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
как добиться одинакового названия листов?
Я как раз про это и писал:
Ну и шуточку еще небольшую
Там буквы "о" разные - латинская и русская :D

сделал 3 кнопки с 3 макросами для каждого листа
Тоже вариант

Автор - _Boroda_
Дата добавления - 02.10.2017 в 18:02
Мурад Дата: Понедельник, 02.10.2017, 18:06 | Сообщение № 8
Группа: Проверенные
Ранг: Ветеран
Сообщений: 520
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
Еще заметил, что надо добавить условие в макросе, чтоб для листа свод-1 он не хватал данные с соседних сводных листов - свод-2 и свод-3.
Я поправил код на:
[vba]
Код
If Not ws.Name = "свод" & "*" Then
[/vba]
но макрос все равно хватает данные со всех листов
 
Ответить
СообщениеЕще заметил, что надо добавить условие в макросе, чтоб для листа свод-1 он не хватал данные с соседних сводных листов - свод-2 и свод-3.
Я поправил код на:
[vba]
Код
If Not ws.Name = "свод" & "*" Then
[/vba]
но макрос все равно хватает данные со всех листов

Автор - Мурад
Дата добавления - 02.10.2017 в 18:06
_Boroda_ Дата: Понедельник, 02.10.2017, 20:21 | Сообщение № 9
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Естественно хватает. Приравнивание не работает со звездочкой.
Может, Вы все-таки положите свой файл? Мой-то Вам не понравился, судя по всему


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЕстественно хватает. Приравнивание не работает со звездочкой.
Может, Вы все-таки положите свой файл? Мой-то Вам не понравился, судя по всему

Автор - _Boroda_
Дата добавления - 02.10.2017 в 20:21
Мурад Дата: Вторник, 03.10.2017, 09:50 | Сообщение № 10
Группа: Проверенные
Ранг: Ветеран
Сообщений: 520
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
Прикладываю файл, Александр
К сообщению приложен файл: example.xlsx (28.7 Kb)
 
Ответить
СообщениеПрикладываю файл, Александр

Автор - Мурад
Дата добавления - 03.10.2017 в 09:50
_Boroda_ Дата: Вторник, 03.10.2017, 10:07 | Сообщение № 11
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Не вижу в файле ни
3 листа с названиями свод-1, свод-2, свод-3
, ни макроса, в котором
Я поправил код на:
If Not ws.Name = "свод" & "*" Then


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеНе вижу в файле ни
3 листа с названиями свод-1, свод-2, свод-3
, ни макроса, в котором
Я поправил код на:
If Not ws.Name = "свод" & "*" Then

Автор - _Boroda_
Дата добавления - 03.10.2017 в 10:07
Мурад Дата: Вторник, 03.10.2017, 10:17 | Сообщение № 12
Группа: Проверенные
Ранг: Ветеран
Сообщений: 520
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
Прошу прощения. Не перенес из основного файла с конфиденциальной информацией)
К сообщению приложен файл: example.xlsm (42.4 Kb)
 
Ответить
СообщениеПрошу прощения. Не перенес из основного файла с конфиденциальной информацией)

Автор - Мурад
Дата добавления - 03.10.2017 в 10:17
_Boroda_ Дата: Вторник, 03.10.2017, 10:44 | Сообщение № 13
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Мурад, в моем макросе из второго поста два кажущихся одинаковими блока на самом деле не одинаковы, там тоже
буквы "о" разные - латинская и русская

Держите один макрос на все 3 листа сразу. Если захотите поделить по отдельности, то по With делите
[vba]
Код
Sub Путевые_Листы_1()
    Dim ws As Worksheet, l&
    With Sheets("свод-1")
        .UsedRange.Offset(4).ClearContents
        For Each ws In Worksheets
            If Not UCase(Left(ws.Name, 4)) = "СВОД" Then
                If ws.Tab.Color = .Tab.Color Then
                    r1_ = .Range("B" & Rows.Count).End(3).Row + 1
                    ws.UsedRange.Offset(3).Copy .Range("A" & r1_)
                End If
            End If
        Next
    End With
    With Sheets("свод-2")
        .UsedRange.Offset(4).ClearContents
        For Each ws In Worksheets
            If Not UCase(Left(ws.Name, 4)) = "СВОД" Then
                If ws.Tab.Color = .Tab.Color Then
                    r1_ = .Range("B" & Rows.Count).End(3).Row + 1
                    ws.UsedRange.Offset(3).Copy .Range("A" & r1_)
                End If
            End If
        Next
    End With
    With Sheets("свод-3")
        .UsedRange.Offset(4).ClearContents
        For Each ws In Worksheets
            If Not UCase(Left(ws.Name, 4)) = "СВОД" Then
                If ws.Tab.Color = .Tab.Color Then
                    r1_ = .Range("B" & Rows.Count).End(3).Row + 1
                    ws.UsedRange.Offset(3).Copy .Range("A" & r1_)
                End If
            End If
        Next
    End With
End Sub
[/vba]
К сообщению приложен файл: example-4-1.xlsm (44.5 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеМурад, в моем макросе из второго поста два кажущихся одинаковими блока на самом деле не одинаковы, там тоже
буквы "о" разные - латинская и русская

Держите один макрос на все 3 листа сразу. Если захотите поделить по отдельности, то по With делите
[vba]
Код
Sub Путевые_Листы_1()
    Dim ws As Worksheet, l&
    With Sheets("свод-1")
        .UsedRange.Offset(4).ClearContents
        For Each ws In Worksheets
            If Not UCase(Left(ws.Name, 4)) = "СВОД" Then
                If ws.Tab.Color = .Tab.Color Then
                    r1_ = .Range("B" & Rows.Count).End(3).Row + 1
                    ws.UsedRange.Offset(3).Copy .Range("A" & r1_)
                End If
            End If
        Next
    End With
    With Sheets("свод-2")
        .UsedRange.Offset(4).ClearContents
        For Each ws In Worksheets
            If Not UCase(Left(ws.Name, 4)) = "СВОД" Then
                If ws.Tab.Color = .Tab.Color Then
                    r1_ = .Range("B" & Rows.Count).End(3).Row + 1
                    ws.UsedRange.Offset(3).Copy .Range("A" & r1_)
                End If
            End If
        Next
    End With
    With Sheets("свод-3")
        .UsedRange.Offset(4).ClearContents
        For Each ws In Worksheets
            If Not UCase(Left(ws.Name, 4)) = "СВОД" Then
                If ws.Tab.Color = .Tab.Color Then
                    r1_ = .Range("B" & Rows.Count).End(3).Row + 1
                    ws.UsedRange.Offset(3).Copy .Range("A" & r1_)
                End If
            End If
        Next
    End With
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 03.10.2017 в 10:44
Мурад Дата: Вторник, 03.10.2017, 15:31 | Сообщение № 14
Группа: Проверенные
Ранг: Ветеран
Сообщений: 520
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
Александр, все работает для данного примера! Спасибо. Далее я буквально переношу этот макрос в книгу с исходными данными, где у меня 25 зеленых листов, 7 оранжевых и 2 лиловых. Запускаю, и макрос начинает переносить данные на листы свод-1, свод-2, свод-3, начиная с ячейки A4, вместо B4. В примере ведь все работает, а в другом файле с другим числом листов уже не работает %)
Может, нужно изменить код
[vba]
Код
ws.UsedRange.Offset(3).Copy .Range("A" & r1_)
[/vba]
на другой?
[vba]
Код
ws.UsedRange.Offset(3).Copy .Range("B" & r1_)
[/vba]

В исходном файле абсолютно такая же шапка, как в файле "example", начинается таблица со столбца В. ничего не менял для примера


Сообщение отредактировал Мурад - Вторник, 03.10.2017, 15:42
 
Ответить
СообщениеАлександр, все работает для данного примера! Спасибо. Далее я буквально переношу этот макрос в книгу с исходными данными, где у меня 25 зеленых листов, 7 оранжевых и 2 лиловых. Запускаю, и макрос начинает переносить данные на листы свод-1, свод-2, свод-3, начиная с ячейки A4, вместо B4. В примере ведь все работает, а в другом файле с другим числом листов уже не работает %)
Может, нужно изменить код
[vba]
Код
ws.UsedRange.Offset(3).Copy .Range("A" & r1_)
[/vba]
на другой?
[vba]
Код
ws.UsedRange.Offset(3).Copy .Range("B" & r1_)
[/vba]

В исходном файле абсолютно такая же шапка, как в файле "example", начинается таблица со столбца В. ничего не менял для примера

Автор - Мурад
Дата добавления - 03.10.2017 в 15:31
_Boroda_ Дата: Вторник, 03.10.2017, 15:45 | Сообщение № 15
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
А макрос и у меня переносил со столбца А. В Вашем примере в А ничего нет, поэтому без разницы.
А мы с Вами плавно возвращаемся к Правилам форума, где русским по желтенькому написано "старайтесь сохранить структуру, расположение таблиц, ... - аналогично оригиналу". Какой пример дали - такой ответ и получили.

Если со столбца В, то вот так нужно
[vba]
Код
ws.UsedRange.Offset(3,1).Copy .Range("B" & r1_)
[/vba]

========
Добавлено
Если таблицы начинаются со столбца В, то в столбце А пусто? Тогда какая Вам разница - с А переносим или с В?


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995


Сообщение отредактировал _Boroda_ - Вторник, 03.10.2017, 15:47
 
Ответить
СообщениеА макрос и у меня переносил со столбца А. В Вашем примере в А ничего нет, поэтому без разницы.
А мы с Вами плавно возвращаемся к Правилам форума, где русским по желтенькому написано "старайтесь сохранить структуру, расположение таблиц, ... - аналогично оригиналу". Какой пример дали - такой ответ и получили.

Если со столбца В, то вот так нужно
[vba]
Код
ws.UsedRange.Offset(3,1).Copy .Range("B" & r1_)
[/vba]

========
Добавлено
Если таблицы начинаются со столбца В, то в столбце А пусто? Тогда какая Вам разница - с А переносим или с В?

Автор - _Boroda_
Дата добавления - 03.10.2017 в 15:45
Мурад Дата: Вторник, 03.10.2017, 16:33 | Сообщение № 16
Группа: Проверенные
Ранг: Ветеран
Сообщений: 520
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
Структура файлов всегда была одинаковой, Александр.
По сути вопроса, вначале макрос переносил табличную часть со столбца В на лист СВОД в столбец А (а нужно было в столбец В). В последнем случае макрос начинает переносить со столбца С одного листа в столбец В листа СВОД.
 
Ответить
СообщениеСтруктура файлов всегда была одинаковой, Александр.
По сути вопроса, вначале макрос переносил табличную часть со столбца В на лист СВОД в столбец А (а нужно было в столбец В). В последнем случае макрос начинает переносить со столбца С одного листа в столбец В листа СВОД.

Автор - Мурад
Дата добавления - 03.10.2017 в 16:33
_Boroda_ Дата: Вторник, 03.10.2017, 16:38 | Сообщение № 17
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Ничего не понял
Ну попробуйте так, как писали - Offset(3)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеНичего не понял
Ну попробуйте так, как писали - Offset(3)

Автор - _Boroda_
Дата добавления - 03.10.2017 в 16:38
Мурад Дата: Вторник, 03.10.2017, 16:41 | Сообщение № 18
Группа: Проверенные
Ранг: Ветеран
Сообщений: 520
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
Ну попробуйте так, как писали - Offset(3)


Идеально hands Извините, что замучил вас невнятными объяснениями)
 
Ответить
Сообщение
Ну попробуйте так, как писали - Offset(3)


Идеально hands Извините, что замучил вас невнятными объяснениями)

Автор - Мурад
Дата добавления - 03.10.2017 в 16:41
  • Страница 1 из 1
  • 1
Поиск:

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