Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2010, 02:11   #1
layriona
 
Регистрация: 30.04.2010
Сообщений: 6
По умолчанию Выделение ячеек с переменными индексами

У меня есть код: Код:
Код:
Sub raschet() 
    Dim n As Integer 
    Dim i As Integer 
    n = Range("B4") 
    Range("B8:B10").Select 
    Selection.NumberFormat = "### ### ### ###" 
    For i = 3 To n + 2 
        Cells(7, i) = i - 2 
        Cells(8, i) = Range("B1") 
        Cells(9, i) = Range("B2") 
        Cells(10, i) = Range("B1") - Range("B2") 
        
        ActiveCell.Offset(0, 1).Select 
        Selection.NumberFormat = "### ### ### ###" 
        ActiveCell.Value = (ActiveCell.Value * 1000) 
        
    Next      
End Sub
Я не очень понимаю, почему выделяется в цикле одна ячейка со сдвигом направо, а не все три ячейки, со сдвигом направо. Ведь изначально были выделены три ячейки: Range("B8:B10").Select.
И можно ли как-то по-другому, проще выделить все ячейки с переменным индексом, чтобы потом их все сразу отформатировать?
layriona вне форума Ответить с цитированием
Старый 14.10.2010, 08:51   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

1. Чтобы выделения ячеек смещалось, надо делать новое выделение относительно прежнего выделения, а не актичной ячейки.
Замените ActiveCell.Offset(0, 1).Select
на Selection.Offset(0, 1).Select

2. Выделять ячейки вообще не требуется.
Без выделения - проще и быстрее:
Код:
Sub raschet()
    Dim n As Integer, i As Integer
    n = Range("B4")
    Range("B8:B10").NumberFormat = "### ### ### ###"
    For i = 3 To n + 2
        Cells(7, i) = i - 2
        Cells(8, i) = Range("B1") * 1000
        Cells(9, i) = Range("B2")
        Cells(10, i) = Range("B1") - Range("B2")
    Next
    Range("c8").Resize(3, n).NumberFormat = "### ### ### ###"
    Range("c8").Resize(3, n).Interior.Color = vbGreen
End Sub
3. Можно обойтись без циклов:
Код:
Sub raschet()
    Dim n As Integer:    n = [B4]
    
    Range("c7").Resize(1, n).Value = "=column()-2"
    Range("c8").Resize(1, n).Value = "=$B$1*1000"
    Range("c9").Resize(1, n).Value = "=$B$2"
    Range("c10").Resize(1, n).Value = "=$B$1-$B$2"
    
    With Range("c8").Resize(3, n)
        .NumberFormat = "### ### ### ###" ' формат ячеек
        .Interior.Color = vbGreen ' заливка
        .Value = .Value ' если надо заменить формулы значениями
    End With
End Sub
Пример в файле: http://excelvba.ru/XL_Files/Sample__...__11-00-07.zip

Последний раз редактировалось EducatedFool; 14.10.2010 в 09:00.
EducatedFool вне форума Ответить с цитированием
Старый 14.10.2010, 09:22   #3
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Код:
Dim R As Range
  Set R = Union(Range(Cells(1, 6), Cells(2, 8)), _
  Range(Cells(5, 6), Cells(8, 10)), _
  Range(Cells(12, 1), Cells(15, 6)))
 R.NumberFormat = "### ### ### ###"
 R.Interior.Color = vbGreen
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
выделение нескольких ячеек в VBA tohdom Microsoft Office Excel 22 27.06.2012 05:48
StringGrid, выделение ячеек. robin39 Помощь студентам 17 27.05.2010 00:14
Выделение группы ячеек t0xa Microsoft Office Excel 1 19.09.2009 18:21
Выделение ячеек в опредленном столбце Busine2009 Microsoft Office Word 2 02.06.2009 21:33
Выделение цветом определённых ячеек Bbalt Microsoft Office Excel 5 13.02.2009 12:07