Excel определить формула или значение в ячейке

 
 

mazayZR

Пользователь

Сообщений: 950
Регистрация: 01.01.1970

:-)  
тот ли это слэн? или поддельный…

 

формулой или макросом есс-но, не взглядом :)

 

If Left(ActiveCell.Formula, 1) = «=» Then MsgBox 1

 
 

я почему-то подумал:  

  if .formula<>.text then    

  понятно, что и то и то медленно, а что лучше?  

  а как скомпилировать проект?

 

{quote}{login=слэн}{date=16.04.2008 02:40}{thema=}{post}я почему-то подумал:  

  if .formula<>.text then    

  понятно, что и то и то медленно, а что лучше?  

  а как скомпилировать проект?{/post}{/quote}  

  мне тоже всегда было интересно можно ли формулой, сам не знаю…  
что быстрее, только опытным путем, заполнить колонку и померить через таймер  
последний вопрос не понял)))

 

Application.VBE.VBProjects(1).MakeCompiledFile  

  как использовать

 

А правка — перейти — выделить — формулы?  
Или то же на ВБА  
Selection.SpecialCells(xlCellTypeFormulas, 23).Select  
все ячейки с формулами выделены, дальше что хотим, то и делаем с ними

 

вообще хотелось формулу..  
сделал пользовательскую функцию, но замедляет — страшно  

  ну да, тоже один из способов, если использовать  
intersect(range1,specialceels(xlCellTypeFormulas, 23)),  
но подозреваю, что не лучший..

 

mazayZR

Пользователь

Сообщений: 950
Регистрация: 01.01.1970

гугл вот что показывает  

http://msoffice.nm.ru/faq/macros/formulas.htm#faq140  

  If Range(«A1»).HasFormula = True Then    
  MsgBox «Ячейка содержит формулу»    
Else    
  MsgBox «Ячейка не содержит формулы»    
End If

 
 

{quote}{login=слэн}{date=16.04.2008 02:48}{thema=}{post}Application.VBE.VBProjects(1).MakeCompiledFile  

  как использовать{/post}{/quote}  

  Похоже это метод VB и в VBA он не работает, примеров не нашел , кроме вот этой ссылки, но там по англицки  

http://www.tutorials-win.com/WordVBA/Error-trying-70803/  

попроьывал приведенный код, VBA ругается

 

ZVI

Пользователь

Сообщений: 4328
Регистрация: 23.12.2012

{quote}{login=слэн}{date=16.04.2008 02:56}{thema=}{post}вообще хотелось формулу..  
сделал пользовательскую функцию, но замедляет — страшно  

  ну да, тоже один из способов, если использовать  
intersect(range1,specialceels(xlCellTypeFormulas, 23)),  
но подозреваю, что не лучший..{/post}{/quote}  
—  
Слэн, можно и формулой, но не универсально.  
Зависит от применения, которое хотелось бы уточнить.  
Например, в формуле [A2] нужно проверить, есть ли формула в [B2], и так до [A100]- это один случай, не универсальный с т.з. фиксации ссылки: строка — та же, 1 колонка справа. Другой случай (универсальный), когда в формуле условного форматирования нужно проверить, есть ли формула в ячейке, которая условно форматируется.
—  
ZVI

 
 

ZVI

Пользователь

Сообщений: 4328
Регистрация: 23.12.2012

{quote}{login=слэн}{date=16.04.2008 08:57}{thema=}{post}первый случай..{/post}{/quote}  
—  
Прилагается вполне универсальный вариант функции HasFormula(Refernce).  
—  
ZVI

 

CTRL+’    
и все формулы налицо

 

{quote}{login=gremlin}{date=17.04.2008 12:00}{thema=}{post}CTRL+’    
и все формулы налицо{/post}{/quote}1. Внимательно перечитываем треий пост этой темы:  
формулой или макросом есс-но, не взглядом :)  
2. При необходимости п. 1 повторить

 

{quote}{login=ZVI}{date=16.04.2008 10:20}{thema=Re: как определить есть ли в ячейке формула или нет}{post}{quote}{login=слэн}{date=16.04.2008 08:57}{thema=}{post}первый случай..{/post}{/quote}  
—  
Прилагается вполне универсальный вариант функции HasFormula(Refernce).  
—  
ZVI{/post}{/quote}  

  а можно поподробнее описать процесс, как это получилось,а то ни в справке, ни в гугле подробного описания использованных функций не нашел

 

юзаем гуглю и мелкософт.ком и находим справку по этим функциям

 

ZVI

Пользователь

Сообщений: 4328
Регистрация: 23.12.2012

{quote}{login=Артем}{date=17.04.2008 02:06}{thema=Re: Re: как определить есть ли в ячейке формула или нет}{post}{quote}{login=ZVI}{date=16.04.2008 10:20}{thema=Re: как определить есть ли в ячейке формула или нет}{post}{quote}{login=слэн}{date=16.04.2008 08:57}{thema=}{post}первый случай..{/post}{/quote}  
—  
Прилагается вполне универсальный вариант функции HasFormula(Refernce).  
—  
ZVI{/post}{/quote}  

  а можно поподробнее описать процесс, как это получилось,а то ни в справке, ни в гугле подробного описания использованных функций не нашел{/post}{/quote}  
—  
Использован Excel-макро-язык XLM, на котором программировали еше наши бабушки до того, как появился VBA.  
Функции, написанные таким образом, в рабочем пространстве книг и листов работают на порядок быстрее VBA-ных аналогов, так как не используется промежуточный и достаточно медленый OLE-транслятор между рабочим простанством таблиц и рабочим пространством VBA.    
Справку по функциям этого языка можно скачать отсюда:

http://download.microsoft.com/download/excel2000/xlmacro/2000/WIN98/EN-US/xlmacro.exe  

Но не без заморочек: нужно переименовать EXE в ZIP и архиватором извлечь CHM, т.к. самораспаковывается только, если установлен Excel 2000.  
Описаний правил програмирования на Excel-XLM я не видел, но о них несложно догадаться, если взглянуть на какие-нибудь примеры.  

  Вопрос Слэна, на самом деле, очень интересный и тонкий, несмотря на напрашивающееся «тыкнуть и позырить» :)  

  —  
ZVI

 

я тут поэксперементировал и..  

  c exel4 макросами — 8сек  
left(.formula)=»=» — 17сек  
.formula<>.text — 27сек  

  такой большой разницы между вторым и третьим не ожидал  

  спасибо zvi обращу внимание на листы макросов, особенно мне понравилось, что его невозможно отключить.. :) ?

 

ZVI

Пользователь

Сообщений: 4328
Регистрация: 23.12.2012

—  
Просто для истории:    
Оказалось, что Exel4-макро-формула, записанная в имени книги, работает примерно в 20 раз быстрее аналогичной фомулы листа макросов.  
В приложении приведен вариант проверки формулы в колонке справа. Использована формула в имени [ФормулаСправа]
—  
ZVI

 

{quote}{login=ZVI}{date=30.04.2008 09:48}{thema=Re: как определить есть ли в ячейке формула или нет}{post}—  
Просто для истории:    
Оказалось, что Exel4-макро-формула, записанная в имени книги, работает примерно в 20 раз быстрее аналогичной фомулы листа макросов.  
В приложении приведен вариант проверки формулы в колонке справа. Использована формула в имени [ФормулаСправа]
—  
ZVI{/post}{/quote}  

  ZVI вы ипользовали англоязычный эксель?  
А то у меня local rus ругается….  

  И как получилось задать ссылку на ячейку справа?  
Неужто напрямую R[0]C[1]?

 

зачем RэCэ..  просто мышкой тыкнуть, но деньги убрать..  
:)  

  интересно! спасибо, ZVI!

 

ZVI

Пользователь

Сообщений: 4328
Регистрация: 23.12.2012

—  
Ответ для DL.  

  ФормулаСправа из post_16496.rar  работает в русскоязычной версии, проверял в Excel 2002, 2003, 2007.  
Русскоязычная формула: =ПОЛУЧИТЬ.ЯЧЕЙКУ(48;Лист1!B2)  
Англоязычная формула:  =GET.CELL(48,Лист1!B2)  

  Используется функция, определенная именем: Named Defined Function (NDF) – придумалось такое вот название, по аналогии с VBA-ной User Defined Function (UDF).  

  Принцип простой, его удобнее объяснить на простейшем примере:  
Допустим, для каждой ячейки диапазона C1:C10 нужна NDF, которая бы вычисляла сумму двух ячеек справа. Если пользоваться Excele-ем, то нужно было бы просто в C1 написать формулу:  =D1+E1 и протянуть формулу до C10.  

  Чтобы сделать то же самое с помощью NDF, нужно:  
1. Активизировать C1  
2. Через меню Вставить — Имя — Присвоить ввести имя NDF, например: CуммаСправа  
3. В поле формула, ввести формулу, как рекомендовал Слэн: ткнуть мышкой в D1, добавить плюс и ткнуть в E1, затем аккуратно поудалять знак абсолютной ссылки $. Формула станет относительной и будет выглядеть так: =Лист1!D1+Лист1!E1  
4. Теперь если где-либо на листе1 ввести формулу (удобнее через F3) =СуммаСправа  
то в этой ячейке появится сумма двух ячеек справа.  

  Когда нужна NDF:  
1. NDF позволяют использовать формулы макроязыка Excel 4.0 XML, которые не работают в обычных формулах ячеек. Примером может служить ФормулаСправа  
2. NDF экономит память и улучшает читаемость формул.    
Пример здесь:

http://www.planetaexcel.ru/forum.php?thread_id=3377  

post_14945.rar  

  —  
ZVI

 

ZVI

Пользователь

Сообщений: 4328
Регистрация: 23.12.2012

—  
Добавлю, что формула NDF привязана к конкретному листу, для другого листа можно создать другое имя с аналогичной формулой. Возможно, что проблема DL именно в этом.  
—  
ZVI

 

DL

Гость

#28

06.05.2008 07:02:48

ZVI ОГРОМНОЕ ОЧЕРЕДНОЕ СПАСИБО!  

  Просто узнавая такие вещи руки чешутся на эксперементирование и философствованье.  

  Одна беда что что наэксперементировано и нафилосовтвовано и до нас не мало….

Хитрости »

1 Май 2011              81491 просмотров


Как узнать есть ли формула в ячейке?

Начиная с версий Excel 2013 среди стандартных функция появилась функция ЕФОРМУЛА(ISFORMULA), которая позволяет определить наличие формулы в ячейке. Единственный аргумент функции — ссылка на ячейку: =ЕФОРМУЛА(A1).
Функция возвращает ИСТИНА(TRUE), если в ячейке есть формула и ЛОЖЬ(FALSE) если в ячейке константа.
Статья была написана ранее и описанные в ней способы применимы к любой версии Excel

В более ранних версиях определить наличие формулы в ячейке можно двумя способами.

Способ первый
Создание именованной формулы(без применения VBA — Visual Basic for Application)

  • Выделяете ячейку B1
  • жметe Ctrl+F3(вызов диспетчера имен) Если по каким-то причинам Ctrl+F3 не работает, то Диспетчер имен можно вызвать через меню:
    Excel 2003:Вставка-Имя-Присвоить.
    Excel 2007-2010:вкладка Формулы-Диспетчер имен.
  • в поле имя пишем — HasFormula(или любое понравившееся название, но не противоречащее правилам создания имен в Excel. Подробнее можно прочитать в статье: Именованные диапазоны)
  • в поле Диапазон пишем формулу: =ПОЛУЧИТЬ.ЯЧЕЙКУ(48;Лист1!A1)

    если изменить первый параметр на 6 =ПОЛУЧИТЬ.ЯЧЕЙКУ(6;Лист1!A1), то результатом будет текст формулы из ячейки, которая указана в функции ПОЛУЧИТЬ.ЯЧЕЙКУ

Теперь, записав в ячейку В1: =HasFormula Вы узнаете, есть ли в ячейке А1 формула или же там константа.

Так же при помощи функций листа макросов можно получить и сам текст формулы(если в ячейке записана формула СЕГОДНЯ(), то ПОЛУЧИТЬ.ЯЧЕЙКУ вернет именно текст СЕГОДНЯ()). Для этого достаточно поменять формулу в поле Диапазон на такую:
=ПОЛУЧИТЬ.ФОРМУЛУ(Лист1!A1)

Недостатки данного метода — Вы привязаны к «левостороннему» определению формулы. Т.е. таким методом Вы можете узнать есть ли формула(или какая формула) в ячейке, расположенной слева от ячейки с именованной формулой. Для того, чтобы «узнать формулу справа» именованная формула должна выглядеть так: =ПОЛУЧИТЬ.ЯЧЕЙКУ(48;Лист1!C1);для работы формулы обязательно должны быть разрешены макросы. Чтобы не зависеть от левостороннего или правостороннего определения можно закрепить столбцы(выделяете ссылку на ячейку — А1 и нажимаете F4. Ссылка будет меняться, появятся знаки доллара $. Если знак стоит перед именем столбца — $А1 — то смещение по столбцу происходить не будет. Так же со строками)
Для ПОЛУЧИТЬ.ФОРМУЛУ есть еще недостаток: формула будет отображаться в стиле ссылок R1C1, что не совсем удобно.
.

Для работы такой функции должны быть разрешены макросы.


Способ второй
Еще один метод определения(на мой взгляд более удобный в использовании) — создание пользовательской функции:

Function IsFormula(ByVal Cell As Range, Optional ShowFormula As Boolean = False)
    'Application.Volatile True
    If ShowFormula Then
        If Cell.HasFormula Then
            IsFormula = "Формула: " & IIf(Cell.HasArray, "{" & Cell.FormulaLocal & "}", Cell.FormulaLocal)
        Else
            IsFormula = "Значение: " & Cell.Value
        End If
    Else
        IsFormula = Cell.HasFormula
    End If
End Function

Чтобы правильно использовать приведенный код, необходимо сначала ознакомиться со статьей Что такое функция пользователя(UDF)?. Вкратце: скопировать текст кода выше, перейти в редактор VBA(Alt+F11) -создать стандартный модуль(InsertModule) и в него вставить скопированный текст. После чего функцию можно будет вызвать из Диспетчера функций(Shift+F3), отыскав её в категории Определенные пользователем (User Defined Functions).

Теперь в ячейку записываем созданную формулу
=IsFormula(A2)
Данная функция имеет два аргумента:

  • Cell — ссылка на проверяемую ячейку
  • ShowFormula — необязательный аргумент. Если присвоено значение ЛОЖЬ или 0 или опущен(не указан) — то функция вернет значение ИСТИНА или ЛОЖЬ(в зависимости от наличия или отсутствия формулы в ячейке). Если присвоено значение ИСТИНА или 1, то в функция вернет не просто ИСТИНА или ЛОЖЬ, а еще и текст самой формулы.

Формулу можно так же найти в диспетчере функций в категории Определенные пользователемIsFormula и записывать её в ячейку через мастер функций.
Чтобы при изменении формулы в целевой ячейке сразу же изменялось её отображение в ячейке с данной функцией необходимо убрать апостроф(‘) перед Application.Volatile True (в файле-примере это уже сделано).

Недостатки данного метода — для работы функции обязательно должны быть разрешены макросы

Созданные функции можно так же использовать в условном форматировании для подсветки ячеек, содержащих формулы.

Скачать пример

  Tips_All_HasFormula.xls (31,0 KiB, 4 353 скачиваний)


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

Как узнать, что в ячейке формула?

Автор Василий Алибабаевич, 02.06.2008, 17:51

« назад — далее »

Задача отфильтровать ячейки с формулами.
Допустим в столбце протянута формула, затем в результате ручного труда часть результатов формулы заменяется на значения, ну или просто есть большая таблица, где-то у нее значения, а где-то подитоги. Вспомогательных столбцов справа можно делать столько сколько нужно.
Как выяснить, что в ячейке не значение, не текст, а именно формула.
Причем формула может быть, как =впр(A1;Лист2!A:C;3;0) , так и =С131+С13 .
;)


очень просто:
1. выделить диапазон
2. нажать Ctrl+G (одновременное нажатие клавишь Ctrl и G)
3. в диалоговом окне нажать «Выделить…»
4. поставить точку «формулы» (третье сверху слово в первом столбце)
5. нажать «Ок»


Есть ещё сочетание клавиш Ctrl+` (Показать формулы)


Цитата: DaniilK от 02.06.2008, 18:27
очень просто:
1. выделить диапазон
2. нажать Ctrl+G (одновременное нажатие клавишь Ctrl и G)
3. в диалоговом окне нажать «Выделить…»
4. поставить точку «формулы» (третье сверху слово в первом столбце)
5. нажать «Ок»

Этот способ я знаю.
Режим проверки формул я тоже знаю, поверьте.
Это все ручной труд, а нужно иметь какой-то способ идентифицировать ячейки с формулами автоматом — без ручных действий, для последующей сортировки автофильтром.

Я сейчас использую такой способ: Он требует создания вспомогательного столбца (справа).
Создается вспомогательный столбец, в который простым копированием копируется содержимое искомого столбца. Затем запускается автозамена: Заменить =* на «Здесь формула»  . Таким образом все ячейки с формулами меняются на текст «здесь формула», а все ячейки со значениями остаются как и были.
Вот как-бы автоматизировать процесс… ну да ладно..  ;D Т.е. есть ли такая функция, которая бы работала не с результатом ячейки, прямо с тем содержанием, которое в строке формул у этой чейки…?  ???


http://www.msoffice.nm.ru/faq/formula2.htm#faq43
Как с помощью формул определить содержит ли ячейка формулу?
В меню Вставка выберите пункт Имя, далее выберите команду Присвоить. В диалоговом окне Присвоение имени в поле Имя введите нужное имя, например ЕФОРМУЛА, а в поле Формула введите следущую формулу :
=ПОЛУЧИТЬ.ЯЧЕЙКУ(48;$A$1)
и нажмите кнопку ОК. Затем, выберите нужную ячейку и введите именованную формулу =ЕФОРМУЛА
Эта формула возвратит логическое значение ИСТИНА — если в указанной ячейке находится формула, и ЛОЖЬ — если ячейка пустая или содержит константу.


Спасибо и за пример и за ссылку — ЭТО ПРОСТО КЛАДЕЗЬ!



Цитата: DaniilK от 03.06.2008, 11:06
В меню Вставка выберите пункт Имя, далее выберите команду Присвоить. В диалоговом окне Присвоение имени в поле Имя введите нужное имя, например ЕФОРМУЛА

Если кто-то через поиск зайдёт в эту тему, то в свежем Excel такая формула есть по умолчанию. Так и называется, ЕФОРМУЛА.


  • Профессиональные приемы работы в Microsoft Excel

  • Обмен опытом

  • Microsoft Excel

  • Как узнать, что в ячейке формула?

Для версий старше Exel-2013 такого функционала (без использования VBA), к сожалению, нет.
Но вариант есть — использование макрофункций.

Не VBA, но макросы должны быть разрешены. На листе не используются, но применимы в именах.
С помощью функции ПОЛУЧИТЬ.ЯЧЕЙКУ можно определить содержимое ячейки, ее адрес, заливку…

Ctrl+F3 — мы в Диспетчере_имен. Создать имя (пусть будет «тестформула»), в поле Диапазон вписать формулу:

 =ПОЛУЧИТЬ.ЯЧЕЙКУ(6;Лист1!$A$1)

На листе в любой ячейке:

=тестформула

Если в ячейке А1 константа, результат — константа, если формула — отобразится формула. А что такое формула? Текст, который начинается знаком «=». Отлично! Можно научиться определять, что находится в А1:

=ЕСЛИ(ЛЕВСИМВ(тестформула)="=";"формула";"значение")

‘ —————

Чем это может помочь при контроле вводимых данных?

Имя у нас уже есть. Доработаем:

=ЛЕВСИМВ(ПОЛУЧИТЬ.ЯЧЕЙКУ(6;Лист1!$A$1)="="

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

Пишем в C1:

=тестформула

В проверке данных ячейки А1:

=C1

Порядок, получили замену для ЕФОРМУЛА :)

Отображение текста формул

Добрый день, читатели блога! Сегодня мы поговорим о том как при необходимости отобразить формулу в ячейке как текст. Ситуация нестандартная, но иногда может пригодиться, особенно для проверки вводимых функций.

Для пользователя Excel всегда встаёт вопрос: как же узнать где в ячейке есть формула, а где нет? 

Пойдём по порядку и опустим случай, когда мы щёлкаем на ячейку и смотрим в строчку формул, а также используем кнопку «Показать формулы». 

Способ №1

Определить есть ли формула в ячейке нам поможет функция =ЕФОРМУЛА.

Отображение текста формул

Результатом вычислений будет два значения: ИСТИНА — формула в ячейке есть; ЛОЖЬ — формулы в ячейке нет.

Ячейки с формулами найдены. Преобразовать формулу в текст поможет функция =Ф.ТЕКСТ. Она возвращает формулу в виде строки. Есть и минус: её можно использовать только с версии Excel 2013 и выше.

отображение текста формул

Способ №2

Воспользуемся гибкими возможностями именованных диапазонов в Excel. Переходим на вкладку «Формулы», в блоке кнопок «Определенные имена» нажимаем «Диспетчер имён».

Щёлкаем «Создать», далее вводим имя диапазона (например, ПОЛУЧИТЬФОРМУЛУ), область оставим «Книга», поле «Примечание» можно оставить пустым, в поле «Формула» напишем =ПОЛУЧИТЬ.ЯЧЕЙКУ(6;Лист2!C1). В примере формула находится в ячейке С1, у вас она может быть где угодно, но важно помнить одно — такой способ работает только в ячейке правее ячейки с формулой!

отображение текста формул

Имя создано, осталось ввести его в ячейку. Вводим равно и пишем начальные буквы имени, созданного выше.

отображение текста формул

Как только оно появилось сразу щелкаем по нему два раза.

отображение текста формул

Подтверждаем ввод. Видим результат.

отображение текста формул

Способ №3

Воспользуемся созданием пользовательской функции на VBA.

Добавим новый модуль (как это сделать можно прочитать ЗДЕСЬ):

  1. Вкладка «Разработчик», блок кнопок «Код», кнопка «Visual Basic»;
  2. Далее «Insert» — > «Module».

Вставляем код:

Function FFormula(ByVal Cell As Range, Optional ShowFormula As Boolean = False)
‘Application.Volatile True
If ShowFormula Then
If Cell.HasFormula Then
FFormula = «Текст формулы: » & IIf(Cell.HasArray, «{» & Cell.FormulaLocal & «}», Cell.FormulaLocal)
Else
FFormula = «Значение ячейки: » & Cell.Value
End If
Else
FFormula = Cell.HasFormula
End If
End Function

Разбор функции будет в видео ниже. Теперь нам остаётся ввести созданную функцию. Обязательно ввести через точку с запятой «Истина», чтобы активировать возможность показа формулы переменной «ShowFormula«.

отображение текста формул

Подтверждаем ввод, смотрим на результат.

отображение текста формул

Если вы знаете ещё варианты решения этой задачи — оставляйте комментарии под статьёй!

Видео:

Понравилась статья? Поделить с друзьями:
  • Excel определить формат ячейки формула
  • Excel определить тип данных ячейки excel
  • Excel определить темп роста
  • Excel определить строки больше
  • Excel определить символ по счету