Как определить в ячейке 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              81524 просмотров


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

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

19

19 people found this article helpful

Updated on March 14, 2021

What to Know

  • Choose a cell to make it active. Go to the Formulas tab and select More Functions > Information > TYPE.
  • Select a cell in the worksheet to enter the cell reference. Select OK to complete the function.
  • A number appears in the active cell. A 1 indicates the referenced cell contains a number; a 2 indicates text. See the chart for a complete list.

The article explains how to check the type of data in an Excel Cell using the TYPE function.

How to Check the Type of Data in an Excel Cell

Excel’s TYPE function is one of the information functions that can be used to find out information about a specific cell, worksheet, or workbook. The TYPE function reveals the type of data located in a specific cell, but it doesn’t determine whether a cell contains a formula.

Open the Dialog Box

This information covers the steps used to enter the TYPE function into cell B2 of the chart below using the function’s dialog box.

  1. Click on cell B2 to make it the active cell — the location where the function results will be displayed;
  2. Click on the Formulas tab of the ribbon menu;
  3. Choose More Functions > Information from the ribbon to open the function drop-down list;
  4. Click on TYPE in the list to bring up that function’s dialog box.

Enter the Function’s Argument

  1. Click on cell A2 in the worksheet to enter the cell reference into the dialog box;
  2. Click OK to complete the function and return to the worksheet;
  3. The number «1» should appear in cell B2 to indicate that the type of data in cell A2 is a number;
  4. When you click on cell B2, the complete function =TYPE(A2) appears in the formula bar above the worksheet.

What the Type Function Results Mean

Data Type Function Returns
a number returns a value of 1 — row 2 in the image above;
text data returns a value of 2 — row 5 in the image above;
Boolean or logical value returns a value of 4 — row 7 in the image above;
error value returns a value of 1 — row 8 in the image above;
an array returns a value of 64 — rows 9 and 10 in the image above.

In the example, cells A4 and A5 contain formulas that return a number and text data respectively. As a result, the TYPE function in those rows returns a result of 1 (number) in row 4 and 2 (text) in row 5.

Arrays and Type 64

In order to get the TYPE function to return a result of 64, indicating that the type of data is an array — the array must be entered directly into the function as the Value argument, rather than using the cell reference to the array’s location.

As shown in rows 9 and 10, the TYPE function returns the result of 64 no matter whether the array contains numbers or text.

The TYPE Function’s Syntax and Arguments

A function’s syntax refers to the layout of the function and includes the function’s name, brackets, and arguments.

The syntax for the TYPE function is:

= TYPE ( Value )

Value: (required) Can be any type of data such as a number, text or array. This argument can also be a cell reference to the location of the value in a worksheet.

Type Function Options

Options for entering the function and its arguments include:

  1. Typing the complete function: =TYPE(A2) into cell B2
  2. Selecting the function and its arguments using the TYPE function dialog box

Although it is possible to just type the complete function by hand, many people find it easier to use the dialog box to enter the function’s arguments.

Using this approach, the dialog box takes care of such things as entering the equal sign, the brackets, and, when necessary, the commas that act as separators between multiple arguments.

Thanks for letting us know!

Get the Latest Tech News Delivered Every Day

Subscribe

Иногда бывает непонятно, какие данные записаны в ячейке. Как правило путаница происходит между текстовым и числовым форматом. Главная проблема такой путаницы — не считаются формулы. Можем ли мы определить тип данных в ячейке формулой, чтобы использовать его в дальнейших вычислениях? Да можем, а поможет функция ТИП, почти неизвестная даже опытным пользователям Excel.

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

Содержание

  • Функция ТИП в Excel
  • Как определить тип данных в ячейке и использовать их в вычислениях?
  • Похожие статьи

Функция ТИП в Excel

ТИП стала доступна начиная с версии продукта 2007. Как и любая функция имеет свой синтаксис с одним аргументом и возвращает 5 чисел. 1 если данные число, 2 если текст, 4 — логическое выражение, ошибка — 16 и массив 64. Почему 16 и 64, не спрашивайте, ответа я не нашел. Наглядно, как работает функция, показано на картинке:

тип данных в ячейке

Важно отметить, что ТИП не сможет разобрать формула в ячейке или значение, она возвращает свое значение исходя из результатов вычисления формулы или соответственно значения в ячейке.

Как определить тип данных в ячейке и использовать их в вычислениях?

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

Функция ТИП в Excel, применить

Как вы видите, в столбце В я применил функцию ТИП, соответственно, когда в столбце А у нас число, функция ТИП возвращает 1. Далее уже можно использовать эти данные, как вам необходимо.

Пример прикладываю.

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

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

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

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

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

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

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

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

‘ —————

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

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

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

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

Пишем в C1:

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

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

=C1

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

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