#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