Подскажите, как в рамках VBA определить существуют ли на Листе сгруппированные строки или нет??? (т.е. прменялся ли на Листе метод Group для каких-либо строк ???). |
|
неужели никто не сталкивался с такой необходимостью |
|
ytk5kyky Пользователь Сообщений: 2410 |
{quote}{login=Евгений}{date=31.10.2008 05:01}{thema=}{post}неужели никто не сталкивался с такой необходимостью{/post}{/quote}Значит не сталкивался. |
New Пользователь Сообщений: 4581 |
Вот 2 макроса. 1-й проверяет, есть ли группировка строк, а 2-й проверяет, есть ли группировка столбцов на активном листе Sub CheckRowsForGroup() Sub CheckColumnsForGroup() P.S. Основано на основе макросов из этой темы с соседнего форума http://forum.sql.ru/forum/actualthread.aspx?tid=357196 |
Огромное спасибо Pavel55! О свойстве OutlineLevel — действительно знать надо! |
|
Pavel55 а может ты знаешь ответ на еще один подобный вопрос! |
|
всегда есть хотя бы одна выделенная ячейка |
|
{quote}{login=Артем}{date=31.10.2008 02:04}{thema=}{post}всегда есть хотя бы одна выделенная ячейка{/post}{/quote} Тогда уточняю…. |
|
New Пользователь Сообщений: 4581 |
эм, не очень понял вопрос, но попробуйте так Sub Макрос1() |
{quote}{login=}{date=31.10.2008 09:58}{thema=Re: }{post}{quote}{login=Артем}{date=31.10.2008 02:04}{thema=}{post}всегда есть хотя бы одна выделенная ячейка{/post}{/quote} Тогда уточняю…. |
|
Уточняю задачу. Теперь задача понятна? |
|
Юрий М Модератор Сообщений: 60578 Контакты см. в профиле |
Евгений, думаю, что если бы сразу повели разговор о проверке наличия на листе формул, ответ давно бы получили. Вот посмотрите обсуждение: http://www.planetaexcel.ru/forum.php?thread_id=3405 Может что полезное для Вас найдётся. |
Юрий М Модератор Сообщений: 60578 Контакты см. в профиле |
Ещё вот что: следующий макрос выделит на листе все ячейки с формулам: |
New Пользователь Сообщений: 4581 |
Не знаю, правильно или нет (в плане, может как-то короче можно или нет) Sub Макрос1() On Error Resume Next |
Юрий М Модератор Сообщений: 60578 Контакты см. в профиле |
Павел, я думаю, что если достаточно проверить наличие, то можно так: |
New Пользователь Сообщений: 4581 |
Юрий, а вы пробовали запустить свой макрос в Excel? |
Юрий М Модератор Сообщений: 60578 Контакты см. в профиле |
Конечно! Вот он. А что-то не так? |
Юрий М Модератор Сообщений: 60578 Контакты см. в профиле |
Павел, ну сколько можно томить неизвестностью? Я уже (кроме синтаксиса) проверил: орфографию, стилистику, рифму… Чта Вас смутило? |
Юрий М Модератор Сообщений: 60578 Контакты см. в профиле |
Кажется понял что — отсутствие строчки |
New Пользователь Сообщений: 4581 |
Угу, если на листе не будет ни одной формулы, то выскочит ошибка 1004. |
Спасибо Вам Юрий М и Вам Pavel55 за обсуждение проблемы. |
|
Вы правильно поняли мою проблему (именно выскакивание ошибки 1004) |
|
Юрий М Модератор Сообщений: 60578 Контакты см. в профиле |
Как требуют старшие товарищи, и правила хорошего поведения в Excel добавил проклятую строчку. Теперь при отсутствии формул на листе орать не будет, зараза… |
ZVI Пользователь Сообщений: 4328 |
Юрий, немного не так — проверьте. У Павла — коректнее. Но методу SpecialCells() доверять можно не всегда. |
New Пользователь Сообщений: 4581 |
ZVI, а если в Вашем примере не выделять столбец А и запустить макрос, то вообще ничего не происходит (ничего не выделяется). Я думаю, что это связано с ограничением количества несмежных ячеек. Сейчас не вспомню, но, вроде, количество несмежных ячеек не должно превышать какое-то количество. |
ZVI Пользователь Сообщений: 4328 |
Павел, все верно. |
New Пользователь Сообщений: 4581 |
Вот, сейчас проверил. Если ввести формулу =1+1 в ячейку А1, выделить А1 и А2 и скопировать их до ячейки 16383, т.е. количество ячеек с формулами будет равняться 8192, то ячейки с формулами нормально выделяются. |
New Пользователь Сообщений: 4581 |
угу) Пока писал, вы уже ответили ) |
ZVI Пользователь Сообщений: 4328 |
Павел, это тот случай, когда лучше мы с Вами вдвоем напишен, чем понадеемся друг на друга на ночь глядя и заснем На всякий случай — вот еще и ссылка: http://support.microsoft.com/default.aspx?scid=kb;en-us;832293 Там однозначно написано, что при попытке выделить вручную будет выведено сообщение об ошибке, а если с помощью VBA — то ничто и не вякнет об ошибке. |
New Пользователь Сообщений: 4581 |
#30 04.11.2008 02:18:11 По поводу .Areas.Count — у меня не считается, если их больше 8192, т.е. если меньше то пишет, например, 8190, а если больше, то просто 1. А у Вас? Меня это удивило, как же определить, что диапазонов больше? |
Содержание
- Метод Range.Group (Excel)
- Синтаксис
- Параметры
- Возвращаемое значение
- Примечания
- Поддержка и обратная связь
- VBA Group Rows & Columns
- Group Rows or Columns
- Ungroup Rows or Columns
- Expand All “Grouped” Outline Levels
- VBA Coding Made Easy
- VBA Code Examples Add-in
- VBA Code Generator
- AutoMacro: VBA Add-in with Hundreds of Ready-To-Use VBA Code Examples & much more!
- What is AutoMacro?
- Группировка строк с одинаковым значением в VBA
- Если есть группировка vba excel
- Если есть группировка vba excel
Метод Range.Group (Excel)
Когда объект Range представляет одну ячейку в диапазоне данных поля сводной таблицы, метод Group выполняет числовую или датовую группировку в этом поле.
Синтаксис
expression. Группа (начало, конец, по, точки)
выражение: переменная, представляющая объект Range.
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
Start | Необязательный | Variant | Первое сгруппированное значение. Если этот аргумент опущен или True, используется первое значение в поле. |
End | Необязательный | Variant | Последнее сгруппированное значение. Если этот аргумент опущен или True, используется последнее значение в поле. |
By | Необязательный | Variant | Если поле числовое, этот аргумент указывает размер каждой группы. Если поле является датой, этот аргумент указывает количество дней в каждой группе, если элемент 4 в массиве Periods имеет значение True , а все остальные элементы — False. В противном случае этот аргумент игнорируется. Если этот аргумент опущен, Microsoft Excel автоматически выбирает размер группы по умолчанию. |
Periods | Необязательный | Variant | Массив логических значений, указывающих период для группы, описанный в разделе Примечания. Если элемент в массиве имеет значение True, группа создается для соответствующего времени; Если элемент имеет значение False, группа не создается. Если поле не является полем даты, этот аргумент игнорируется. |
Возвращаемое значение
Примечания
Логический массив для параметра Periods содержит следующие элементы:
Элемент Array | Period |
---|---|
1 | Секунды |
2 | Минуты |
3 | Часы |
4 | Дни |
5 | Месяцы |
6 | Четверти |
7 | Годы |
Так как группа фигур обрабатывается как одна фигура, группирование и разгруппирование фигур изменяет количество элементов в коллекции Фигуры и изменяет число индексов элементов, которые поступают после затронутых элементов в коллекции.
Объект Range должен быть одной ячейкой в диапазоне данных поля сводной таблицы. При попытке применить этот метод к нескольким ячейкам произойдет сбой (без отображения сообщения об ошибке).
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
VBA Group Rows & Columns
In this Article
This tutorial will demonstrate how to group and ungroup rows and columns in VBA.
Group Rows or Columns
To group rows or columns apply the Group Method to the rows or columns:
Ungroup Rows or Columns
To ungroup the rows or columns, simply use the Ungroup Method:
Expand All “Grouped” Outline Levels
To expand all grouped outline levels, use this line of code:
To collapse all outline levels, use this line of code:
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
VBA Code Examples Add-in
Easily access all of the code examples found on our site.
Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.
(No installation required!)
VBA Code Generator
AutoMacro: VBA Add-in with Hundreds of Ready-To-Use VBA Code Examples & much more!
What is AutoMacro?
AutoMacro is an add-in for VBA that installs directly into the Visual Basic Editor. It comes loaded with code generators, an extensive code library, the ability to create your own code library, and many other time-saving tools and utilities that add much needed functionality to the outdated VBA Editor.
Источник
Группировка строк с одинаковым значением в VBA
У меня есть таблица в Excel, и я хочу создать макрос в VBA для группировать строки с одинаковым значением в столбце F и выделить группу заголовков жирным шрифтом.
Другими словами, все строки с одинаковым значением в столбце F должны быть сгруппированы в одну строку с полужирным шрифтом. Это возможно?
Вот что у меня: Фактические данные
Вот чего я хочу:
Большое спасибо, я буду очень признателен
@Javi — Даже если этот сайт был «бесплатной службой кодирования», группировка строк с одинаковым значением не требует VBA и выполняется несколькими щелчками мыши путем создания Сводная таблица.
См. Раздел Поддержка MS Office: Создайте сводную таблицу для анализа данных рабочего листа, а также Сгруппировать или разгруппировать данные в сводной таблице.
@Ashleedawg Я хочу сгруппировать со значком плюса, поэтому сводная таблица мне не подходит. Большое спасибо 🙂
@Javi ты имеешь в виду такая группа?
@ProfoundlyOblivious да, это правильно !! 🙂
Хорошо, я разобрался с вашим кодом. Вам не хватает жирного и яркого. Это все, что вам нужно, или есть что-то, что не работает должным образом?
Думаю, это все, что мне нужно. Не знаю, лучшее ли решение, как я это сделал.
Взгляните на этот выход — это то, что вы ищете? Я думаю, может быть, вы хотели отформатировать только одну строку . это то, что я хотел, но мне было весело и я увлекся.
@ProfoundlyOblivious вывод пустой 🙁
Понятия не имею, что вы имеете в виду. Я начинаю с электронной таблицы, в которой нет групп или выделения. В столбце F есть повторяющиеся значения. Я запускаю код, и лист группируется по столбцу F, все строки в этой группе форматируются, и группа сворачивается. Выходные данные показывают, что группа развернута и свернута. Кроме того, группировка выполняется вашим кодом без изменений функциональности группировки. Я только форматирование добавил.
Ссылаюсь на вашу ссылку пуста imgur.com/a/tFBAB2f 🙂 а теперь появляется! 🙂
Мне кажется более визуально привлекательным выделить только самую верхнюю строку, но вы запросили все строки, поэтому здесь будет объяснено, как сделать это в обоих направлениях. Я на 100% уверен, что это крайне неэффективно, но при этом вносит минимальные изменения в существующий код и обеспечивает желаемый результат.
Для обеих версий вам понадобится еще одна переменная диапазона. Технически в этом нет необходимости, но мне не хотелось делать мысленную гимнастику с i и j.
И почти в самом низу вставить условную проверку и форматирование.
Чтобы отформатировать только самую верхнюю строку в группе, добавьте else и форматируйте — НЕ ИСПОЛЬЗУЙТЕ ЭТОТ СЕГМЕНТ, ЕСЛИ ВЫ ХОТИТЕ ВЫДЕЛИТЬ ВСЕ СТРОКИ
Чтобы отформатировать каждую строку в группе, объявите еще одну итеративную переменную и используйте вместо нее этот сегмент.
Один из этих двух вариантов должен доставить вас туда, куда вы хотите.
Подсвечивает только самый верхний ряд, это нормально для меня! 🙂 Большое спасибо @ProfoundlyOblivious
Источник
Если есть группировка vba excel
Добрый день.
Очень нужна ваша помощь. Нужно сгруппировать свод, чтобы можно было нажать на плюс — столбец развернулся — еще плюс — второй столбец развернулся.
Пример во вложении. Нужно сгруппировать первый столбец до итогов, и второй столбец до итогов.
Примерно так:
-Кластер 1 Итог
-Кластер 2 Итог
Нажимаем на плюс (внутри кластера):
-БП итог
-Б.П+Макароны Итог
-Бум.пр. Итог
и т.д.
Нажимаем еще на плюс:
номера и заводы видно
Как-то так. Помогите написать макрос для этого.
По факту строк будет около 150000 (если это важно для макроса) Кол-во столбцов как в примере
Добрый день.
Очень нужна ваша помощь. Нужно сгруппировать свод, чтобы можно было нажать на плюс — столбец развернулся — еще плюс — второй столбец развернулся.
Пример во вложении. Нужно сгруппировать первый столбец до итогов, и второй столбец до итогов.
Примерно так:
-Кластер 1 Итог
-Кластер 2 Итог
Нажимаем на плюс (внутри кластера):
-БП итог
-Б.П+Макароны Итог
-Бум.пр. Итог
и т.д.
Нажимаем еще на плюс:
номера и заводы видно
Как-то так. Помогите написать макрос для этого.
По факту строк будет около 150000 (если это важно для макроса) Кол-во столбцов как в примере Nikonka89
Сообщение Добрый день.
Очень нужна ваша помощь. Нужно сгруппировать свод, чтобы можно было нажать на плюс — столбец развернулся — еще плюс — второй столбец развернулся.
Пример во вложении. Нужно сгруппировать первый столбец до итогов, и второй столбец до итогов.
Примерно так:
-Кластер 1 Итог
-Кластер 2 Итог
Нажимаем на плюс (внутри кластера):
-БП итог
-Б.П+Макароны Итог
-Бум.пр. Итог
и т.д.
Нажимаем еще на плюс:
номера и заводы видно
Как-то так. Помогите написать макрос для этого.
По факту строк будет около 150000 (если это важно для макроса) Кол-во столбцов как в примере Автор — Nikonka89
Дата добавления — 23.07.2020 в 16:13
Источник
Если есть группировка vba excel
Прошу помочь с написанием макроса, который бы работал следующим образом:
0. На листе создается кнопка «Группировка», которая активирует макрос, при нажатии на нее; кнопка «Сгруппировать», которая группирует все существующие связи; «Разгруппировать», которая разгруппирует их, соответственно.
При нажатии на кнопку «Группировка», происходят следующие процессы:
1. Сбрасываются (удаляются) все действующие группировки на листе;
2. Определяется диапазон работы макроса — со строки № 6 листа (включительно), до строки, в столбце В которой значение «Общий итог» (номер строки не определен!!);
3. Группируются строки, в столбце А которых стоит значение «-«, разумеется каждый набор последовательно идущих строк, удовлетворяющих условие, группируется отдельно, «не задевая» те строки, которые условие не удовлетворяют.
ПС. Если есть вариант решения задачи не макросом, а иным способом — то будет вообще супер!
Пример прилагаю. Благодарю за уделенное время!
Прошу помочь с написанием макроса, который бы работал следующим образом:
0. На листе создается кнопка «Группировка», которая активирует макрос, при нажатии на нее; кнопка «Сгруппировать», которая группирует все существующие связи; «Разгруппировать», которая разгруппирует их, соответственно.
При нажатии на кнопку «Группировка», происходят следующие процессы:
1. Сбрасываются (удаляются) все действующие группировки на листе;
2. Определяется диапазон работы макроса — со строки № 6 листа (включительно), до строки, в столбце В которой значение «Общий итог» (номер строки не определен!!);
3. Группируются строки, в столбце А которых стоит значение «-«, разумеется каждый набор последовательно идущих строк, удовлетворяющих условие, группируется отдельно, «не задевая» те строки, которые условие не удовлетворяют.
ПС. Если есть вариант решения задачи не макросом, а иным способом — то будет вообще супер!
Пример прилагаю. Благодарю за уделенное время! Sl1mka
Сообщение Добрый день!
Прошу помочь с написанием макроса, который бы работал следующим образом:
0. На листе создается кнопка «Группировка», которая активирует макрос, при нажатии на нее; кнопка «Сгруппировать», которая группирует все существующие связи; «Разгруппировать», которая разгруппирует их, соответственно.
При нажатии на кнопку «Группировка», происходят следующие процессы:
1. Сбрасываются (удаляются) все действующие группировки на листе;
2. Определяется диапазон работы макроса — со строки № 6 листа (включительно), до строки, в столбце В которой значение «Общий итог» (номер строки не определен!!);
3. Группируются строки, в столбце А которых стоит значение «-«, разумеется каждый набор последовательно идущих строк, удовлетворяющих условие, группируется отдельно, «не задевая» те строки, которые условие не удовлетворяют.
ПС. Если есть вариант решения задачи не макросом, а иным способом — то будет вообще супер!
Пример прилагаю. Благодарю за уделенное время! Автор — Sl1mka
Дата добавления — 10.07.2015 в 13:17
Источник
viper-x 65 / 22 / 7 Регистрация: 28.02.2018 Сообщений: 211 |
||||
1 |
||||
Excel Статус группировки (структуры)31.05.2021, 11:02. Показов 1206. Ответов 1 Метки нет (Все метки)
Здравствуйте!
и получаю ошибку, в случае, если строка уже разгруппирована.
0 |
Rosgard 50 / 24 / 8 Регистрация: 11.08.2020 Сообщений: 98 |
||||||||
31.05.2021, 11:59 |
2 |
|||||||
Первая же ссылка в поисковике по запросу «проверка сгруппированы ли ячейки excel vba»:
Добавлено через 1 минуту
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
31.05.2021, 11:59 |
Помогаю со студенческими работами здесь Группировки элементов Группировки в отчете представление группировки Группировки в отчете Можно ли в аксес-отчете сделать так, что если в… Группировки в QuantumGrid Группировки в отчете Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 2 |
I’m working on a macro to create some order in a very large excel doc. After a few operations on a specific selection, I would like to check if there are rows in that selected range that are grouped, and if so, they need to be ungrouped. After ungrouping all the rows (could be some seperate groups in the range, could be one big group or not even grouped at all), they need to be grouped all together. The part of the code below starts with selecting the specific range, I think the solution is looping through the range and checking all the rows if they are part of a group, and if so, they would be needed to be ungrouped. But Don’t know how to translate this concept into a working code
Also, an example of a range before the ungrouping/grouping operation is included below.
Range(Cells(Rstart, "H"), Cells(Rend, "H")).Select
Selection.Rows.Ungroup
Selection.Rows.Group
- deepslam
- Бывалый
- Сообщения: 286
- Зарегистрирован: 19.08.2002 (Пн) 2:25
- Откуда: Russia
Подскажите как узнать сгруппированы ли строки в Excel?
Добрый день!
Как узнать сгруппированы ли строки в Excel файле и , если да, то узнать с на каком диапазоне. Заранее спасибо!
- $€rg
- Обычный пользователь
- Сообщения: 99
- Зарегистрирован: 11.01.2006 (Ср) 10:15
- Откуда: Санкт-Петербург
$€rg » 18.04.2006 (Вт) 11:11
процесс печатания программного кода укрепляет моральные устои С. Каммингс VBA4Dummies
:study:
- alibek
- Большой Человек
- Сообщения: 14205
- Зарегистрирован: 19.04.2002 (Пт) 11:40
- Откуда: Russia
alibek » 18.04.2006 (Вт) 11:17
$€rg, причем тут объединение?
Именно группировка.
deepslam, посмотри в справке VBA Excel пример к Group.
Lasciate ogni speranza, voi ch’entrate.
- deepslam
- Бывалый
- Сообщения: 286
- Зарегистрирован: 19.08.2002 (Пн) 2:25
- Откуда: Russia
deepslam » 18.04.2006 (Вт) 13:22
Спасибо всем, кто отклинулся, то что меня интересовало, я нашел!
Вот код:
- Код: Выделить всё
'для 10-й строчки
Worksheets(1).Rows(10).OutlineLevel
[/code]
Вернуться в VBA
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2