powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Рамка
21 сообщений из 21, страница 1 из 1
Рамка
    #33166073
Loll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как обвести ячейки в рамку от скажем "A1" до последней ячейке в которой есть хоть какая-то информация....

То есть:
A B C D E
1 2 3 4 5
2 6 7
3 8 9

Обвести надо все ячейки от A1 до E3, но они каждый раз будут разные и если в строке 4 появиться текст, то обведение должно продолжиться... а если очистить столбец E, то рамка на него распространяться не должна...
Надеюсь нормально объянила.
...
Рейтинг: 0 / 0
Рамка
    #33166133
Фотография Stepler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Loll ]....объянила.[/quot] нормально...
Есть оооочень хорошее - справочники (как на бумаге, так и в Helpe и в инете), пользуйся ими, не заставляй читать курс лекций по введению в программирование...
Не плохо см. по поиску в форумах...
Сначала тебе нада найти "пустую ячейку", затем применить "обведение" . Енто делается так: нажимаешь на запись макроса, выделяешь диапазон в котором будешь енто всё делать, Выбираешь в строке формул нужную функцию (следует учесть разницу NULL и EMPTY), закрепляешь последнюю непустую ячейку и "обводишь с нее до которой начинала...
Можно сразу писать по схеме: найти пустую ячейку в цикле в диапазоне с логикой - если не пустая-обводи, если пустая -Stop/перейди к след. диапазону...
Stepler (щёлк-щёлк!!)

Код: plaintext
 P.S.Присутствовали ли Вы, когда Вас фотографировали?  
...
Рейтинг: 0 / 0
Рамка
    #33167447
Stepler не выдержал. :)

Вот набросал. Выделяем диапазон (хоть весь лист) и запускаем.
Претензии не принимаются. (c) Victosha

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
Sub TestRange()
    Dim rng As Range
    Dim rng2 As Range
    Dim intCol As Integer
    Dim intI As Integer
    Dim intMax As Integer
    Dim intCurRec As Integer
    Dim intEmptyCol As Integer

    Set rng = Selection
    
    ' Очищаем заливку ячеек на листе.
    Cells.Interior.ColorIndex = xlNone
    
    ' Очищаем границ ячеек на листе.
    With Cells
        .Borders(xlEdgeLeft).LineStyle = xlNone
        .Borders(xlEdgeTop).LineStyle = xlNone
        .Borders(xlEdgeBottom).LineStyle = xlNone
        .Borders(xlEdgeRight).LineStyle = xlNone
        .Borders(xlInsideVertical).LineStyle = xlNone
        .Borders(xlInsideHorizontal).LineStyle = xlNone
    End With
    
    ' intCol - количество столбцов в выделенном диапазоне.
    ' intMax - максимальное число непустых строк по столбцам.
    ' intEmptyCol - количество пустых столбцов.
    intCol = rng.Columns.Count
    intMax =  0 
    intEmptyCol =  0 
    
    On Error GoTo HandleErr
    
    For intI =  1  To intCol
        ' Сравниваем данные столбца с ячейкой 65536 (пустая ячейка).
        Set rng2 = Columns(intI).ColumnDifferences(comparison:=Cells( 65536 , intI))
        intCurRec = rng2.Areas(rng2.Areas.Count).Cells.Count
        If intCurRec > intMax Then
            intMax = intCurRec
        End If
    Next intI
    
    ' По-умолчанию начало диапазона - Cells(1, 1).
    
    ' Заливка диапазона с данными желтым цветом.
    With Range(Cells( 1 ,  1 ), Cells(intMax, intCol - intEmptyCol)).Interior
        .ColorIndex =  6 
        .Pattern = xlSolid
    End With
    ' Установка границ для диапазона данных.
    With Range(Cells( 1 ,  1 ), Cells(intMax, intCol - intEmptyCol)).Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Range(Cells( 1 ,  1 ), Cells(intMax, intCol - intEmptyCol)).Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Range(Cells( 1 ,  1 ), Cells(intMax, intCol - intEmptyCol)).Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Range(Cells( 1 ,  1 ), Cells(intMax, intCol - intEmptyCol)).Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    
ExitHere:
    Exit Sub

HandleErr:
    Select Case Err.Number
        Case  1004 
            ' Считаем сколько пустых столбцов.
            intEmptyCol = intEmptyCol +  1 
            Resume Next
        Case Else
            Resume ExitHere
    End Select
End Sub

Ограничение:

1234526738913453

Выделит только первые 4 строки.
...
Рейтинг: 0 / 0
Рамка
    #33167450
Рисунок.
...
Рейтинг: 0 / 0
Рамка
    #33167524
Фотография Stepler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
' Сравниваем данные столбца с ячейкой 65536 (пустая ячейка).
Set rng2 = Columns(intI).ColumnDifferences(comparison:=Cells(65536, intI))
А если А 65536-IV65536 заняты - то "кранты"...... :)
Stepler (щёлк-щёлк!!)

Код: plaintext
 P.S.Присутствовали ли Вы, когда Вас фотографировали?  
...
Рейтинг: 0 / 0
Рамка
    #33167530
Пользователь2Претензии не принимаются. (c) Victosha

Оптимизируйте и изменяйте код исходя из ваших условий и требований.
...
Рейтинг: 0 / 0
Рамка
    #33167540
Фотография Stepler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:) :) :)
Stepler (щёлк-щёлк!!)

Код: plaintext
 P.S.Присутствовали ли Вы, когда Вас фотографировали?  
...
Рейтинг: 0 / 0
Рамка
    #33167611
Stepler:) :) :)
...
Рейтинг: 0 / 0
Рамка
    #33167638
Loll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята! Я не прогер, для меня все это такой темный лес!
Давайте упростим задачу левая верхня ячейка всегда занята и она имеет адрес A1, нижняя правая тоже всегда занята, но конкретного адреса не имеет... Все ячейки нужно выделить по периметру...
...
Рейтинг: 0 / 0
Рамка
    #33167644
LollВсе ячейки нужно выделить по периметру...
Я код для кого писал?
...
Рейтинг: 0 / 0
Рамка
    #33167789
Фотография Stepler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я та тоже не ПРОГЕР .....
Код Пользователь2 написал подробно, я даже понял :)

Stepler (щёлк-щёлк!!)

Код: plaintext
 P.S.Присутствовали ли Вы, когда Вас фотографировали?  
...
Рейтинг: 0 / 0
Рамка
    #33167842
Я же специально комментарии добавил. :)

Stepler . :)
...
Рейтинг: 0 / 0
Рамка
    #33167948
Фотография Stepler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LollРебята! Я не прогер, для меня все это такой темный лес!
Давайте упростим задачу левая верхня ячейка всегда занята и она имеет адрес A1, нижняя правая тоже всегда занята, но конкретного адреса не имеет... Все ячейки нужно выделить по периметру...
Типа как мы не справились с задачкой...
"Бездари, тогда задачу упрощаю : не 2*2, а 1+1=?"
>Пользователь2 Отвечать будешь?, а то родителей в школу вызовут....
>Loll Я понимаю, что тебе хочется решенного вопроса кем-то. Времени для решения твоих вопросов уже ушло много, а твои задачи не решены полностью.
Выводы : либо учи язык, либо ставь конкретную задачу (сначала обдумай ее), чтобы на форуме по возможности дали точный ответ, а не наметки решения задачи....
Задача по поиску и преобразованию текста.... Получил мой код? Но енто тоже направления решения, ведь надо в ентой заготовке исчо прописать вариант повторений значения поиска, частоту использования (уже перемещен и выделен текст) и т.д. А лучше вообще вставить в цикл с переменной р="Текст1", потом выполняется поиск, преобразование... после ентого р="Текст2" и на исходную по поиску....
...
Рейтинг: 0 / 0
Рамка
    #33168167
Loll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Окей! Задача целиком и полность, потому, что я устала уже сама колупаться :( Программа bCAD Exel файл его нужно привести к необходимому виду... Для этого нужно найти ячеки с определенным текстом(несколько ячеек 3-7 на в среднем) выделить жирным текстом, перенести вправо, добавить сверху пустую строку. Если текст не найден - сообщить об этом, но не обо всех, а только об одном(который я часто забываю добавить). потом все полученное обвести рамкой внутри и снаружи.
И еще добавть формулу которая будут перемножать содержимое двух столбцов, но не во все подряд, а если в строках по этим столбцам ячейки не пустые, если пустые то соответственно формулу вставлять не надо.

То есть в B и D есть числа, но только в строках 1 и 3, соответственно в C1 и С3 должна появиться формула перемножающая B и D, а C2 останеться пустой так как в B2 и D2 чисел нет.

A B C D
1
2
3

Ничего из этого я сделать не могу...
То есть вот код:

Attribute VB_Name = "Module1"
Sub Смета()
'
' Макрос5 Макрос
' Макрос записан 14.07.2005 (Konstruktor)
'

'Материалы основы
On Error GoTo V
Cells.Find(What:="Панели: Материалы основы", After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False).Activate
Selection.Font.Bold = True
Selection.Cut
ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Activate
ActiveSheet.Paste
Selection.EntireRow.Insert

' Материалы кромок
R1: Resume n
n: On Error GoTo V1
Cells.Find(What:="Панели: Материалы кромок", After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False).Activate
Selection.Font.Bold = True
Selection.Cut
ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Activate
ActiveSheet.Paste
Selection.EntireRow.Insert

' Крепеж
R2: Resume n1
n1: On Error GoTo V2
Cells.Find(What:="Крепёж", After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False).Activate
Selection.Font.Bold = True
Selection.Cut
ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Activate
ActiveSheet.Paste
Selection.EntireRow.Insert

'Вспомогательные материалы
R3: Resume n2
n2: On Error GoTo V3
Cells.Find(What:="Вспомогательные материалы", After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False).Activate
Selection.Font.Bold = True
Selection.Cut
ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Activate
ActiveSheet.Paste
Selection.EntireRow.Insert

'Профили
R4: Resume n3
n3: On Error GoTo V4
Cells.Find(What:="Профили: Материалы основы", After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False).Activate
Selection.Font.Bold = True
Selection.Cut
ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Activate
ActiveSheet.Paste
Selection.EntireRow.Insert
GoTo R5

V: MsgBox "В проекте отсутстуют Панели: Материалы основы"
GoTo R1
V1: MsgBox "В проекте отсутстуют Панели: Материалы кромок"
GoTo R2
V2: MsgBox "В проекте отсутствует Крепёж"
GoTo R3
V3: MsgBox "В проекте отсутстуют Вспомогательные материалы"
GoTo R4
V4: MsgBox "В проекте отсутстуют Профили: Материалы основы"
GoTo R5

' Удаление и перемещение ненужных столбцов
R5: Columns("A:A").Select
Selection.Delete Shift:=xlToLeft
Columns("C:D").Select
Selection.Delete Shift:=xlToLeft
Columns("F:G").Select
Selection.Delete Shift:=xlToLeft
Columns("H:H").Select
Selection.Delete Shift:=xlToLeft
Columns("C:C").Select
Selection.Cut
Columns("B:B").Select
Selection.Insert Shift:=xlToRight
Columns("D:D").Select
Selection.Cut
Columns("H:H").Select
Selection.Insert Shift:=xlToRight
Columns("D:D").Select
Selection.Delete Shift:=xlToLeft
Range("D1").Select
ActiveCell.FormulaR1C1 = "Цена"
Range("E1").Select
Cells.Select
Cells.EntireColumn.AutoFit

End Sub

Попробуйте ради интереса запустить и увидите как все глючит, то есть выводит сообщение о том что материала нет, если нет слудующего :( Кароче все стремно, криво и мне жутко обидно %(
...
Рейтинг: 0 / 0
Рамка
    #33168199
Loll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Stepler
Код редактировала с учетом твоего послания... Но толку :(
...
Рейтинг: 0 / 0
Рамка
    #33168506
Что-то вы топиком ошиблись.

Топик про поиск здесь .
...
Рейтинг: 0 / 0
Рамка
    #33169101
Фотография Stepler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользователь2Что-то вы топиком ошиблись.

Топик про поиск здесь .
>Пользователь2 Задача то одна, чтоб не бегать по топикам - уж лучше в одном...
Правда счас времени нет ответить (усё написать) горемычной, срочную новую сверхзадачу поставили - программировать презентацию.... Черт я там ни разу исчо не копался :). Им нада, чтоб по измененым данным (в момент презентации) анимационно росли и мигали данные рядов диаграммы....
Могет ты поможешь Loll - ей срочно нада ... К тому же она с Урала - там сдвижка относительно Москвы часа 2...
...
Рейтинг: 0 / 0
Рамка
    #33169118
Фотография Stepler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Loll2Stepler
Код редактировала с учетом твоего послания... Но толку :(
Протестировал твоё написание...
У мени работает как в случае, если ничаво не находит, так и в случае наличия (тока нада подредактировать переходы при нахождении, чтоб не давала сообщение что не найдено).... Могет у тебе что в настройках? Опиши, как глючит и каки сообщалки дает.
Тока я буду читать/отвечать с перерывами - у нас из-за грозы инет глючит...
...
Рейтинг: 0 / 0
Рамка
    #33170425
Loll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну как видите в выходные я отдыхала :)
2Stepler, вот именно подредактировать переходы мне и нужно... А то выдает сообщение об отсутствии текста, даже когда он есть. У меня несколько было вариантов, этот самый рабочий... Ну и рамка с формулой - темный лес :(
...
Рейтинг: 0 / 0
Рамка
    #33179372
LollКак обвести ячейки в рамку от скажем "A1" до последней ячейке в которой есть хоть какая-то информация....

То есть:
A B C D E
1 2 3 4 5
2 6 7
3 8 9

Обвести надо все ячейки от A1 до E3, но они каждый раз будут разные и если в строке 4 появиться текст, то обведение должно продолжиться... а если очистить столбец E, то рамка на него распространяться не должна...
Надеюсь нормально объянила.

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

Код: plaintext
Cells( 1 ,  1 ).CurrentRegion.Select

Или

Код: plaintext
ActiveSheet.UsedRange.Select
...
Рейтинг: 0 / 0
Рамка
    #33179556
Processor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользователь2Я думаю, что многим будет интересно узнать, что для того чтобы выделить диапазон с данными на листе, можно воспользоваться одной строчкой......с некоторыми оговорками...
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Рамка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]