Страницы: 1
RSS
VBA Excel: Как разделить выделенный диапазон на области?, Хочется выделенную таблицу разделить на блоки и отформатировать отдельно
 
Добрый день!
Поискал, погуглил но что то не нашел нужного. Возможно с ключевыми словами не угадал. Поэтому обращаюсь к вам.
Хочу сделать автоформат таблицы по своим параметрам. Сейчас основной тупик в том как разделить выделенный диапазон на области, т.е. область данных (значения, формулы и т.д.), область заголовка (одна или более строк), область подписей (обычно слева построчно), область итога по строкам, область итога по столбцам.
Хотелось бы знать адреса всех этих областей и манипулировать ими уже как мне нужно.
Начинаю с CurrentRegion
Код
Sub Test()
Dim rng as Range
'Выделяем текущую область
Set rng = Activecell.CurrentRegion
rng.Select
End Sub
Подпись таблицы тоже захватывается, ее надо убрать из выделенного диапазона.
Конечно можно создать форму и вставить туда элемент управления RefEdit несколько штук и все области повыделять, но это долго и не интересно.
Прошу вашей помощи)
Файл во вложении как пример.
 
Цитата
dimabk написал:
область заголовка (одна или более строк), область подписей (обычно слева построчно),
Автоформат с категориями "или", "обычно", не работает.
 
Чтобы работать с CurrentRegion нужно соблюдать правило: Раздельные регионы не должны соприкасаться, даже углами...
Если же Вы знаете Высоту шапки и она стандартная, то что Вам запрещает задать диапазон шапки и заголовков столбцов, а также высоту Итогов и вычитать ее из CurrentRegion?
Кроме того объединение ячеек это пагубная тропинка, которая приведет к неудобствам при стандартных приемах работы с таблицами, т.к. носителем отображаемого содержания является первая ячейка объединенного диапазона, что может приводить к ошибкам различного плана.
Изменено: AAF - 18.07.2017 00:22:12
 
А у вас данные - не копия значений, сделанная из имеющейся Сводной?

Если да - то можно было работать и прямо со сводной и её "частями".

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

Если же вы собираетесь ещё как-то "попортить" общую структуру (например, произвольно дописывая свои столбцы и строки) - то ничего не поможет, никакой макрос не сможет "вычислить" вашу структуру правильно. Хотя, конечно, если у вас "видов таблиц" немного, можно сделать некий обходной шаг: указывать где-то "тип шаблона" каждой таблицы, и написать обработчик, который по "типу" будет просто явно рассчитывать нужные вам области, ориентируясь на заранее известное их расположение. Более того, далее вы можете к такому "обработчику" привязать собственные UDF, чтобы, например, возвращать нужные данные или области на лист в формулы.
Изменено: AndreTM - 18.07.2017 02:25:53
 
Нет это не копия из сводной. Это обычная созданная руками таблица которую отформатировать, отдельно заголовки, отдельно подписи строк, отдельно данные и итоги. Я думал вдруг чего то упустил, но видимо не удастся обойтись одной кнопкой. Не к чему привязаться. Единственный верный вариант наверное создать форму в которой добавить элементы управления RefEdit и уже прямо указать.
 
Цитата
dimabk написал:
Хотелось бы знать адреса всех этих областей и манипулировать ими
А можно пример манипуляции? А то теоретические рассуждения могут не обеспечить прикладного применения...  :)
 
Получается, вы сделали по формату что-то вроде аналога Сводной. А зачем?
По идее, вам надо наоборот, - хранить (добавлять, удалять, исправлять) данные в виде обычных плоских/умных таблиц, а вот этот ваш "нужный вид" вы потом легко  и просто получите той же самой сводной.
 
Крос.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
AndreTM, сводные таблицы хороший инструмент но не везде подходит. Сводные таблицы нужны чтобы свести что то и как правило это статистические данные. Простые таблицы никто не отменял. Они применяются при расчетах, проектах и прочее.
Я придумал способ выделить области. Во вложении файл с макросом. Самое главное встать в ячейку в левом верхнем углу области значений. И дальше макрос сам определит что где что. Это сырая версия. Нужно еще дорабатывать прочими чекбоксами и т.д. чтобы сделать его гибким. Спасибо всем.
 
dimabk, кнопка цитирования не для ответа!
 
Цитата
dimabk написал:
Хочу сделать автоформат таблицы по своим параметрам
В Вашем файле таблица состоит из области данных ("A5:I10") и все...
У нее нет области полей (она не организована, как строка содержащая уникальные наименования столбцов).
Так что работать с ней Вы сможете только используя нумерацию столбцов.
А в названии темы:
Цитата
Хочется выделенную таблицу разделить на блоки и отформатировать отдельно
Все остальное на листе - это принадлежность формы отображения, в которой Ваша таблица всего лишь одна из составных частей...
Получается что Вы хотели разделить на области некую форму отображения, а не саму таблицу, что не имеет отношения к работе с таблицами в т. ч. и такими ка
Цитата
dimabk написал:
Простые таблицы никто не отменял
Форм отображение столько, сколько их авторов и универсальности без соблюдение каких-либо правил или стандартов увы не достичь...  :(
 
Цитата
AndreTM написал:
никакой макрос не сможет "вычислить" вашу структуру правильно. Хотя, конечно, если у вас "видов таблиц" немного, можно сделать некий обходной шаг: указывать где-то "тип шаблона" каждой таблицы, и написать обработчик, который по "типу" будет просто явно рассчитывать нужные вам области, ориентируясь на заранее известное их расположение.
То есть если вы объясните обработчику каждый из "своих видов" таблиц, то обработчик и будет вам возвращать, что нужно. Как правильно замечено "ваших видов" вы можете напридумывать столько, сколько требуется.

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

Только вот всё это "изобретательство" сильно смахивает на двухколесное транспортное средство. Причём беспедальное. :)
 
Чуть выше я разместил свое видение макроса через userform. Все верно. Дело в форме отображения. Дело в том что около 80% таблиц в работе имеют вид который я привел в примере. Если же вид совсем изменится то можно в той же форме просто вручную выбрать область через нужный refedit. Что даст то что я хочу сделать: это даст быстрое форматирование таблиц с расчетами по заранее определенным шаблонам прописанным в макросе. Когда создается обычная таблица, к ней же нужно применить границы, выделить заголовки, подписи строк, выделить итоги, отформатировать значения и т.д. И это надоедает, а так прям все будет быстро и удобно. Судя по комментариям вы не совсем поняли что я хочу сделать. Мне кажется что очень понятно написал, хотя допускаю мысль что мне понятно потому что я в этом варюсь а для форума я как то криво истолковал.
Страницы: 1
Читают тему
Наверх