Страницы: 1
RSS
Выделение диапазонов ячеек циклом (VBA)
 
Здравствуйте, уважаемые форумчане.

Помогите, пожалуйста, решить задачу.
Имеется большая таблица, на фото я обвел что нужно, то есть имеются дни месяца, каждый день разбит на 2 колонки, и филиалы 001, 002 и т.д., разбитые на 4 строки.

Надо по нажатию кнопки сделать так, чтобы если я выделил ячейку С6, макрос начал выделять диапазоны отмеченные красным, причем каждый диапазон (1, 2 и тд.) + ячейка А (). То есть надо с каждым диапазоном выделять еще и первую ячейку (001). После первого филиала, переход ко второму и сним тоже самое - диапазон  + 002

Помогите пожалуйста с циклом, VBA совсем не знаю, не могу сделать.

Заранее спасибо.
 
Выделять... Зачем?
Ну представьте что нажали - макрос быстренько выделил все эти диапазоны и вернулся к выделению выделенного в начале. Помогло? Такой типа плацебомакрос :)
 
Код
плацебомакрос
 :D что в Вашем понимании "начал выделять"?
Изменено: Sanja - 07.10.2013 09:53:35
Согласие есть продукт при полном непротивлении сторон
 
Hugo, макрос выделяет диапазон 1А+А, делает с ним действия, переходит к 2А+А, и с ним делает действия и так далее. действия я уже написал, а вот с циклом не могу разобраться.

Действия - условное форматирование, у меня там формула. Надо прописать эту формулу к каждому дню, и чтобы первая ячейка реагировала на условие в любом дне. То есть в диапазоне "ДЕНЬ" - 1 условие, а в первой ячейке прописывается 31 условие (на каждый день)

Я у вас вчера уже спрашивал про переход в начало строки)))
Изменено: dima1208 - 07.10.2013 10:44:09
 
Для того, чтоб работать с диапазоном - его совершенно не нужно выделять. Это даже вредно :)
В общем, с Вас файл-пример и описание что нужно сделать по нажатию кнопки. Можете свой код приложить.
Но не обещаю что именно я буду делать. Надеюсь что мне не придётся :)
 
Рисунок прикольный. Подозреваю, что Ваш Excel не умеет заливать ячейки (для обозначения диапазона), а Ваши файлы не желают быть прикреплёнными.
===
Чтобы что-то сделать с ячейкой - совсем необязательно её выделять. И можно обойтись без УФ - обычная заливка.
 
Файл приложил, в нем описал что нужно. Научите пожалуйста как не выделять и как без УФ (у меня ведь условие будет)))
Кода нет дабы не сбивать вас (притом там не код, а ужос, вы смеяться будете))), помогите цикл для перебора сделать пожалуйста))))

Заранее благодарю!
 
тема закрыта
 
Ну да. На замок ее.
Решение нашли? Поделитесь с другими.
Решение не нужно? В таком случае тему следует не закрыть, а удалить.
 
решение не нашел
как удалить тему?
 
Ну раз не нашел, то дайте уж модерам решать, что удалять, а что закрывать. И фыркать не стоит, не блондинка. Вы виноваты в том, что не помогли до сих пор. Не умеете толково объяснить.
Цитата
для каждого дня условие, и в название филиала 31 условие
куда 31 условие, зачем так много и какие? Где у Вас там название филиала? Еще пишите грамотно, прекратите злоупотреблять знаками препинания. Вот для начала. При открытии файла ищет сегодняшнее число и красит под ним ячейки.
Я сам - дурнее всякого примера! ...
 
KuklP, названия филиала это 001, 002 и т.д. В общем задача такая, что при наличии хотя бы одного значения утром И вечером - весь диапазон менял цвет (4 строки х 2 столбца) + также меняла цвет первая ячейка с номером филиала при изменении цвета в любом из дней (чтобы видно было при прокрутке таблицы). Поэтому так много условий. Просто я думал реализовать это условным форматированием.

В файле в филиале 001 первого числа утром и вечером стоят единицы - значит диапазоны С6 :D 9 и А6:А9 должны сменить цвет. Значений может быть сколько угодно в этом диапазоне, единственное условие, чтобы либо УТРО либо ВЕЧЕР были пустыми, иначе сменить цвет.
Как это сделать не применяя условное форматирование?
 
Ну вот как Вас понимать? Вы пишете:
Цитата
при наличии хотя бы одного значения утром И вечером - весь диапазон менял цвет
и дальше:
Цитата
чтобы либо УТРО либо ВЕЧЕР были пустыми, иначе сменить цвет.

Код
Private Sub CommandButton1_Click()
    Dim v As Range, r&, c&, n&
    With Sheets("Лист1")
        .UsedRange.Interior.ColorIndex = xlNone
        For Each v In .[c6:bl117].SpecialCells(2, 1)
            r = v.Row: c = v.Column: n = r - 2
            If n Mod 4 <> 0 Then
                n = n - (n Mod 4): r = n + 2
            End If
            If c Mod 2 = 0 Then c = c - 1
            .Cells(r, c).Resize(4, 2).Interior.ColorIndex = 6
            .Cells(r, 1).Interior.ColorIndex = 43
        Next
    End With
End Sub
Я сам - дурнее всякого примера! ...
 
KuklP, Вы меня уж извините, что я не могу ясно мысль выразить. Попытаюсь еще раз)

Нужно закрасить диапазон, если И утром И вечером есть значения, неважно сколько. То есть например утром могут быть все 4 ячейки заполнены, может одна или две (неважно подряд или нет) -  менять цвет не надо. А если И вечером хоть 1 ячейка заполнена - сменить цвет. И наоборот, если вечером есть какие то значения, при появлении любого значения утром - сменить цвет.
Изменено: dima1208 - 15.10.2013 16:36:08
 
Код
Private Sub CommandButton1_Click()
    Dim v As Range, r&, c&
    With Sheets("Лист1")
        .UsedRange.Interior.ColorIndex = xlNone
        For c = 3 To 67 Step 2
            For r = 6 To 114 Step 4
                Set v = .Cells(r, c).Resize(4, 2)
                If Application.CountA(v.Columns(1)) And Application.CountA(v.Columns(2)) Then
                    v.Interior.ColorIndex = 6
                    .Cells(r, 1).Interior.ColorIndex = 43
                End If
            Next
        Next
    End With
End Sub
Я сам - дурнее всякого примера! ...
 
KuklP, огромное Вам спасибо за помощь!

В файле я добавил чтобы автоматически менялся цвет, в некоторых случаях не срабатывает функция. Посмотрите, пожалуйста.
Изменено: dima1208 - 15.10.2013 19:36:05
 
Код
Private Sub changecolor()
    Dim v As Range, r&, c&
    With Sheets("Лист1")
        .UsedRange.Interior.ColorIndex = xlNone
        For c = 3 To 67 Step 2
            For r = 6 To 114 Step 4
                Set v = .Cells(r, c).Resize(4, 2)
                If Application.CountA(v.Columns(1)) Then
                    If Application.CountA(v.Columns(2)) Then
                        v.Interior.ColorIndex = 6
                        .Cells(r, 1).Interior.ColorIndex = 43
                    End If
                End If
            Next
        Next
    End With
End Sub
Я сам - дурнее всякого примера! ...
 
Спасибо Вам за оперативную помощь.
 
Еще последний вопрос: если "утром" или "вечером" есть значения (неважно одно или все 4) - надо переменной присвоить значение "1". Потом сложить все значения "1" для утра и вечера в филиале и поместить сумму в ячейку. То есть в ячейку должна помещаться сумма посещений филиала в месяц утром и вечером (если утром или вечером есть хотя бы одно значение - то посещение было).

Если я правильно понимаю, можно воспользоваться этой же функцией?

Код
Private Sub Vizit_Count()
    Dim v As Range, r&, c&
    With Sheets("Лист1")
        For c = 3 To 64 Step 2
            For r = 6 To 117 Step 4
                Set v = .Cells(r, c).Resize(4, 2)
                If Application.CountA(v.Columns(1)) Then
                    If Application.CountA(v.Columns(2)) Then
                        .Cells(r, 66) = 'тут не могу понять что писать (утро)
                        .Cells(r, 67) = 'тут не могу понять что писать (вечер)
                    End If
                End If
            Next
        Next
    End With
End Sub
Страницы: 1
Читают тему
Наверх