Страницы: 1
RSS
Если шрифт в ячейке одного цвета, то возвращается одна буква, если другого, то другая буква
 
Здравствуйте уважаемые форумчане.
Мне нужно сделать так, чтобы в зависимости от цвета шрифта срабатывали два условия (выводилась определённая буква). В файле примера я описал задачу. Скорее всего нужен код VB.
Изменено: vikttur - 23.06.2021 15:55:08
 
В модуль листа
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count = 1 Then
        If Not Intersect(Target, Range("A5:J5")) Is Nothing Then
            Select Case Target.Font.Color
            Case Range("J1").Interior.Color
                Application.EnableEvents = False
                    Target.Cells(4, 1).Value = "Д"
                Application.EnableEvents = True
            Case Range("K1").Interior.Color
                If Target.Value = 4 Then
                    Application.EnableEvents = False
                        Target.Cells(4, 1).Value = "Н"
                    Application.EnableEvents = True
                End If
            End Select
        End If
    End If
End Sub
 
Вариант.
Вредить легко, помогать трудно.
 
Буквы так и остаются, если очистить исходные значения.

Это пример. Сам файл с большим количеством таблиц. Нужна функция, чтобы можно было протягивать мышкой на нужные диапазоны, указав на образец цвета. Прописывать диапазоны в коде VB не вариант, очень трудоёмко и громоздко будет (((
Изменено: vikttur - 23.06.2021 15:55:38
 
Код
=ПО_ЦВЕТУ(A5;$J$1;$K$1)

Function ПО_ЦВЕТУ(ByVal Target As Range, ByVal rJ1 As Range, ByVal rK1 As Range) As String
    Dim s As String
    If Target.Cells.Count = 1 Then
            Select Case Target.Font.Color
            Case rJ1.Interior.Color
                s = "Д"
            Case rK1.Interior.Color
                If Target.Value = 4 Then
                    s = "Н"
                End If
            End Select
    End If
    ПО_ЦВЕТУ = s
End Function
 
Не пойму, как применить. Вернее у меня не срабатывает. Если можно, файл пример...

Получилось, спасибо.
Изменено: Алексей П - 23.06.2021 15:38:33
 
Цитата
МатросНаЗебре написал:
Function ПО_ЦВЕТУ(B
Спасибо, работает норм. Но есть небольшая проблема. Если очистить исходный диапазон от значений, то в результирующих всё равно остаются буквы Д и Н. Потому что шрифту ячейки назначен цвет образца и код выводит в результирующую соответствующую букву независимо, есть там значение или нет. Можно добавить условие, чтобы при пустой исходной, результат тоже был пустой?... Во вложении то, что получилось.  
 
Код
Function ПО_ЦВЕТУ(ByVal Target As Range, ByVal rJ1 As Range, ByVal rK1 As Range) As String
    Dim s As String
    If Target.Cells.Count = 1 Then
            Select Case Target.Font.Color
            Case rJ1.Interior.Color
                If Target.Value <> "" Then
                    s = "Д"
                End If
            Case rK1.Interior.Color
                If Target.Value = 4 Then
                    s = "Н"
                End If
            End Select
    End If
    ПО_ЦВЕТУ = s
End Function
 
Цитата
МатросНаЗебре написал:
Function ПО_ЦВЕТУ
Супер, спасибо. Работает как надо!
 
Ещё вопрос по теме. Можно ли в функцию добавить, чтобы любые другие значения или символы из исходных копировались как есть в результирующий диапазон? Т.е. первый вариант с Д и Н в приоритете, потом всё остальное. Файл примера во вложении.
 
Код
Function ПО_ЦВЕТУ(ByVal Target As Range, ByVal rJ1 As Range, ByVal rK1 As Range) As String
    Dim s As String
    If Target.Cells.Count = 1 Then
        s = Target.Value
        Select Case Target.Font.Color
        Case rJ1.Interior.Color
                s = "Д"
        Case rK1.Interior.Color
            If Target.Value = 4 Then
                s = "Н"
            End If
        End Select
    End If
    ПО_ЦВЕТУ = s
End Function
 
Нет слов! Спасибо мил человек. То, что я хотел. Единственное, добавил строчку "Application.Volatile True", чтобы срабатывало сразу при любом изменении на листе, либо по F9.
 
А можно ещё немного подпилить? Не выводить в результат "8" того же цвета, что и "4" (которая "Н").
 
Так?
Вредить легко, помогать трудно.
 
Цитата
nbaengineer написал:
Так?
Не совсем. Опишу функционал по пунктам. Стал править свой файл и понял, нужно функциональность немного изменить.
Должно работать так (адресация немного изменил, как во вложенном файле примере ниже):
1. По образцу J1, из исходной (A5) при вводе любой цифры в результат (A8) должна возвращаться буква "Д".
2. По образцу J2, из исходной (A5) при вводе цифры "4" в результат (A8) должна возвращаться буква "Н".
3. Любые другие значения по образцу J2 игнорируются, т.е. не выводятся совсем (пусто).
4. Всё остальные значения (цифры и символы) переносятся как есть.
5. Формат вывода в результирующие выглядит так: все цифры, которые не подпадают под первые 3 условия, отображаются как Я(значение), т.е. например Я2, Я7, Я8. Применяется исключительно к цифрам, любые другие символы переносятся как есть.
Этот должно выглядеть, как если бы в ячейке был задан пользовательский формат: ЯОсновной;[Красный]-Основной;
К сожалению он не применим в данном случае к результирующим ячейкам штатным образом (не реагирует на него). Для наглядности пункта 5, прикрепил файл, там немного другой код, работает не совсем как надо. Мне его также подсказали на этом форуме.
 
Цитата
Алексей П написал:
Опишу функционал по пунктам
идея правильная. с этого и нужно было начинать.
теперь главное чтобы описание функционала не противоречило правилам формальной логики:
вы пишете:
(A5) при вводе любой цифры в результат (A8) должна возвращаться буква "Д".
а потом
(A5) при вводе цифры "4" в результат (A8) должна возвращаться буква "Н"
4 не относится к цифрам???  п.1 и 2 не противоречат друг другу?
потом:
Всё остальные значения (цифры и символы) переносятся как есть!!!
при вводе ЛЮБОЙ ЦИФРЫ в А8 пишем Д, при вводе ОСТАЛЬНЫХ ЦИФР и символов - переносим как есть!!! - это нормально, по вашему?
обьясните, пожалуйста, чем ЛЮБЫЕ цифры отличаются от ОСТАЛЬНЫХ?
Изменено: Ігор Гончаренко - 24.06.2021 11:06:14
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
(A5) при вводе любой цифры в результат (A8) должна возвращаться буква "Д"
Противоречия нет. Понимаю, что я в голове вижу картину, которую хочу получить, но другим это совсем не очевидно. Там идёт взаимодействие с цветом. Т.е. 4 с цветом по образцу обрабатывается, остальное с таким цветом отбрасывается. Что касается буквы Д, то там свой образец цвета и любая цифра с этим цветом возвращает Д. Старался максимально понятно описать, что мне нужно.
Код от МатросНаЗебре почти идеально работает для моих условий, но его нужно немного модифицировать.
Страницы: 1
Наверх