maximych Пользователь Сообщений: 8 |
#1 08.04.2016 10:29:30 Всем привет!
Собственно вопрос, как «зациклить» выделение, чтобы выделилось разом 60 таких кусков? Изменено: maximych — 08.04.2016 12:47:08 |
||
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
maximych, код следует оформлять соответствующим тегом: ищите такую кнопку и исправьте своё сообщение. Спасибо! |
Апострофф Пользователь Сообщений: 720 |
#3 08.04.2016 11:45:38 так?
|
||
LVL Пользователь Сообщений: 903 |
Вопрос только в том для чего выделять 60 не смежных диапазонов |
maximych Пользователь Сообщений: 8 |
Апострофф, спасибо! Работает как надо. Изменено: maximych — 08.04.2016 13:00:03 |
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
А такой диапазон у Вас имеется? |
maximych Пользователь Сообщений: 8 |
Юрий М, вы правы, я извиняюсь. Выложил на форум код, не совсем такой как в рабочем файле. |
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
|
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
#9 08.04.2016 13:08:09
Через MsgBox нереально — это только информационный инструмент. Смотрите в сторону InputBox. |
||
maximych Пользователь Сообщений: 8 |
#10 08.04.2016 13:15:26
Вот в этом и проблема. Пришлось задать жестко габариты диапазона для упрощения задачи, а в идеале хотелось бы чтобы фиксированным было только количество столбцов, а строки в свою очередь задавались. Изменено: maximych — 08.04.2016 13:17:32 |
||
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
#11 08.04.2016 13:20:55 Попробуйте вариант с произвольным диапазоном, который укажите сами:
|
||
maximych Пользователь Сообщений: 8 |
#12 08.04.2016 13:24:29 Юрий М, спасибо за подсказку!
Изменено: maximych — 08.04.2016 13:26:05 |
||
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
А вариант с Application.InputBox не смотрели? |
maximych Пользователь Сообщений: 8 |
#14 08.04.2016 13:48:58
Все шикарно работает. Ваш вариант особенно удобен тем что можно произвольно выделить базовую область. Изменено: maximych — 08.04.2016 14:19:25 |
||
Определение блока ячеек, состоящего из объединения двух и более диапазонов, с помощью метода Application.Union из кода VBA Excel. Примеры объединения.
Описание
Application.Union – это метод VBA Excel, который возвращает объект Range, являющийся объединением двух или более указанных диапазонов.
Синтаксис
Application.Union (Arg1, Arg2, Arg3, ..., Arg30) |
- Arg1, Arg2 – обязательные аргументы, представляющие из себя диапазоны ячеек (объекты Range).
- Arg3, …, Arg30* – необязательные аргументы, представляющие из себя диапазоны ячеек (объекты Range).
* Допустимо использование до 30 аргументов включительно.
Примеры
Пример 1
Объединение диапазонов, занимающих прямоугольную область:
Sub Primer1() Dim rngun As Range, arg1 As Range, arg2 As Range, arg3 As Range Set arg1 = Range(«B2:D6») Set arg2 = Range(«D2:F6») Set arg3 = Range(«B5:F9») Set rngun = Application.Union(arg1, arg2, arg3) MsgBox «Адрес объединенного диапазона: « & rngun.Address End Sub |
Объединение диапазонов, занимающих прямоугольную область
Пример 2
Объединение несмежных диапазонов:
Sub Primer2() Dim rngun As Range, arg1 As Range, arg2 As Range, arg3 As Range Set arg1 = Range(«B2:C4») Set arg2 = Range(«E2:F5») Set arg3 = Range(«C7:E9») Set rngun = Application.Union(arg1, arg2, arg3) MsgBox «Адрес объединенного диапазона: « & rngun.Address End Sub |
Объединение несмежных диапазонов
Пример 3
Объединение пересекающихся диапазонов:
Sub Primer3() Dim rngun As Range, arg1 As Range, arg2 As Range, arg3 As Range Set arg1 = Range(«B2:E5») Set arg2 = Range(«C3:F9») Set arg3 = Range(«D4:D10») Set rngun = Application.Union(arg1, arg2, arg3) MsgBox «Адрес объединенного диапазона: « & rngun.Address End Sub |
Объединение пересекающихся диапазонов
Самый наглядный вариант объединения ячеек рассмотрен в первом примере, когда объединяемые диапазоны образуют одну прямоугольную область. Во втором и третьем примерах результат объединения аналогичен использованию свойства Range объекта Worksheet:
Set rngun = Range(arg1.Address & «, « & arg2.Address & «, « & arg3.Address) |
I was looking further to see if there is a better way of writing concatenate function and found this. It seems that we all have the same working principle for the function. So its ok.
But my function is different that it can take multiple parameters, in combination of ranges, texts and numbers.
I assume that a delimiter is mandatory, so if i don’t need it i just put «» as the last parameter).
I also assume that blank cells are not to be skipped. That’s the reason why i want the function to take multiple parameters, so i can easily omit those that that i don’t want in the concatenation.
Example of use:
=JoinText(A1:D2,F1:I2,K1:L1,";")
You can also use together text and number among the parameters:
=JoinText(A1:D2,123,F1:I2,K1:L1,"PQR",";")
I’d love to hear any comments or suggestions where it can be improved.
Here is the code.
Public Function JoinText(ParamArray Parameters() As Variant) As String
Dim p As Integer, c As Integer, Delim As String
Delim = Parameters(UBound(Parameters))
For p = 0 To UBound(Parameters) - 1
If TypeName(Parameters(p)) = "Range" Then
For c = 1 To Parameters(p).Count
JoinText = JoinText & Delim & Parameters(p)(c)
Next c
Else
JoinText = JoinText & Delim & Parameters(p)
End If
Next p
JoinText = Replace(JoinText, Delim, "", , 1, vbBinaryCompare)
End Function
Lnduk 1 / 1 / 0 Регистрация: 12.12.2019 Сообщений: 11 |
||||||||
1 |
||||||||
Excel 12.12.2019, 12:51. Показов 3802. Ответов 10 Метки нет (Все метки)
Всем привет!
Не могу понять почему, но Union выдает странные результаты: только первые 2 диапазона.
то выдаст только значения department. Вопрос:
0 |
208 / 183 / 43 Регистрация: 02.08.2019 Сообщений: 585 Записей в блоге: 23 |
|
12.12.2019, 13:47 |
2 |
Lnduk, привет! Union работает только со смежными или пересекающимися диапазонами, по этому она вам не подойдет вот описание которое нашел: Функция VBA Union возвращает объект Range, который представляет собой объединение двух объектов типа Range. Объединение содержит все ячейки, относящиеся к исходным диапазонам. Если адрес объединения двух диапазонов совпадает с адресом второго диапазона, первый диапазон входит в состав второго диапазона. Добавлено через 23 секунды https://qarchive.ru/2333452_me… ryvajutsja
0 |
1 / 1 / 0 Регистрация: 12.12.2019 Сообщений: 11 |
|
12.12.2019, 13:58 [ТС] |
3 |
Спасибо.
0 |
208 / 183 / 43 Регистрация: 02.08.2019 Сообщений: 585 Записей в блоге: 23 |
|
12.12.2019, 14:05 |
4 |
Lnduk, переместите столбики рядом друг с дргом Добавлено через 1 минуту Добавлено через 2 минуты
0 |
1 / 1 / 0 Регистрация: 12.12.2019 Сообщений: 11 |
|
12.12.2019, 14:12 [ТС] |
5 |
переместите столбики рядом друг с дргом не вариант в моем случае: неприкосновенность исходных данных главное условие. Но работает — согласен.
или закидывайте в массив всю таблицу пока так и сделал. Но в этом случае если поменяется порядок столбцов (кто знает что пользователю в голову придет) придется отдельный блок для поиска нужных данных в массиве делать.
0 |
Aleksan7 109 / 60 / 27 Регистрация: 22.02.2018 Сообщений: 189 |
||||
12.12.2019, 14:12 |
6 |
|||
Lnduk, сегодня в соседней теме выкладывал код, как из закрытой книги данные получить,
0 |
KoGG 5590 / 1580 / 406 Регистрация: 23.12.2010 Сообщений: 2,366 Записей в блоге: 1 |
||||
12.12.2019, 14:13 |
7 |
|||
Union может содержать и далеко стоящие диапазоны.
массив всего Union не получится.
0 |
Lnduk 1 / 1 / 0 Регистрация: 12.12.2019 Сообщений: 11 |
||||
12.12.2019, 14:44 [ТС] |
8 |
|||
Aleksan7,
как вариант использовать 3 массива по 1 массиву на каждый рейнж их же потом все равно объединять. Вопрос как — еще не гуглил. Если подскажешь — буду очень признателен.
записать на лист «буфер» Не хочу использовать такой метод, но как вариант конечно рабочий.
сегодня в соседней теме выкладывал код Вот за это тоже спасибо. Интересное решение. Подумаю как применить… Добавлено через 2 минуты
в Union загоняются только первые смежные диапазоны.
0 |
109 / 60 / 27 Регистрация: 22.02.2018 Сообщений: 189 |
|
12.12.2019, 15:18 |
9 |
Lnduk, есть еще способ, изварщённо конечно, но…
0 |
1 / 1 / 0 Регистрация: 12.12.2019 Сообщений: 11 |
|
12.12.2019, 15:46 [ТС] |
10 |
Aleksan7, спасибо, попробую реализовать, но придется немного перепиливать обработчик — он заточен на обычный массив.
0 |
109 / 60 / 27 Регистрация: 22.02.2018 Сообщений: 189 |
|
13.12.2019, 09:23 |
11 |
Lnduk, redim preserve меняет последнюю размерность массива, не вижу как он тут может помочь в итоге получим нормальный массив, с привычными адресами элементов, и не нужно обработчик править
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
13.12.2019, 09:23 |
11 |