Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Формат для УФ из ячейки на листе - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Формат для УФ из ячейки на листе
user0 Дата: Пятница, 26.07.2013, 10:35 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 152
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
Доброго дня,

Необходимо разукрасить расписание (цвет заливки и шрифта) в зависимости от того или иного условия.

  • Сначала хотел сделать через Условное Форматирование, но дело в том, что расписание будут заполнять третьи лица, которые могут случайно что-нибудь вырезать/вставить и это наплодит дубликаты в правилах УФ (а когда правил и так под 30 штук, редактировать их потом сложновато). Возможность задать диапазон в УФ проименованным диапазоном сняло бы проблему, но не судьба.
  • Если задать форматирование через макрос, то будет сложно затем изменять форматирование ячеек.
  • Возникла идея иметь коды на одной странице, форматировать их вручную, а расписание закрашивать в зависимости от того как эти коды отформатированы. Насколько сложно это реализовать?
Подскажите, пожалуйста, как грамотнее разукрасить таблицу или проблема надумана и стоит использовать обычный УФ просто надавав всем по рукам )?

диапазоны:
Schedule – данные. то, что надо закрашивать
Codes – закодированные условные обозначения
К сообщению приложен файл: ConditionalF.xlsx (98.3 Kb)
 
Ответить
СообщениеДоброго дня,

Необходимо разукрасить расписание (цвет заливки и шрифта) в зависимости от того или иного условия.

  • Сначала хотел сделать через Условное Форматирование, но дело в том, что расписание будут заполнять третьи лица, которые могут случайно что-нибудь вырезать/вставить и это наплодит дубликаты в правилах УФ (а когда правил и так под 30 штук, редактировать их потом сложновато). Возможность задать диапазон в УФ проименованным диапазоном сняло бы проблему, но не судьба.
  • Если задать форматирование через макрос, то будет сложно затем изменять форматирование ячеек.
  • Возникла идея иметь коды на одной странице, форматировать их вручную, а расписание закрашивать в зависимости от того как эти коды отформатированы. Насколько сложно это реализовать?
Подскажите, пожалуйста, как грамотнее разукрасить таблицу или проблема надумана и стоит использовать обычный УФ просто надавав всем по рукам )?

диапазоны:
Schedule – данные. то, что надо закрашивать
Codes – закодированные условные обозначения

Автор - user0
Дата добавления - 26.07.2013 в 10:35
Serge_007 Дата: Пятница, 26.07.2013, 11:06 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
просто надавав всем по рукам
Это самое лучшее решение :D

Альтернатива - отключить возможность вырезания-вставки:
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   If Application.CutCopyMode = xlCut Then
     Application.CutCopyMode = False
   End If
End Sub
[/vba]


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
просто надавав всем по рукам
Это самое лучшее решение :D

Альтернатива - отключить возможность вырезания-вставки:
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   If Application.CutCopyMode = xlCut Then
     Application.CutCopyMode = False
   End If
End Sub
[/vba]

Автор - Serge_007
Дата добавления - 26.07.2013 в 11:06
SkyPro Дата: Пятница, 26.07.2013, 11:14 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Макрос на событие открытия\закрытия книги, который будет форматировать ячейки в зависимости от значения.
Работать будет долго.
В модуль книги:
[vba]
Код
Private Sub Workbook_Open()
Dim rCell As Range
Application.ScreenUpdating = False
      For Each rCell In ThisWorkbook.Sheets(1).UsedRange 'проход по всем ячейкам используемого диапазона листа 1
          If rCell .Value > 0.1 Then ' Здесь ваши условия
              rCell .Font.Color = -16777024 ' здесь ваше форматирование
              rCell .Interior.Color = 12040191
          ' Else - второй список условий и форматирование. И так далее.
          End If
      Next
Application.ScreenUpdating = True
End Sub
[/vba]


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Пятница, 26.07.2013, 11:15
 
Ответить
СообщениеМакрос на событие открытия\закрытия книги, который будет форматировать ячейки в зависимости от значения.
Работать будет долго.
В модуль книги:
[vba]
Код
Private Sub Workbook_Open()
Dim rCell As Range
Application.ScreenUpdating = False
      For Each rCell In ThisWorkbook.Sheets(1).UsedRange 'проход по всем ячейкам используемого диапазона листа 1
          If rCell .Value > 0.1 Then ' Здесь ваши условия
              rCell .Font.Color = -16777024 ' здесь ваше форматирование
              rCell .Interior.Color = 12040191
          ' Else - второй список условий и форматирование. И так далее.
          End If
      Next
Application.ScreenUpdating = True
End Sub
[/vba]

Автор - SkyPro
Дата добавления - 26.07.2013 в 11:14
_Boroda_ Дата: Пятница, 26.07.2013, 12:21 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 16771
Репутация: 6551 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Насколько сложно это реализовать?

Да, в общем-то, совсем не сложно. Я так у себя давно уже девчонкам табель настроил.
Sokr - это динамический диапазон с раскрашенными как нужно ячейками.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Count > 1 Or Target = Empty Then Exit Sub
     r0_ = 7
     r1_ = Range("C" & Rows.Count).End(xlUp).Row
     g = Target
     If Not Intersect(Target, Range("D" & r0_, "IL" & r1_)) Is Nothing Then
         Application.ScreenUpdating = 0
         Application.EnableEvents = 0
             r_ = WorksheetFunction.Match(Target, [Sokr], 0) + [Sokr].Row - 1
             Sheet1.Range("B" & r_).Copy Target
         Application.EnableEvents = 1
         Application.ScreenUpdating = 1
     End If
On Error GoTo 0
End Sub
[/vba]
К сообщению приложен файл: ConditionalF_1.xlsb (70.0 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Насколько сложно это реализовать?

Да, в общем-то, совсем не сложно. Я так у себя давно уже девчонкам табель настроил.
Sokr - это динамический диапазон с раскрашенными как нужно ячейками.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Count > 1 Or Target = Empty Then Exit Sub
     r0_ = 7
     r1_ = Range("C" & Rows.Count).End(xlUp).Row
     g = Target
     If Not Intersect(Target, Range("D" & r0_, "IL" & r1_)) Is Nothing Then
         Application.ScreenUpdating = 0
         Application.EnableEvents = 0
             r_ = WorksheetFunction.Match(Target, [Sokr], 0) + [Sokr].Row - 1
             Sheet1.Range("B" & r_).Copy Target
         Application.EnableEvents = 1
         Application.ScreenUpdating = 1
     End If
On Error GoTo 0
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 26.07.2013 в 12:21
user0 Дата: Воскресенье, 28.07.2013, 13:40 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 152
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
Спасибо всем откликнувшимся!
Вариант от _Boroda_ самый оптимальный и удобный

Подскажите, пожалуйста, как его еще немного доработать, чтобы на листе с расписанием:
1) форматирование применялось при вставке значений из буфера в несколько ячеек.
2) форматирование снималось при удалении значения из ячейки. Возможно просто добавить в коды/сокращения пустую ячейку с форматированием по умолчаню, но у меня такой вариант не работает (
 
Ответить
СообщениеСпасибо всем откликнувшимся!
Вариант от _Boroda_ самый оптимальный и удобный

Подскажите, пожалуйста, как его еще немного доработать, чтобы на листе с расписанием:
1) форматирование применялось при вставке значений из буфера в несколько ячеек.
2) форматирование снималось при удалении значения из ячейки. Возможно просто добавить в коды/сокращения пустую ячейку с форматированием по умолчаню, но у меня такой вариант не работает (

Автор - user0
Дата добавления - 28.07.2013 в 13:40
_Boroda_ Дата: Воскресенье, 28.07.2013, 16:16 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 16771
Репутация: 6551 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
п. 2 да, это я слишком много стер в своем макросе. Конечно, так и нужно сделать
Замените третью строку на
[vba]
Код
If Target = Empty Then Target.ClearFormats: Exit Sub
If Target.Count > 1 Then Exit Sub
[/vba]
А вот п. 1 не очень понимаю зачем. Если нужно что-то кучей скопировать-вставить, так копируйте из листа Schedule. Тогда точно не будет ошибок ввода. А если копировать из другого места, то можно вставить что-то не из списка.
Если все-таки очень хочется - то сделать конечно можно, но я бы не советовал. Может быть, именно поэтому у меня дома Ваш файл виснет и ни в какую работать не хочет.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщениеп. 2 да, это я слишком много стер в своем макросе. Конечно, так и нужно сделать
Замените третью строку на
[vba]
Код
If Target = Empty Then Target.ClearFormats: Exit Sub
If Target.Count > 1 Then Exit Sub
[/vba]
А вот п. 1 не очень понимаю зачем. Если нужно что-то кучей скопировать-вставить, так копируйте из листа Schedule. Тогда точно не будет ошибок ввода. А если копировать из другого места, то можно вставить что-то не из списка.
Если все-таки очень хочется - то сделать конечно можно, но я бы не советовал. Может быть, именно поэтому у меня дома Ваш файл виснет и ни в какую работать не хочет.

Автор - _Boroda_
Дата добавления - 28.07.2013 в 16:16
user0 Дата: Воскресенье, 28.07.2013, 16:56 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 152
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
п2. файл у меня тоже зависает после замены третьей строки.. это наверное из-за того, что эксель все пустые ячейки пытается очистить, а не одну (

п1. я просто обычно копирую и вставляю как значения, без сохранения формата, для того чтобы форматирование границ ячеек (недели, месяцы) не сбилось..
 
Ответить
Сообщениеп2. файл у меня тоже зависает после замены третьей строки.. это наверное из-за того, что эксель все пустые ячейки пытается очистить, а не одну (

п1. я просто обычно копирую и вставляю как значения, без сохранения формата, для того чтобы форматирование границ ячеек (недели, месяцы) не сбилось..

Автор - user0
Дата добавления - 28.07.2013 в 16:56
_Boroda_ Дата: Воскресенье, 28.07.2013, 17:34 | Сообщение № 8
Группа: Админы
Ранг: Местный житель
Сообщений: 16771
Репутация: 6551 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Блин, я валенок.
Application.EnableEvents = 0
после Target.ClearFormats
конечно, он уходит в бесконечный цикл
Ща переделаю

Во. Вроде так
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
      On Error Resume Next
      Application.ScreenUpdating = 0
      Application.EnableEvents = 0
      If Not Intersect(Target, Range("D" & r0_, "IL" & r1_)) Is Nothing Then
          n_ = Target.Cells.Count
          r0_ = 7
          r1_ = Range("C" & Rows.Count).End(xlUp).Row
          For i = 1 To n_
              If Not Intersect(Target(i), Range("D" & r0_, "IL" & r1_)) Is Nothing Then
                  If Target(i) = Empty Then Target(i).ClearFormats: GoTo A
                  r_ = WorksheetFunction.Match(Target(i), [Sokr], 0) + [Sokr].Row - 1
                  Sheet1.Range("B" & r_).Copy Target(i)
A:
              End If
          Next i
      End If
      Application.EnableEvents = 1
      Application.ScreenUpdating = 1
      On Error GoTo 0
End Sub
[/vba]
К сообщению приложен файл: ConditionalF_5.xlsb (70.9 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеБлин, я валенок.
Application.EnableEvents = 0
после Target.ClearFormats
конечно, он уходит в бесконечный цикл
Ща переделаю

Во. Вроде так
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
      On Error Resume Next
      Application.ScreenUpdating = 0
      Application.EnableEvents = 0
      If Not Intersect(Target, Range("D" & r0_, "IL" & r1_)) Is Nothing Then
          n_ = Target.Cells.Count
          r0_ = 7
          r1_ = Range("C" & Rows.Count).End(xlUp).Row
          For i = 1 To n_
              If Not Intersect(Target(i), Range("D" & r0_, "IL" & r1_)) Is Nothing Then
                  If Target(i) = Empty Then Target(i).ClearFormats: GoTo A
                  r_ = WorksheetFunction.Match(Target(i), [Sokr], 0) + [Sokr].Row - 1
                  Sheet1.Range("B" & r_).Copy Target(i)
A:
              End If
          Next i
      End If
      Application.EnableEvents = 1
      Application.ScreenUpdating = 1
      On Error GoTo 0
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 28.07.2013 в 17:34
user0 Дата: Понедельник, 29.07.2013, 06:03 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 152
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
Огромное спасибо, теперь все работает как надо.

Маленький вопрос, а можно как-нибудь детализировать форматирование, чтобы применялся только шрифт и цвет, не затрагивая имеющихся границ ячеек (и также при удалении)? Хотя конечно можно и вручную потом границы оформить как надо.


Сообщение отредактировал user0 - Понедельник, 29.07.2013, 06:27
 
Ответить
СообщениеОгромное спасибо, теперь все работает как надо.

Маленький вопрос, а можно как-нибудь детализировать форматирование, чтобы применялся только шрифт и цвет, не затрагивая имеющихся границ ячеек (и также при удалении)? Хотя конечно можно и вручную потом границы оформить как надо.

Автор - user0
Дата добавления - 29.07.2013 в 06:03
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!