Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1 2 След.
RSS
Изменение размера шрифта в зависимости от значения в ячейке
 
Доброго времени суток!

Можно ли как то сделать с помощью условного форматирования или с помощью другого инструмента, чтобы если значение в ячейке больше 20 , то размер шрифта этой ячейки был равен 22, если значение в ячейке меньше 5, то размер шрифта в этой ячейке равен 10. И глобальней вопрос менять шрифт, например значение в ячейке больше 15, то шрифт Arial, а если меньше то Calibri
Изменено: nikitin_im - 14 Июн 2016 11:31:51
 
Размер шрифта можно изменить наверное только макросом. Условным форматированием Вы можете только сделать жирный, пунктирный или подчеркнутый текст или цвет поменять.
 
alexthegreat, а макрос можете дать?
Изменено: nikitin_im - 14 Июн 2016 12:07:33
 
запишите макрорекордером
скопируйте в модуль листа под заголовком sub worksheet_change
поменяйте ссылки с селекшн на target
Живи и дай жить..
 
Что значит "дать"? )) Написать, может быть? Скопируйте в модуль листа. Контролируется диапазон В2:В100
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("B2:B100")) Is Nothing Then
        With Target
            If .Value > 20 Then
                .Font.Size = 22
            End If
            If .Value < 5 Then
                .Font.Size = 10
            End If
            If .Value > 15 Then
                .Font.Name = "Arial"
            Else
                .Font.Name = "Calibri"
            End If
        End With
    End If
End Sub
 
Спасибо
 
Недоглядел: можно было не писать несколько раз Font: With Target.Font
Ну ладно ))
 
Постановка задачи неполная. Например какой размер шрифта должен быть если значение от 5 до 20? И какой шрифт использовать при значении 15?
Цитата
Юрий М написал:
можно было не писать несколько раз Font: With Target.Font
Мне кажется нельзя - ведь постоянно для сравнения используется .Value
Не уверен что что сработает получившееся конструкция Target.Font.Value
Не стреляйте в тапера - он играет как может.
 
Target.Font.Value, конечно, не сработает )
Я чисто про шрифт говорил, но тогда придётся каждый раз упоминать if Target...  :)
Не поймёшь, где сэкономить.
 
Сократил на 1 слово  :D
Скрытый текст
F1 творит чудеса
 
Максим Зеленский, тогда уж так (плюс два слова):
Код
Select Case Target.Value
    Case Is > 20
        .Size = 22
    Case Is < 5
        .Size = 10
End Select
Не стреляйте в тапера - он играет как может.
 
И о погоде. ((с) С.М.)
На улице дождь и мне тоже делать нечего:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("B2:B100")) Is Nothing Then
With Target.Font
.Size = Split(Switch(Target < 5, "10 Calibri", Target > 20, "22 Arial", Target > 15, "10 Arial"))(0)
.Name = Split(Switch(Target < 5, "10 Calibri", Target > 20, "22 Arial", Target > 15, "10 Arial"))(1)
End With
End If
End Sub
 
Подниму тему, т.к. тоже любопытно =)
У меня несколько другой интерес. Как сделать, чтобы этот макрос срабатывал при изменении ячейки, которая рассчитывается по какой-либо формуле?
Меняю на Private Sub Worksheet_Activate () либо на Private Sub Worksheet_Calculate(), но выдает ошибку с строках
Код
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("B2:B100")) Is Nothing Then
 
Потому что ни в Worksheet_Activate, ни в Worksheet_Calculate нет понятия Target - целевой ячейки.
 
Цитата
Юрий М написал: нет понятия Target - целевой ячейки
для меня это головоломка... до таких знаний я еще не добрался и не понимаю, как обойти это.
Можете указать, где почитать про это хотя бы? А лучше на примере, как же это сделать =)
Благодарю.
 
Цитата
Андрей Прокофьев написал: А лучше на примере
Вот тут я с Вами согласен: на примере лучше. На Вашем, разумеется )
 
Андрей Прокофьев, а чем вас не устраивает Worksheet_Change, где можно с помощью If'ов установить нужный результат?
 
Упс. прошу прощения, набросал простейший пример, уже с вашим кодом.
Суть, Ячейки на листе "ИТОГИ" вручную не меняются, они рассчитываются формулой, а вот данные для расчета находятся на листе "Исходные" (в моем случае на лист "ИТОГИ" данные подтягиваются с 5 различных листов). Но для листа ИТОГИ как раз и хотелось бы применять макрос, который меняет размер шрифта в зависимости от значения в ячейках.

P.S. Пока писал, начал догадываться, что можно сделать макрос для изменения размера на интересующем листе, но при изменении одного из 5 других листов. =)
Единственное НО - на других пяти листах данные вводятся через форму, т.е. ячейки руками тоже никто не изменяет =)
 
Цитата
Jungl написал:
а чем вас не устраивает Worksheet_Change
Цитата
Андрей Прокофьев написал:
чтобы этот макрос срабатывал при изменении ячейки, которая рассчитывается по какой-либо формуле
 
Пока не было примера:
Код
Private Sub Worksheet_Calculate()
    With Range("A1")
        If .Value > 5 Then
            .Font.Size = 10
        Else
            .Font.Size = 20
        End If
    End With
End Sub
 
Юрий М, не дошло до меня, что макрос используют на целевой странице, а действие выполняется на другой :)
Ну раз с примером, тогда можно и так))
Код вставляем в ЭтаКнига
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
        If ActiveSheet.Name <> "Исходные" Then Exit Sub
            If Not Intersect(Target, Range("B2:D4")) Is Nothing Then
                If Target.Value <> 0 Then
                a = Target.Row
                b = Target.Column
                Sheets("Итоги").Cells(a, b).Font.Size = 14
            End If
        End If
End Sub
 
Цитата
Юрий М написал: Пока не было примера:
Не работает, т.к. надо просматривать диапазон ячеек, а не одну. Ошибка по строке If .Value > 5 Then
 
Цитата
Jungl написал: Код вставляем в ЭтаКнига
Попробовал, работает, чуть дописал код.
Но работает странно, посмотрите.
Изменяет размер только в одной ячейке из двух! Поменяйте на листе "Исходные" любой "0" на другое число.
Изменено: Андрей Прокофьев - 23 Июн 2016 02:25:33
 
Цитата
Андрей Прокофьев написал: надо просматривать диапазон ячеек, а не одну
Откуда мне было знать об этом? Вы же сразу ничего не сказала - просто Calculate...
 
Цитата
Юрий М написал: Откуда мне было знать об этом?
Все верно, я для этого пример делал... не успел за Вами
 
Андрей Прокофьев, если нужно обратное, то a и b нужно переместить выше, иначе координаты ячеек пропускаются при вводе 0, т.к. выполняется else :)
Код
a = Target.Row
b = Target.Column
If Target.Value <> 0 Then
Sheets("Итоги").Cells(a, b).Font.Size = 20
Else
Sheets("Итоги").Cells(a, b).Font.Size = 11
Используйте Local window и brakepoint, очень помогают
 
Цитата
Jungl написал: Используйте Local window и brakepoint
ого! я не спец в vba, больше формулист и такого не знал! буду изучать... Спасибо.

P.S. Урезал свой файл, где все это хочу реализовать.
На листе "форма данных" вносятся данные через форму.
На листе "Факт-План по категориям" формулами собираются данные с первого листа. И именно на этом листе хочу, чтобы при изменении (<> 0) какой-либо ячейки в диапазоне D2:V31 менялся шрифт, помимо настроенного условного форматирования.

Буду очень признателен, если поможете разрешить задачу именно на этом примере.
 
Андрей Прокофьев, как вариант.
За основу было взято отсюда
 
Спасибо! Работает почти как надо. Почитал пост, откуда был взят пример. Как я понял вы объявили 2 переменные, одна из которых "а" запоминается при открытии книги и в дальнейшем сравнивается со второй "b". Если есть изменения, то срабатывает изменение размера шрифта.

Теперь я пытаюсь разобраться в другом нюансе. А что если я внес данные на лист "Форма данных", макрос сработал, а потом я взял и изменил руками уже имеющиеся данные? У меня вылезает ошибка Run-time error 9 по строке
Код
If a(i, n) <> b(i, n) Then
Опять же догадываюсь, что это из-за переменной "а" которая была сформирована при открытии книги, т.к. она уже отличается от имеющихся данных.
А вот как ее заново формировать после каждого изменения?

Я честно стараюсь разобраться и запомнить как это все работает =)

P.S. Кстати, аналогичная ошибка вылезает, если на лист "Форма данных" в столбец D вписать число, а при этом формат ячеек стоит "Общий" или "числовой". Если формат текстовый, все ок.
Изменено: vikttur - 24 Окт 2016 20:25:23
 
Цитата
Андрей Прокофьев написал:
У меня вылезает ошибка Run-time error 9 по строке
Дайте угадаю, вы ставите точку останова, смотрите поведение макроса, потом жмете ресет? :)
Если да, то объявленный массив a теперь уже не массив a, там вообще ничего, мы почистили всё.
Эту же ошибку будет выдавать, когда изменив что либо в коде не так - нажали ресет, мы не дойдем до пункта
Код
a = b
где массиву a мы должны были бы присвоить значения массива b

Цитата
Андрей Прокофьев написал:
А вот как ее заново формировать после каждого изменения?
Нужно снова заполнить массив a, но чтобы не закрывать\открывать каждый раз книгу, сделайте кнопку на листе и повесьте на него макрос auto_open.
Цитата
Андрей Прокофьев написал:
аналогичная ошибка вылезает, если на лист "Форма данных" в столбец D вписать число
У меня никаких проблем, т.к. я не увидел зависимости второго листа со столбцом D первого листа.
Страницы: 1 2 След.
Читают тему (гостей: 1)
Наверх