|
Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2007 - [решено] Excel 2007, способ определить, есть ли в непустой ячейке формула |
|
2007 - [решено] Excel 2007, способ определить, есть ли в непустой ячейке формула
|
Динохромный Сообщения: 703 |
Добрый день.
Проблема следующая. Есть расчет в excel, версия на самом деле не очень принципиальна, для определенности -2007. Один из столбцов вычисляет значения, но в некоторых случаях значение может вбиваться вручную (формула не учитывает все параметры). Хотел бы выделить ячейки, вычисляющие значения, либо наоборот, значение в которых вбито, используя стандартные средства без применения VBA. Т.е. ячейки с содержимым "=10*10" и "100" должны иметь разную заливку (или иное выделение), несмотря что у обоих будет одинаковое значение "100". И вообще понять, есть ли разница между такими ячейками (вроде бы есть, т.к. на VBA cells(,).formula="100" для вбитого значения "100" и cells(,).formula="=100" для вбитого "=100", хотя кто его знает) На данный момент пользуюсь сочетанием "ctrl+~", но очень неудобно. Пытался решить вопрос условным форматированием, но оно работает на основании значения ячейки - неважно рассчитывается ли оно или вбито. Пытался подобрать стандартную функцию (чтобы вбить в соседнюю ячейку), но не получилось. Честно гуглил, правда времени нет на это, хотя по ощущением - должно быть простое и очевидное решение. Буду благодарен даже за подсказку в направлении, где стоит поискать решение. |
|
Отправлено: 11:10, 08-05-2013 |
Модератор Сообщения: 16848
|
Профиль | Сайт | Отправить PM | Цитировать 1) F5 - Выделить группу ячеек - Формулы - OK
2) Вкладка "Формулы" - Показать формулы (или используйте сочетание клавиш Ctrl + `) |
------- Отправлено: 11:42, 08-05-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Динохромный Сообщения: 703
|
Профиль | Отправить PM | Цитировать okshef, спасибо. Пользовался вторым способом, а вот про первый забыл - в моем случае он более удобный, т.к. позволяет выделить цветом нужные ячейки (от "ctrl+`" уже реально в глазах рябит, тяжело вглядываться, большой шанс пропустить ячейку).
И все же это не совсем то, что я хотел - т.к. цель расчетов другая, и отвлекаться на контроль этих ячеек сильно не хочется, поэтому хотелось бы реализовать полностью автоматическое условное Нашел способ создавать макрофункцию "=получить.ячейку(48;Лист1!A1)" и присваивать ей имя в диспетчере имен Источник, это именно то, что я хочу - но работает только на одном листе (в данном случае - "Лист1"), если листов будет 20 - нужно присваивать 20 имен ![]() К сожалению в Макрофункциях я мало что понимаю, да и в именах не особо... Как вариант буду пользоваться F5, наверное самый приемлемый способ ![]() |
Последний раз редактировалось a_axe, 08-05-2013 в 12:07. Отправлено: 12:02, 08-05-2013 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать a_axe, ну, добавьте в модуль рабочего листа что-нибудь наподобие:
Private Sub Worksheet_Change(ByVal Target As Range) Dim objCell As Range For Each objCell In Target If objCell.HasFormula Then objCell.Interior.ColorIndex = 27 Else objCell.Interior.ColorIndex = 24 End If Next End Sub Цитата a_axe:
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim objCell As Range Dim objTargetRange As Range Dim objIntersectRange As Range Set objTargetRange = ThisWorkbook.Worksheets.Item("Лист1").Range("D2:D20") Set objIntersectRange = Application.Intersect(objTargetRange, Target) If Not objIntersectRange Is Nothing Then For Each objCell In objIntersectRange If objCell.HasFormula Then objCell.Interior.ColorIndex = 27 Else objCell.Interior.ColorIndex = 24 End If Next End If End Sub |
|
Отправлено: 17:42, 08-05-2013 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Хех, только хотел пожаловаться, что нет «ThisWorksheet» (по аналогии с «ThisWorkbook»), но вовремя вспомнил
![]() можно попробовать: |
|
Отправлено: 18:48, 08-05-2013 | #5 |
Динохромный Сообщения: 703
|
Профиль | Отправить PM | Цитировать Iska, спасибо за развернутый и проработанный ответ. Попробовал ваш способ, и вся моя решимость не использовать VBA растворилась в воздухе)))
Строка "Set objTargetRange = Me.Range("D2:D20")" работает. Расчет достаточно сложный, но структурированный (однотипные расчетные листы и несколько сводных расчетов - максимум 3 на файл), поэтому вашу программу легко удалось адаптировать к конкретной таблице. Практически ничего менять не пришлось, адаптировал следующее: 1. Событием сделал изменение в документе 2. Проверяемым диапазоном сделал открытый лист (с рабочих листов нет ссылок на другие листы) 3. Добавил проверку, что открытый лист не является сводным okshef, Iska еще раз спасибо за помощь. Всегда приятно, когда кто-то другой делает за тебя твою работу ![]() |
Отправлено: 09:10, 09-05-2013 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата a_axe:
Update: хотя нет, это относилось к функциям с «Application.Volatile». Кажется ![]() |
|
Отправлено: 12:22, 09-05-2013 | #7 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
2007 - excel 2007 формула для рисунка | paul_8 | Microsoft Office (Word, Excel, Outlook и т.д.) | 3 | 02-03-2013 10:11 | |
CMD/BAT - [решено] есть ли способ быстрого поиска текста в файле ? | mitiya | Скриптовые языки администрирования Windows | 2 | 27-03-2010 23:33 | |
Есть ли способ бесплатно перейти на ru домен? | XEN_STRANGER | Вебмастеру | 8 | 04-04-2009 16:28 | |
Есть ли способ пакетной установки учзаписей в outlook? | Makc2K | Автоматическая установка приложений | 2 | 19-12-2006 20:32 | |
Есть ли способ повысить скорость? | Guest | Сетевые технологии | 2 | 11-10-2004 15:57 |
|