Страницы: 1
RSS
как определить есть ли в ячейке формула или нет
 
.
 
:-)  
тот ли это слэн? или поддельный...
 
формулой или макросом есс-но, не взглядом :)
 
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)),  
но подозреваю, что не лучший..
 
гугл вот что показывает  
http://msoffice.nm.ru/faq/macros/formulas.htm#faq140  
 
If Range("A1").HasFormula = True Then    
  MsgBox "Ячейка содержит формулу"    
Else    
  MsgBox "Ячейка не содержит формулы"    
End If
 
.HasFormula
 
{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 ругается
 
{quote}{login=слэн}{date=16.04.2008 02:56}{thema=}{post}вообще хотелось формулу..  
сделал пользовательскую функцию, но замедляет - страшно  
 
ну да, тоже один из способов, если использовать  
intersect(range1,specialceels(xlCellTypeFormulas, 23)),  
но подозреваю, что не лучший..{/post}{/quote}  
---  
Слэн, можно и формулой, но не универсально.  
Зависит от применения, которое хотелось бы уточнить.  
Например, в формуле [A2] нужно проверить, есть ли формула в [B2], и так до [A100]- это один случай, не универсальный с т.з. фиксации ссылки: строка - та же, 1 колонка справа. Другой случай (универсальный), когда в формуле условного форматирования нужно проверить, есть ли формула в ячейке, которая условно форматируется.
---  
ZVI
 
первый случай..
 
{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}  
 
а можно поподробнее описать процесс, как это получилось,а то ни в справке, ни в гугле подробного описания использованных функций не нашел
 
юзаем гуглю и мелкософт.ком и находим справку по этим функциям
 
{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 обращу внимание на листы макросов, особенно мне понравилось, что его невозможно отключить.. :) ?
 
---  
Просто для истории:    
Оказалось, что 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!
 
---  
Ответ для 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
 
---  
Добавлю, что формула NDF привязана к конкретному листу, для другого листа можно создать другое имя с аналогичной формулой. Возможно, что проблема DL именно в этом.  
---  
ZVI
 
ZVI ОГРОМНОЕ ОЧЕРЕДНОЕ СПАСИБО!  
 
Просто узнавая такие вещи руки чешутся на эксперементирование и философствованье.  
 
Одна беда что что наэксперементировано и нафилосовтвовано и до нас не мало....
Страницы: 1
Читают тему
Наверх