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

Вход

Регистрация

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

 

= Мир MS Excel/Добавление границ на динамический диапазон ячеек и его №пп - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Добавление границ на динамический диапазон ячеек и его №пп (Макросы/Sub)
Добавление границ на динамический диапазон ячеек и его №пп
ПалычЪ Дата: Суббота, 05.12.2015, 21:41 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 106
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Добрый день! Помогите пожалуйста!
Задача:
Есть диапазон ячеек с данными (пример во вложении) как написать макрос, что б запускаешь его и данные которые находятся в желтом диапазоне обрамлялись в рамочку (границу). Но вот загвоздка... желтый диапазон каждый раз разный будет приходить ..надо что б макрос строго каждый раз обрамлял в границу только те ячейки в которых есть данные...диапазон каждый раз приходит разный только в плане длины столбца...а в ширину по ячейкам всегда один и то же (3 ячейки ширина). Начала диапазона всегда будет строго начинаться с тех ячеек что в примере. А вот в синем столбце что б появлялись номера по порядку строк...1..2..3.. и т. д. тоже в строгом соответствии скоко строк с данными будет..стоко и номеров по порядку. Заранее спасибо.
К сообщению приложен файл: 4346478.xlsm (9.1 Kb)


Сообщение отредактировал ПалычЪ - Суббота, 05.12.2015, 22:13
 
Ответить
СообщениеДобрый день! Помогите пожалуйста!
Задача:
Есть диапазон ячеек с данными (пример во вложении) как написать макрос, что б запускаешь его и данные которые находятся в желтом диапазоне обрамлялись в рамочку (границу). Но вот загвоздка... желтый диапазон каждый раз разный будет приходить ..надо что б макрос строго каждый раз обрамлял в границу только те ячейки в которых есть данные...диапазон каждый раз приходит разный только в плане длины столбца...а в ширину по ячейкам всегда один и то же (3 ячейки ширина). Начала диапазона всегда будет строго начинаться с тех ячеек что в примере. А вот в синем столбце что б появлялись номера по порядку строк...1..2..3.. и т. д. тоже в строгом соответствии скоко строк с данными будет..стоко и номеров по порядку. Заранее спасибо.

Автор - ПалычЪ
Дата добавления - 05.12.2015 в 21:41
Roman777 Дата: Суббота, 05.12.2015, 22:17 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
ПалычЪ, добрый день, так можно попробовать:
[vba]
Код
Sub Обрамление()
Dim rng As Range
Dim r_s As Long, r_e As Long, c_s As Long, c_e As Long
r_s = Cells(1, 2).End(xlDown).Row
r_e = Cells(Rows.Count, 2).End(xlUp).Row
c_s = Cells(r_s, 1).End(xlToRight).Column
c_e = Cells(r_s, Columns.Count).End(xlToLeft).Column
Set rng = Range(Cells(r_s, c_s), Cells(r_e, c_e))
For i = 7 To 10
  With rng.Borders(i)
     .Weight = xlMedium
  End With
Next i
End Sub
[/vba]


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Суббота, 05.12.2015, 22:18
 
Ответить
СообщениеПалычЪ, добрый день, так можно попробовать:
[vba]
Код
Sub Обрамление()
Dim rng As Range
Dim r_s As Long, r_e As Long, c_s As Long, c_e As Long
r_s = Cells(1, 2).End(xlDown).Row
r_e = Cells(Rows.Count, 2).End(xlUp).Row
c_s = Cells(r_s, 1).End(xlToRight).Column
c_e = Cells(r_s, Columns.Count).End(xlToLeft).Column
Set rng = Range(Cells(r_s, c_s), Cells(r_e, c_e))
For i = 7 To 10
  With rng.Borders(i)
     .Weight = xlMedium
  End With
Next i
End Sub
[/vba]

Автор - Roman777
Дата добавления - 05.12.2015 в 22:17
devilkurs Дата: Суббота, 05.12.2015, 22:46 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 167
Репутация: 43 ±
Замечаний: 0% ±

Excel 2007, 2010
а я через цвет ячеек предложу

[vba]
Код
Sub aaa()
Dim iCell As Range, iCell1, iCell2, iStart As Boolean
For Each iCell In ActiveSheet.Range("A1:DA" & Cells(Rows.Count, 2).End(xlUp).Row)
  If iCell.Interior.Color = 65535 Then
    If iStart = 0 Then: iCell1 = iCell.Address: iStart = True
    iCell2 = iCell.Address
  End If
Next
    Set IRange = Range(iCell1, iCell2)
    IRange.Borders(xlEdgeLeft).Weight = xlThick
    IRange.Borders(xlEdgeTop).Weight = xlThick
    IRange.Borders(xlEdgeBottom).Weight = xlThick
    IRange.Borders(xlEdgeRight).Weight = xlThick
End Sub
[/vba]




Сообщение отредактировал devilkurs - Суббота, 05.12.2015, 22:48
 
Ответить
Сообщениеа я через цвет ячеек предложу

[vba]
Код
Sub aaa()
Dim iCell As Range, iCell1, iCell2, iStart As Boolean
For Each iCell In ActiveSheet.Range("A1:DA" & Cells(Rows.Count, 2).End(xlUp).Row)
  If iCell.Interior.Color = 65535 Then
    If iStart = 0 Then: iCell1 = iCell.Address: iStart = True
    iCell2 = iCell.Address
  End If
Next
    Set IRange = Range(iCell1, iCell2)
    IRange.Borders(xlEdgeLeft).Weight = xlThick
    IRange.Borders(xlEdgeTop).Weight = xlThick
    IRange.Borders(xlEdgeBottom).Weight = xlThick
    IRange.Borders(xlEdgeRight).Weight = xlThick
End Sub
[/vba]

Автор - devilkurs
Дата добавления - 05.12.2015 в 22:46
ПалычЪ Дата: Воскресенье, 06.12.2015, 00:07 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 106
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Спасибо обоим участникам за участие!
Впрос к Роману

Переделайте плиз так чтоб и внутри все ячейки в рамочках были))а не тока по краям...

и второе...строк в табличке что нужно врамку обрамлять может и 400 быть..ну я эт так на всяк случай...мож пригодится макрос передлать...а то попробывал на 300+ строк макрос применить..тока почему то первый столбец в общую рамку обрамляет((((

И..про порядковый номер то не забыли в крайнем левом столбце?))


Сообщение отредактировал ПалычЪ - Воскресенье, 06.12.2015, 00:09
 
Ответить
СообщениеСпасибо обоим участникам за участие!
Впрос к Роману

Переделайте плиз так чтоб и внутри все ячейки в рамочках были))а не тока по краям...

и второе...строк в табличке что нужно врамку обрамлять может и 400 быть..ну я эт так на всяк случай...мож пригодится макрос передлать...а то попробывал на 300+ строк макрос применить..тока почему то первый столбец в общую рамку обрамляет((((

И..про порядковый номер то не забыли в крайнем левом столбце?))

Автор - ПалычЪ
Дата добавления - 06.12.2015 в 00:07
Roman777 Дата: Воскресенье, 06.12.2015, 00:26 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
ПалычЪ,
Если мой макрос для выделения всё-таки подходит (ток, если на листе находится ничего лишнего кроме выделяемой таблицы), можно так:
[vba]
Код
Sub Обрамление2()
Dim rng As Range
Dim r_s As Long, r_e As Long, c_s As Long, c_e As Long
r_s = Cells(1, 2).End(xlDown).Row
r_e = Cells(Rows.Count, 2).End(xlUp).Row
c_s = Cells(r_s, 1).End(xlToRight).Column
c_e = Cells(r_s, Columns.Count).End(xlToLeft).Column
Set rng = Range(Cells(r_s, c_s), Cells(r_e, c_e))
For i = 7 To 12
With rng.Borders(i)
   .Weight = xlMedium
End With
Next i
For i = r_s To r_e
  Cells(i, 1) = i + 1 - r_s
Next i
End Sub
[/vba]


Много чего не знаю!!!!
 
Ответить
СообщениеПалычЪ,
Если мой макрос для выделения всё-таки подходит (ток, если на листе находится ничего лишнего кроме выделяемой таблицы), можно так:
[vba]
Код
Sub Обрамление2()
Dim rng As Range
Dim r_s As Long, r_e As Long, c_s As Long, c_e As Long
r_s = Cells(1, 2).End(xlDown).Row
r_e = Cells(Rows.Count, 2).End(xlUp).Row
c_s = Cells(r_s, 1).End(xlToRight).Column
c_e = Cells(r_s, Columns.Count).End(xlToLeft).Column
Set rng = Range(Cells(r_s, c_s), Cells(r_e, c_e))
For i = 7 To 12
With rng.Borders(i)
   .Weight = xlMedium
End With
Next i
For i = r_s To r_e
  Cells(i, 1) = i + 1 - r_s
Next i
End Sub
[/vba]

Автор - Roman777
Дата добавления - 06.12.2015 в 00:26
Roman777 Дата: Воскресенье, 06.12.2015, 00:39 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Либо так, если всё же надо по цвету:
[vba]
Код
Sub Обрамление3()
Dim rng As Range
Dim r_s As Long, r_e As Long, c_s As Long, c_e As Long
For Each rng In ActiveSheet.UsedRange
If rng.Interior.Color = 65535 Then
    If r_s <> 0 Then
      If r_s > rng.Row Then r_s = rng.Row
    Else: r_s = rng.Row
    End If
    If r_e < rng.Row Then r_e = rng.Row
    If c_s <> 0 Then
      If c_s > rng.Column Then c_s = rng.Column
    Else: c_s = rng.Column
    End If
    If c_e < rng.Column Then c_e = rng.Column
End If
Next rng
Set rng = Range(Cells(r_s, c_s), Cells(r_e, c_e))
For i = 7 To 12
With rng.Borders(i)
   .Weight = xlMedium
End With
Next i
For i = r_s To r_e
  Cells(i, 1) = i + 1 - r_s
Next i
End Sub
[/vba]


Много чего не знаю!!!!
 
Ответить
СообщениеЛибо так, если всё же надо по цвету:
[vba]
Код
Sub Обрамление3()
Dim rng As Range
Dim r_s As Long, r_e As Long, c_s As Long, c_e As Long
For Each rng In ActiveSheet.UsedRange
If rng.Interior.Color = 65535 Then
    If r_s <> 0 Then
      If r_s > rng.Row Then r_s = rng.Row
    Else: r_s = rng.Row
    End If
    If r_e < rng.Row Then r_e = rng.Row
    If c_s <> 0 Then
      If c_s > rng.Column Then c_s = rng.Column
    Else: c_s = rng.Column
    End If
    If c_e < rng.Column Then c_e = rng.Column
End If
Next rng
Set rng = Range(Cells(r_s, c_s), Cells(r_e, c_e))
For i = 7 To 12
With rng.Borders(i)
   .Weight = xlMedium
End With
Next i
For i = r_s To r_e
  Cells(i, 1) = i + 1 - r_s
Next i
End Sub
[/vba]

Автор - Roman777
Дата добавления - 06.12.2015 в 00:39
ПалычЪ Дата: Воскресенье, 06.12.2015, 00:56 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 106
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Рома ваще все классно..последняя просьба..в подробности вдоваться не буду...
нужно макрос так переделать что б нумерация начиналась на две строки ниже...пожалуйста...

мне подошел вариант без цвета


Сообщение отредактировал ПалычЪ - Воскресенье, 06.12.2015, 01:15
 
Ответить
СообщениеРома ваще все классно..последняя просьба..в подробности вдоваться не буду...
нужно макрос так переделать что б нумерация начиналась на две строки ниже...пожалуйста...

мне подошел вариант без цвета

Автор - ПалычЪ
Дата добавления - 06.12.2015 в 00:56
devilkurs Дата: Воскресенье, 06.12.2015, 01:20 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 167
Репутация: 43 ±
Замечаний: 0% ±

Excel 2007, 2010
[vba]
Код
For i = r_s To r_e
Cells(i, 1) = i + 1 - r_s
Next i
[/vba]
Заменить на
[vba]
Код
For i = r_s+2 To r_e
Cells(i, 1) = i + 1 - r_s-2
Next i
[/vba]


 
Ответить
Сообщение[vba]
Код
For i = r_s To r_e
Cells(i, 1) = i + 1 - r_s
Next i
[/vba]
Заменить на
[vba]
Код
For i = r_s+2 To r_e
Cells(i, 1) = i + 1 - r_s-2
Next i
[/vba]

Автор - devilkurs
Дата добавления - 06.12.2015 в 01:20
ПалычЪ Дата: Воскресенье, 06.12.2015, 01:22 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 106
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
спасибо ребята ...всем плюс в репу.все работает
 
Ответить
Сообщениеспасибо ребята ...всем плюс в репу.все работает

Автор - ПалычЪ
Дата добавления - 06.12.2015 в 01:22
ПалычЪ Дата: Воскресенье, 06.12.2015, 12:23 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 106
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Если мой макрос для выделения всё-таки подходит (ток, если на листе находится ничего лишнего кроме выделяемой таблицы), можно так:


Находится...еще 2 строки..оглавление таблицы самой..находятся эти 2-е строки аккурат над этой таблицей... пример перезалил.... и согласен сразу не то чтото пошло...(( вначале про ето не написал про эти две строки..думал это не важно при написании макроса(( а глюк пошол такой...что обрамляться стало тока в ОБЩУЮ рамку....и тока столбец B

кстати надо что б еще и порядковые номера в рамку обрамлялись слева(((
К сообщению приложен файл: 4346478-6-2-.xlsm (10.4 Kb)


Сообщение отредактировал ПалычЪ - Воскресенье, 06.12.2015, 12:57
 
Ответить
Сообщение
Если мой макрос для выделения всё-таки подходит (ток, если на листе находится ничего лишнего кроме выделяемой таблицы), можно так:


Находится...еще 2 строки..оглавление таблицы самой..находятся эти 2-е строки аккурат над этой таблицей... пример перезалил.... и согласен сразу не то чтото пошло...(( вначале про ето не написал про эти две строки..думал это не важно при написании макроса(( а глюк пошол такой...что обрамляться стало тока в ОБЩУЮ рамку....и тока столбец B

кстати надо что б еще и порядковые номера в рамку обрамлялись слева(((

Автор - ПалычЪ
Дата добавления - 06.12.2015 в 12:23
Roman777 Дата: Воскресенье, 06.12.2015, 14:41 | Сообщение № 11
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
ПалычЪ, Если Ваша таблица всё-таки начинается с ячейки A1, то можно так
[vba]
Код
Sub Обрамление2()
Dim rng As Range
Dim r_s As Long, r_e As Long, c_s As Long, c_e As Long
r_s = 1
r_e = Cells(Rows.Count, 2).End(xlUp).Row
c_s = 1
c_e = Cells(r_e, Columns.Count).End(xlToLeft).Column
Set rng = Range(Cells(r_s, c_s), Cells(r_e, c_e))
For i = 7 To 12
With rng.Borders(i)
   .Weight = xlMedium
End With
Next i
For i = r_s + 3 To r_e
  Cells(i, 1) = i - 2 - r_s
Next i
End Sub
[/vba]


Много чего не знаю!!!!
 
Ответить
СообщениеПалычЪ, Если Ваша таблица всё-таки начинается с ячейки A1, то можно так
[vba]
Код
Sub Обрамление2()
Dim rng As Range
Dim r_s As Long, r_e As Long, c_s As Long, c_e As Long
r_s = 1
r_e = Cells(Rows.Count, 2).End(xlUp).Row
c_s = 1
c_e = Cells(r_e, Columns.Count).End(xlToLeft).Column
Set rng = Range(Cells(r_s, c_s), Cells(r_e, c_e))
For i = 7 To 12
With rng.Borders(i)
   .Weight = xlMedium
End With
Next i
For i = r_s + 3 To r_e
  Cells(i, 1) = i - 2 - r_s
Next i
End Sub
[/vba]

Автор - Roman777
Дата добавления - 06.12.2015 в 14:41
ПалычЪ Дата: Воскресенье, 06.12.2015, 15:30 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 106
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Все супер!!! кое что уже сам подправил что б сместить начало порядковых номеров на 1 строку вниз
вот это
[vba]
Код
For i = r_s + 3 To r_e
Cells(i, 1) = i - 2 - r_s
Next i
End Sub
[/vba]

исправил на это
[vba]
Код
For i = r_s + 4 To r_e
Cells(i, 1) = i - 3 - r_s
Next i
[/vba]

И все гуд..Спасибо большое вам!!!
 
Ответить
СообщениеВсе супер!!! кое что уже сам подправил что б сместить начало порядковых номеров на 1 строку вниз
вот это
[vba]
Код
For i = r_s + 3 To r_e
Cells(i, 1) = i - 2 - r_s
Next i
End Sub
[/vba]

исправил на это
[vba]
Код
For i = r_s + 4 To r_e
Cells(i, 1) = i - 3 - r_s
Next i
[/vba]

И все гуд..Спасибо большое вам!!!

Автор - ПалычЪ
Дата добавления - 06.12.2015 в 15:30
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Добавление границ на динамический диапазон ячеек и его №пп (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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