Расчет значений по цвету ячеек в Excel VBA - PullRequest
0 голосов
/ 09 сентября 2018

Код показывает простой средний расчет на основе значений в определенных ячейках. Эти клетки выделены тремя цветами. Цель состоит в том, чтобы принять значения в расчете, какой цвет ячейки, например, зеленый. Я знаю, что нужна команда "if", я просто не знаю, куда именно ее поместить:

enter image description here

 Dim wb As Workbook, wq As Object
 Dim ws As Worksheet, datdatum
 Dim cell As Range, cell2 As Range, col As Long


 ws.Range("H104:U104").Formula = "= Average(H34,H39,H68,H71,H83)"

1 Ответ

0 голосов
/ 09 сентября 2018

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

Циклически перебирает каждый столбец от H до U. Циклически перебирает каждую ячейку в каждом столбце.Создайте объединение зеленых ячеек и среднее объединение.Перейдите к следующему столбцу.

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

.DisplayFormat не работает в определяемой пользователем функции.

dim c as long, r as long, rng as range

with worksheets("sheet1")

    for c =8 to 21
        for r=2 to 103
            if .cells(r, c).displayformat.interior.color = vbgreen then
                if rng is nothing then
                    set rng = .cells(r, c)
                else
                    set rng = union(rng, .cells(r, c))
                end if
            end if
        next r

        if not rng is nothing then _
            .cells(104, c) = application.average(rng)
        'alternate
        'if not rng is nothing then _
            '.cells(104, c).formula = "=average(" & rng.address(0,0) & ")"
    next c

end with

Alternate,

dim c as long

with worksheets("sheet1")
    if .autofiltermode then .autofiltermode = false

    for c =8 to 21
        with .range(.cells(1, c), .cells(103, c))
            .AutoFilter Field:=1, Criteria1:=vbgreen, Operator:=xlFilterCellColor
            .cells(104, c) = application.subtotal(101, .cells)
            .AutoFilter
        end with
    next c

end with
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...