Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2007 - [решено] Excel 2007, способ определить, есть ли в непустой ячейке формула

Ответить
Настройки темы
2007 - [решено] Excel 2007, способ определить, есть ли в непустой ячейке формула

Динохромный


Contributor


Сообщения: 690
Благодарности: 317


Конфигурация

Профиль | Отправить PM | Цитировать


Добрый день.
Проблема следующая. Есть расчет в excel, версия на самом деле не очень принципиальна, для определенности -2007.
Один из столбцов вычисляет значения, но в некоторых случаях значение может вбиваться вручную (формула не учитывает все параметры).
Хотел бы выделить ячейки, вычисляющие значения, либо наоборот, значение в которых вбито, используя стандартные средства без применения VBA. Т.е. ячейки с содержимым "=10*10" и "100" должны иметь разную заливку (или иное выделение), несмотря что у обоих будет одинаковое значение "100".

И вообще понять, есть ли разница между такими ячейками (вроде бы есть, т.к. на VBA cells(,).formula="100" для вбитого значения "100" и cells(,).formula="=100" для вбитого "=100", хотя кто его знает)
На данный момент пользуюсь сочетанием "ctrl+~", но очень неудобно.
Пытался решить вопрос условным форматированием, но оно работает на основании значения ячейки - неважно рассчитывается ли оно или вбито.
Пытался подобрать стандартную функцию (чтобы вбить в соседнюю ячейку), но не получилось.
Честно гуглил, правда времени нет на это, хотя по ощущением - должно быть простое и очевидное решение.

Буду благодарен даже за подсказку в направлении, где стоит поискать решение.

Отправлено: 11:10, 08-05-2013

 

Модератор


Moderator


Сообщения: 16831
Благодарности: 3245

Профиль | Сайт | Отправить PM | Цитировать


1) F5 - Выделить группу ячеек - Формулы - OK

2) Вкладка "Формулы" - Показать формулы (или используйте сочетание клавиш Ctrl + `)

-------
При заполнении сведений о конфигурации компьютера не забудь поставить флажок: отображать - "Да"
-------------------------------------------------------------------------------------------
Ассоциация VirusNet - помощь и обучение борьбе с вирусами. Некоторые вопросы загрузки в моем блоге

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:42, 08-05-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Динохромный


Contributor


Сообщения: 690
Благодарности: 317

Профиль | Отправить PM | Цитировать


okshef, спасибо. Пользовался вторым способом, а вот про первый забыл - в моем случае он более удобный, т.к. позволяет выделить цветом нужные ячейки (от "ctrl+`" уже реально в глазах рябит, тяжело вглядываться, большой шанс пропустить ячейку).
И все же это не совсем то, что я хотел - т.к. цель расчетов другая, и отвлекаться на контроль этих ячеек сильно не хочется, поэтому хотелось бы реализовать полностью автоматическое условное выделение форматирование.

Нашел способ создавать макрофункцию "=получить.ячейку(48;Лист1!A1)" и присваивать ей имя в диспетчере имен Источник, это именно то, что я хочу - но работает только на одном листе (в данном случае - "Лист1"), если листов будет 20 - нужно присваивать 20 имен Соответственно, когда таких файлов несколько, опять же не смешно.
К сожалению в Макрофункциях я мало что понимаю, да и в именах не особо...
Как вариант буду пользоваться F5, наверное самый приемлемый способ

Последний раз редактировалось a_axe, 08-05-2013 в 12:07.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:02, 08-05-2013 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить 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
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Хех, только хотел пожаловаться, что нет «ThisWorksheet» (по аналогии с «ThisWorkbook»), но вовремя вспомнил . Для ссылки на рабочий лист, который содержит вышеприведённый код, вместо:
Код: Выделить весь код
Set objTargetRange = ThisWorkbook.Worksheets.Item("Лист1").Range("D2:D20")
можно попробовать:
Код: Выделить весь код
Set objTargetRange = Me.Range("D2:D20")
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:48, 08-05-2013 | #5


Динохромный


Contributor


Сообщения: 690
Благодарности: 317

Профиль | Отправить PM | Цитировать


Iska, спасибо за развернутый и проработанный ответ. Попробовал ваш способ, и вся моя решимость не использовать VBA растворилась в воздухе)))
Строка "Set objTargetRange = Me.Range("D2:D20")" работает.
Расчет достаточно сложный, но структурированный (однотипные расчетные листы и несколько сводных расчетов - максимум 3 на файл), поэтому вашу программу легко удалось адаптировать к конкретной таблице.

Практически ничего менять не пришлось, адаптировал следующее:
1. Событием сделал изменение в документе
Код: Выделить весь код
Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
2. Проверяемым диапазоном сделал открытый лист (с рабочих листов нет ссылок на другие листы)
Код: Выделить весь код
Set objTargetRange = ActiveSheet.Range("e2:e20")
3. Добавил проверку, что открытый лист не является сводным
Код: Выделить весь код
If Not left(ActiveSheet.Name,7) = "Сводная" Then

okshef, Iska еще раз спасибо за помощь. Всегда приятно, когда кто-то другой делает за тебя твою работу , особенно когда времени катастрофически нет.

Отправлено: 09:10, 09-05-2013 | #6


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата a_axe:
Событием сделал изменение в документе »
Будьте готовы к тому, что на поиск/замену не отработает (помнится, читал, но сам не проверял сие).

Update: хотя нет, это относилось к функциям с «Application.Volatile». Кажется .

Отправлено: 12:22, 09-05-2013 | #7



Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2007 - [решено] Excel 2007, способ определить, есть ли в непустой ячейке формула

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход