Можно ли как то сделать с помощью условного форматирования или с помощью другого инструмента, чтобы если значение в ячейке больше 20 , то размер шрифта этой ячейки был равен 22, если значение в ячейке меньше 5, то размер шрифта в этой ячейке равен 10. И глобальней вопрос менять шрифт, например значение в ячейке больше 15, то шрифт Arial, а если меньше то Calibri
Размер шрифта можно изменить наверное только макросом. Условным форматированием Вы можете только сделать жирный, пунктирный или подчеркнутый текст или цвет поменять.
Что значит "дать"? )) Написать, может быть? Скопируйте в модуль листа. Контролируется диапазон В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
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
Select Case Target.Value
Case > 20
.Size = 22
Case < 5
.Size = 10
End Select
If Target.Value > 15 Then
.Name = "Arial"
Else
.Name = "Calibri"
End If
End With
End If
End Sub
И о погоде. ((с) С.М.) На улице дождь и мне тоже делать нечего:
Код
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
Юрий М написал: нет понятия Target - целевой ячейки
для меня это головоломка... до таких знаний я еще не добрался и не понимаю, как обойти это. Можете указать, где почитать про это хотя бы? А лучше на примере, как же это сделать =) Благодарю.
Упс. прошу прощения, набросал простейший пример, уже с вашим кодом. Суть, Ячейки на листе "ИТОГИ" вручную не меняются, они рассчитываются формулой, а вот данные для расчета находятся на листе "Исходные" (в моем случае на лист "ИТОГИ" данные подтягиваются с 5 различных листов). Но для листа ИТОГИ как раз и хотелось бы применять макрос, который меняет размер шрифта в зависимости от значения в ячейках.
P.S. Пока писал, начал догадываться, что можно сделать макрос для изменения размера на интересующем листе, но при изменении одного из 5 других листов. =) Единственное НО - на других пяти листах данные вводятся через форму, т.е. ячейки руками тоже никто не изменяет =)
Юрий М, не дошло до меня, что макрос используют на целевой странице, а действие выполняется на другой Ну раз с примером, тогда можно и так)) Код вставляем в ЭтаКнига
Код
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
Попробовал, работает, чуть дописал код. Но работает странно, посмотрите. Изменяет размер только в одной ячейке из двух! Поменяйте на листе "Исходные" любой "0" на другое число.
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 вписать число, а при этом формат ячеек стоит "Общий" или "числовой". Если формат текстовый, все ок.
Андрей Прокофьев написал: У меня вылезает ошибка Run-time error 9 по строке
Дайте угадаю, вы ставите точку останова, смотрите поведение макроса, потом жмете ресет? Если да, то объявленный массив a теперь уже не массив a, там вообще ничего, мы почистили всё. Эту же ошибку будет выдавать, когда изменив что либо в коде не так - нажали ресет, мы не дойдем до пункта
Код
a = b
где массиву a мы должны были бы присвоить значения массива b
Цитата
Андрей Прокофьев написал: А вот как ее заново формировать после каждого изменения?
Нужно снова заполнить массив a, но чтобы не закрывать\открывать каждый раз книгу, сделайте кнопку на листе и повесьте на него макрос auto_open.
Цитата
Андрей Прокофьев написал: аналогичная ошибка вылезает, если на лист "Форма данных" в столбец D вписать число
У меня никаких проблем, т.к. я не увидел зависимости второго листа со столбцом D первого листа.