Могу ли я использовать VBA в Excel, чтобы сохранить совокупный итог на основе буквы в ячейке, и эта ячейка будет выделена желтым цветом?

#excel #vba #conditional-statements #iteration #highlight

#excel #vba #условные операторы #итерация #выделить

Вопрос:

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

В принципе, для каждой строки в таблице я хотел бы проверить, выделена ли эта ячейка желтым цветом, и содержит ли она E, L или D, чтобы добавить 8 к общей сумме, и если она содержит W, чтобы добавить 12 к общей сумме.

Я понимаю, что нет способа использовать Excel для выполнения этой функции, но может быть способ сделать это в VBA.

У кого-нибудь есть какие-либо советы, которые я мог бы использовать, пожалуйста?

Большое спасибо

Комментарии:

1. Я бы настоятельно рекомендовал вам использовать tablesgenerator.com/text_tables чтобы отредактировать текстовую таблицу с некоторыми примерами данных в вашем вопросе. Кроме того, желтый цвет отражает некоторые данные? Или это не связано с данными?

Ответ №1:

Вы можете записать UDF ниже в модуле и использовать его как обычную функцию Excel в формуле ячейки [= Итоговая сумма (A2: H2)]. Но изменение цвета ячеек не приведет к пересчету. Нажмите Shift F9, чтобы пересчитать лист или F9 (всю книгу) Также вы можете использовать этот код в другом подразделе не как UDF

 Public Function TotalSum(rng As Range) As Double
    Application.Volatile    'recalculates with any calculation on the sheet
    
    Static a    ' static variables hold it's values between function call
    If IsEmpty(a) Then a = Split("E:8:L:8:D:8:W:12", ":")   'initially fill
    
    For Each cl In rng
        If cl.Interior.Color = vbYellow Then    ' check if color is yellow
            txt = cl.text
            For i = 0 To UBound(a) Step 2       ' check if text contains defined symbols
                If InStr(1, txt, a(i), vbTextCompare) > 0 Then
                    TotalSum = TotalSum   a(i   1)  'if yes, add correspondent value
                End If
            Next
        End If
    Next
End Function