Excel vba есть ли формула

Хитрости »

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


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

Начиная с версий 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
ссылки
статистика

 
 

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 ОГРОМНОЕ ОЧЕРЕДНОЕ СПАСИБО!  

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

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

oleggy

7 / 7 / 0

Регистрация: 14.03.2013

Сообщений: 231

1

Функция проверки наличия формулы в ячейке

06.05.2014, 07:13. Показов 7121. Ответов 5

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Добрый день.
Возникла задача написать функцию проверки наличия формулы в ячейке. Т.е. адрес проверяемой ячейки передается в функцию, а функция в свою очередь возвращает ИСТИНА или ЛОЖЬ.
Так и не нашел как это реализовать с помощью стандартных функций (может ткнете носом?)
Написал такой код:

Visual Basic
1
2
3
4
5
6
7
Function ФОРМУЛА_В_ЯЧЕЙКЕ(ByVal cell As Range) As Boolean ' возвращает True если ячейка содержит формулу
 
x = cell.Address
' Проверяем, равен ли первый левый знак, записанный в ячейке, знаку равно
ФОРМУЛА_В_ЯЧЕЙКЕ = (Left(x, 1) = "=")
 
End Function

Но функция возвращает всегда ЛОЖЬ. Может подскажете где я в основах допустил ошибку.
Главное я ранее пользовательских функций не писал и не могу понять как проверить ее выполнение по шагам?
Жму F8 внутри функции но в режим отладки не входит..



0



Апострофф

Заблокирован

06.05.2014, 07:38

2

Visual Basic
1
ФОРМУЛА_В_ЯЧЕЙКЕ = (Left(cell.Formula, 1) = "=")

Цитата
Сообщение от oleggy
Посмотреть сообщение

Жму F8 внутри функции но в режим отладки не входит..

Ф-ию (тем более с параметрами) надо вызывать из другой процедуры, например так —

Visual Basic
1
2
3
sub main
msgbox ФОРМУЛА_В_ЯЧЕЙКЕ(ActiveCell)
end sub



0



oleggy

7 / 7 / 0

Регистрация: 14.03.2013

Сообщений: 231

06.05.2014, 07:54

 [ТС]

3

Разобрался в коде, нашел ошибку.

Visual Basic
1
2
3
4
5
6
Function ФОРМУЛА_В_ЯЧЕЙКЕ(cell As Range) As Boolean ' возвращает True если ячейка содержит формулу
 
' Проверяем, равен ли первый левый знак, записанный в ячейке, знаку равно
ФОРМУЛА_В_ЯЧЕЙКЕ = (Left(cell.Formula, 1) = "=")
 
End Function

Остались вопросы:
1. Вопрос остался может быть есть метод реализовать это без создания своей функции а стандартными средствами?
2. Кроме того может кто в курсе как внутри функции реализовать вычисление только для левой верхней ячейки если передача в функцию была не одного адреса а целой области адресов?
3. Как можно осуществить отладку пользовательских функций? Т.к. находясь внутри функции и нажатия F8 не переводит систему в режим отладки.

Добавлено через 1 минуту
Опа! Только написл пост а мне уже ответили. Актуалены вопросы 1 и 2.

Добавлено через 10 минут
1. Есть метод реализовать это без создания своей функции а стандартными средствами?

2. Как внутри функции реализовать вычисление только для левой верхней ячейки если передача в функцию была не одного адреса а целой области адресов?



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

06.05.2014, 15:49

4

Цитата
Сообщение от oleggy
Посмотреть сообщение

Остались вопросы

1,2) Если свойство .Formula ячейки начинается с «=», это еще не значит, что в ячейке вычисляется формула. Это может быть текст. На этот случай есть свойство диапазона .HasFormula

Visual Basic
1
2
3
4
5
Function ФОРМУЛА_В_ЯЧЕЙКЕ(cell As Range) As Boolean ' возвращает True если ячейка содержит формулу
 
ФОРМУЛА_В_ЯЧЕЙКЕ = cell(1).HasFormula
 
End Function

cell(1) — левая верхняя ячейка диапазона.
3) Поставьте точку останова на первой строке или на любом исполняемом операторе функции и вызовите пересчет функции — например, F2 Enter на ячейке с функцией.



0



Иван_777

0 / 0 / 0

Регистрация: 16.05.2018

Сообщений: 73

12.10.2018, 18:14

5

а почему тогда мой код не работает ??

Visual Basic
1
2
3
4
5
6
7
8
9
Sub ii()
For i = 7 To 350
 
If Sheets("Ôàêò").Cells(i, 4) = False Then Sheets("Ôàêò").Range(Cells(i, 4), Cells(i, 6)).Clear
 
End
Next
 
End Sub

В ячейках 7-350 формулы и значения, функция должна очищать значения, оставляя формулы, но не происходит ВООБЩЕ ничего



0



95 / 91 / 16

Регистрация: 13.04.2015

Сообщений: 545

14.10.2018, 13:14

6

Цитата
Сообщение от Иван_777
Посмотреть сообщение

но не происходит ВООБЩЕ ничего

Потому что вряд ли у вас написано ЛОЖЬ в этом диапазоне

Цитата
Сообщение от Иван_777
Посмотреть сообщение

If Sheets(«Г”Г*ГЄГІ»).Cells(i, 4) = False



0



Если у вас есть большой рабочий лист, содержащий несколько формул, и теперь вы хотите найти или проверить, содержат ли формулы формулы. Есть ли у вас какие-нибудь хорошие способы сразу найти или проверить ячейки с формулами в Excel?

Проверьте, содержат ли ячейки формулы с функцией

Найдите и выделите все ячейки с формулами с помощью команды Перейти к специальной

Выделите все ячейки с формулами с кодом VBA

Автоматически выделять все формулы во всей книге с помощью Kutools for Excel


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

По умолчанию есть простая функция, позволяющая проверить, содержит ли ячейка формулу в Excel, сделайте следующее:

1. Введите эту формулу: = ISFORMULA (A1) (A1 это ячейка, которую вы хотите проверить, является ли это формулой) в пустую ячейку, чтобы проверить, содержит ли конкретная ячейка формулу или нет, затем нажмите Enter ключ к результату, НЕПРАВДА указывает, что это не формула, ИСТИНА обозначает формулу. Смотрите скриншот:

док найти формулы 1

2. Затем вы можете перетащить дескриптор заполнения в диапазон ячеек, в которых вы хотите проверить соответствующие ячейки, если это формулы, см. Снимок экрана:

док найти формулы 2


стрелка синий правый пузырь Найдите и выделите все ячейки с формулами с помощью команды Перейти к специальной

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

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

2. Нажмите Главная > Найти и выбрать > Перейти к специальному, см. снимок экрана:

док найти формулы 3

3. В Перейти к специальному диалоговое окно, выберите Формулы и проверьте все параметры под Формулы, см. снимок экрана:

док найти формулы 4

4. Затем нажмите OK, выделены сразу все ячейки с формулами. Смотрите скриншот:

док найти формулы 5


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

Следующий код VBA может помочь вам выделить все ячейки формулы, чтобы выделить их.

1. Удерживайте ALT + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.

2. Нажмите Вставить > Модулии вставьте следующий код в Модули Окно.

Код VBA: выделить все ячейки формулами

Sub FindFormulaCells()
'Updateby Extendoffice
    Dim xRg As Range
    On Error Resume Next
    Set xRg = Application.InputBox("please select a range:", "Kutools for Excel", Application.ActiveSheet.UsedRange.Address, , , , , 8)
    If xRg Is Nothing Then Exit Sub
    Set xRg = xRg.SpecialCells(xlCellTypeFormulas, 23)
    If xRg Is Nothing Then Exit Sub
    xRg.Interior.Color = vbYellow
End Sub

3, Затем нажмите F5 ключ для запуска этого кода, а затем выберите диапазон данных, в котором вы хотите найти формулы из окна подсказки, см. снимок экрана:

док найти формулы 6

4. Нажмите OK кнопку, и все ячейки формулы были выделены желтым цветом, как показано на следующем снимке экрана:

док найти формулы 7

Внимание: В приведенном выше коде xRg.Interior.Color = vbYellow, вы можете изменить цвет выделения — желтый на свой вкус, например красный, зеленый, синий и т. д.


стрелка синий правый пузырь Автоматически выделять все формулы во всей книге с помощью Kutools for Excel

Kutools for ExcelАвтора Выделить формулы Эта функция может помочь вам автоматически выделить формулы во всей книге, а выделенные ячейки будут изменяться по мере динамического изменения ячейки.

После установки Kutools for Excel, пожалуйста, сделайте следующее :( Бесплатная загрузка Kutools for Excel Теперь )

1. Нажмите Кутулс Плюс > Дизайн рабочего листа, И новый Дизайн вкладка будет отображаться на ленте, щелкните Выделить формулы под Дизайн вкладку см. скриншоты:

2. И тогда все ячейки формулы на всех листах были выделены сразу.

Как выделить / условное форматирование ячеек с формулами в Excel?

Бесплатная загрузка Kutools for Excel Теперь


Статьи по теме:

Как выделить / условное форматирование ячеек с формулами в Excel?

Как выделить всю / целую строку при прокрутке на листе Excel?


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Проверка ячеек на наличие в них формул

Juanvl

Дата: Суббота, 21.05.2016, 15:25 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 44


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Привет. Подскажите, возможно ли чтобы при использовании функции «Если», в выбранном диапазоне, учитывались только те ячейки, которые не содержат формул? Как прописать такое условие?
Т.е. внешне все ячейки имеют цифры, но в одни ячейки формулы вбиты вручную, а в другие через формулы) Как учитывать только те ячейки, которые содержат цифры вбитые вручную? Спасибо.

 

Ответить

Juanvl

Дата: Суббота, 21.05.2016, 15:47 |
Сообщение № 2

Группа: Пользователи

Ранг: Новичок

Сообщений: 44


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Или можно условие по цвету прописать. Как учитывать, например, только красные ячейки в условии? Только красные суммировать
[moder]Файл с примером покажете?[/moder]

Сообщение отредактировал JuanvlСуббота, 21.05.2016, 16:22

 

Ответить

buchlotnik

Дата: Суббота, 21.05.2016, 15:54 |
Сообщение № 3

Группа: Заблокированные

Ранг: Участник клуба

Сообщений: 3442


Репутация:

929

±

Замечаний:
20% ±


2010, 2013, 2016 RUS / ENG

и всё же — формулы или цвет? хотя если Excel 2007 — то только макросами

 

Ответить

Juanvl

Дата: Суббота, 21.05.2016, 16:19 |
Сообщение № 4

Группа: Пользователи

Ранг: Новичок

Сообщений: 44


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

buchlotnik, да как угодно, цвет я предложил как альтернативу , т.к. и то и другое приведёт к одинаковому решению.
Файл для примера, по просьбе модератора.

 

Ответить

Manyasha

Дата: Суббота, 21.05.2016, 16:35 |
Сообщение № 5

Группа: Модераторы

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

Замечаний:
0% ±


Excel 2010, 2016

Juanvl, udf-ка:
[vba]

Код

Function суммНеФормулы(r As Range)
    For Each cell In r
        If Left(cell.Formula, 1) <> «=» Then s = s + cell.Value
    Next cell
    суммНеФормулы = s
End Function

[/vba]


ЯД: 410013299366744 WM: R193491431804

 

Ответить

Pelena

Дата: Суббота, 21.05.2016, 16:48 |
Сообщение № 6

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Для версий, начиная с Excel 2013 можно формулой

Код

=СУММПРОИЗВ(ЕНД(Ф.ТЕКСТ(B2:B12))*B2:B12)


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

buchlotnik

Дата: Суббота, 21.05.2016, 16:52 |
Сообщение № 7

Группа: Заблокированные

Ранг: Участник клуба

Сообщений: 3442


Репутация:

929

±

Замечаний:
20% ±


2010, 2013, 2016 RUS / ENG

функция как у Марины один в один B) [vba]

Код

Function SumNoFormula#(r)
    For Each c In r
        If Left(c.Formula, 1) <> «=» Then SumNoFormula = SumNoFormula + c
    Next
End Function

[/vba] ну а с 2013 можно и так:

Код

=СУММПРОИЗВ(B2:B12*(1-ЕФОРМУЛА(B2:B12)))

К сообщению приложен файл:

6706931.xlsm
(14.7 Kb)

 

Ответить

krosav4ig

Дата: Суббота, 21.05.2016, 20:45 |
Сообщение № 8

Группа: Друзья

Ранг: Старожил

Сообщений: 2346


Репутация:

989

±

Замечаний:
0% ±


Excel 2007,2010,2013

По секрету всему свету …
у Range есть свойство .HasFormula
[vba]

Код

Function SumConstants(rng As Range)
    Dim cell As Range
    For Each cell In rng.Cells
        SumConstants = SumConstants — (Not cell.HasFormula) * cell
    Next
End Function

[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

 

Ответить

buchlotnik

Дата: Суббота, 21.05.2016, 21:04 |
Сообщение № 9

Группа: Заблокированные

Ранг: Участник клуба

Сообщений: 3442


Репутация:

929

±

Замечаний:
20% ±


2010, 2013, 2016 RUS / ENG

[offtop]

Цитата

По секрету всему свету …

чё ж по секрету-то? есть такое, но я не программист и мне простительно — тупо не люблю конструкции с Not или НЕ() — не знаю почему, ретроград B) вопрос по сути — а так оно реально быстрее?

Сообщение отредактировал buchlotnikСуббота, 21.05.2016, 21:33

 

Ответить

SLAVICK

Дата: Суббота, 21.05.2016, 22:56 |
Сообщение № 10

Группа: Модераторы

Ранг: Старожил

Сообщений: 2290


Репутация:

766

±

Замечаний:
0% ±


2019

а так оно реально быстрее?

Так оно реально правильнее :D
Вот две udf:
[vba]

Код

Function isFormula(r As Range) As Boolean
    isFormula = Left(r.Formula, 1) = «=»
End Function

[/vba]
[vba]

Код

Function isFormula1(r As Range) As Boolean
    isFormula1 = r.HasFormula
End Function

[/vba]
могут показать разный результат :o

К сообщению приложен файл:

5399860.xlsm
(13.4 Kb)


Иногда все проще чем кажется с первого взгляда.

 

Ответить

МВТ

Дата: Воскресенье, 22.05.2016, 00:04 |
Сообщение № 11

Группа: Проверенные

Ранг: Обитатель

Сообщений: 476


Репутация:

137

±

Замечаний:
0% ±


Excel 2007

SLAVICK, здесь-то понятно: там текст в ячейке, а не формула. А вот почему такой вариант не работает, понять не могу :(
[vba]

Код

Function СУМ_КОНСТ(Rng As Range) As Double
    Set Rng = Rng.SpecialCells(xlCellTypeConstants, xlNumbers)
    СУМ_КОНСТ = WorksheetFunction.Sum(Rng)
End Function

[/vba]

 

Ответить

SLAVICK

Дата: Воскресенье, 22.05.2016, 09:36 |
Сообщение № 12

Группа: Модераторы

Ранг: Старожил

Сообщений: 2290


Репутация:

766

±

Замечаний:
0% ±


2019

вот почему такой вариант не работает, понять не могу

Читаем тут , или тут :D

Цитата

UDF action being ignored.
Excel will not allow a UDF written in VBA to alter anything except the value of the cell in which it is entered.
You cannotmake a VBA UDF which directly:

Alters the value or formula or properties of another cell.
Alters the formatting of the cell in which it is entered.
Alters the environment of Excel. This includes the cursor.
Uses FIND, SpecialCells, CurrentRegion, CurrentArray, GOTO, SELECT, PRECEDENTS etc : although you can use Range.End.
Note you can use FIND in Excel 2002/2003.


Иногда все проще чем кажется с первого взгляда.

 

Ответить

Juanvl

Дата: Воскресенье, 22.05.2016, 11:59 |
Сообщение № 13

Группа: Пользователи

Ранг: Новичок

Сообщений: 44


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Спасибо!!!! С чем бы к сюда ни обращался,всегда выручаете)
А для решения текущей ситуации, поищу 2013 версию, давно пора))

Сообщение отредактировал JuanvlВоскресенье, 22.05.2016, 12:52

 

Ответить

Понравилась статья? Поделить с друзьями:
  • Excel vba длина string
  • Excel vba диспетчер имени
  • Excel vba динамический массив массивов
  • Excel vba диапазон ячеек в переменную
  • Excel vba диапазон непустых ячеек