Remkomplekty.ru

IT Новости из мира ПК
5 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Vba excel if not is nothing

Поиск на листе Excel

Поиск какого-либо значения в ячейках Excel довольно часто встречающаяся задача при программировании какого-либо макроса. Решить ее можно разными способами. Однако, в разных ситуациях использование того или иного способа может быть не оправданным. В данной статье я рассмотрю 2 наиболее распространенных способа.

Поиск перебором значений

Довольно простой в реализации способ. Например, найти в колонке «A» ячейку, содержащую «123» можно примерно так:

Минусами этого так сказать «классического» способа являются: медленная работа и громоздкость. А плюсом является его гибкость, т.к. таким способом можно реализовать сколь угодно сложные варианты поиска с различными вычислениями и т.п.

Поиск функцией Find

Гораздо быстрее обычного перебора и при этом довольно гибкий. В простейшем случае, чтобы найти в колонке A ячейку, содержащую «123» достаточно такого кода:

Вкратце опишу что делают строчки данного кода:
1-я строка: Выбираем в книге лист «Данные»;
2-я строка: Осуществляем поиск значения «123» в колонке «A», результат поиска будет в fcell;
3-я строка: Если удалось найти значение, то fcell будет содержать Range-объект, в противном случае — будет пустой, т.е. Nothing.

Полностью синтаксис оператора поиска выглядит так:

Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)

What — Строка с текстом, который ищем или любой другой тип данных Excel

After — Ячейка, после которой начать поиск. Обратите внимание, что это должна быть именно единичная ячейка, а не диапазон. Поиск начинается после этой ячейки, а не с нее. Поиск в этой ячейке произойдет только когда весь диапазон будет просмотрен и поиск начнется с начала диапазона и до этой ячейки включительно.

LookIn — Тип искомых данных. Может принимать одно из значений: xlFormulas (формулы), xlValues (значения), или xlNotes (примечания).

LookAt — Одно из значений: xlWhole (полное совпадение) или xlPart (частичное совпадение).

SearchOrder — Одно из значений: xlByRows (просматривать по строкам) или xlByColumns (просматривать по столбцам)

SearchDirection — Одно из значений: xlNext (поиск вперед) или xlPrevious (поиск назад)

MatchCase — Одно из значений: True (поиск чувствительный к регистру) или False (поиск без учета регистра)

MatchByte — Применяется при использовании мультибайтных кодировок: True (найденный мультибайтный символ должен соответствовать только мультибайтному символу) или False (найденный мультибайтный символ может соответствовать однобайтному символу)

SearchFormat — Используется вместе с FindFormat. Сначала задается значение FindFormat (например, для поиска ячеек с курсивным шрифтом так: Application.FindFormat.Font.Italic = True), а потом при использовании метода Find указываем параметр SearchFormat = True. Если при поиске не нужно учитывать формат ячеек, то нужно указать SearchFormat = False.

Чтобы продолжить поиск, можно использовать FindNext (искать «далее») или FindPrevious (искать «назад»).

Примеры поиска функцией Find

Пример 1: Найти в диапазоне «A1:A50» все ячейки с текстом «asd» и поменять их все на «qwe»

Обратите внимание : Когда поиск достигнет конца диапазона, функция продолжит искать с начала диапазона. Таким образом, если значение найденной ячейки не менять, то приведенный выше пример зациклится в бесконечном цикле. Поэтому, чтобы этого избежать (зацикливания), можно сделать следующим образом:

Пример 2: Правильный поиск значения с использованием FindNext, не приводящий к зацикливанию.

В ниже следующем примере используется другой вариант продолжения поиска — с помощью той же функции Find с параметром After. Когда найдена очередная ячейка, следующий поиск будет осуществляться уже после нее. Однако, как и с FindNext, когда будет достигнут конец диапазона, Find продолжит поиск с его начала, поэтому, чтобы не произошло зацикливания, необходимо проверять совпадение с первым результатом поиска.

Пример 3: Продолжение поиска с использованием Find с параметром After.

Следующий пример демонстрирует применение SearchFormat для поиска по формату ячейки. Для указания формата необходимо задать свойство FindFormat.

Пример 4: Найти все ячейки с шрифтом «курсив» и поменять их формат на обычный (не «курсив»)

Примечание: В данном примере намеренно не используется FindNext для поиска следующей ячейки, т.к. он не учитывает формат (статья об этом: https://support.microsoft.com/ru-ru/kb/282151)

Коротко опишу алгоритм поиска Примера 4. Первые две строки определяют последнюю строку (lLastRow) на листе и последний столбец (lLastCol). 3-я строка задает формат поиска, в данном случае, будем искать ячейки с шрифтом Italic. 4-я строка определяет область ячеек с которой будет работать программа (с ячейки A1 и до последней строки и последнего столбца). 5-я строка осуществляет поиск с использованием SearchFormat. 6-я строка — цикл пока результат поиска не будет пустым. 7-я строка — меняем шрифт на обычный (не курсив), 8-я строка продолжаем поиск после найденной ячейки.

Хочу обратить внимание на то, что в этом примере я не стал использовать «защиту от зацикливания», как в Примерах 2 и 3, т.к. шрифт меняется и после «прохождения» по всем ячейкам, больше не останется ни одной ячейки с курсивом.

Свойство FindFormat можно задавать разными способами, например, так:

Следующий пример — применение функции Find для поиска последней ячейки с заполненными данными. Использованные в Примере 4 SpecialCells находит последнюю ячейку даже если она не содержит ничего, но отформатирована или в ней раньше были данные, но были удалены.

Пример 5: Найти последнюю колонку и столбец, заполненные данными

В этом примере используется UsedRange, который так же как и SpecialCells возвращает все используемые ячейки, в т.ч. и те, что были использованы ранее, а сейчас пустые. Функция Find ищет ячейку с любым значением с конца диапазона.

При поиске можно так же использовать шаблоны, чтобы найти текст по маске, следующий пример это демонстрирует.

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

Для поиска функцией Find по маске (шаблону) можно применять символы:
* — для обозначения любого количества любых символов;
? — для обозначения одного любого символа;

— для обозначения символов *, ? и

. (т.е. чтобы искать в тексте вопросительный знак, нужно написать

?, чтобы искать именно звездочку (*), нужно написать

* и наконец, чтобы найти в тексте тильду, необходимо написать

Поиск даты с помощью Find

Если необходимо найти текущую дату или какую-то другую дату на листе Excel или в диапазоне с помощью Find, необходимо учитывать несколько нюансов:

  • Тип данных Date в VBA представляется в виде #[месяц]/[день]/[год]#, соответственно, если необходимо найти фиксированную дату, например, 01 марта 2018 года, необходимо искать #3/1/2018#, а не «01.03.2018»
  • В зависимости от формата ячеек, дата может выглядеть по-разному, поэтому, чтобы искать дату независимо от формата, поиск нужно делать не в значениях, а в формулах, т.е. использовать LookIn:=xlFormulas

Приведу несколько примеров поиска даты.

Пример 7: Найти текущую дату на листе независимо от формата отображения даты.

Пример 8: Найти 1 марта 2018 г.

Искать часть даты — сложнее. Например, чтобы найти все ячейки, где месяц «март», недостаточно искать «03» или «3». Не работает с датами так же и поиск по шаблону. Единственный вариант, который я нашел — это выбрать формат в котором месяц прописью для ячеек с датами и искать слово «март» в xlValues.

Тем не менее, можно найти, например, 1 марта независимо от года.

Пример 9: Найти 1 марта любого года.

найти, если метод ‘find’ возвращает ‘ nothing` в excel vba

Я пытаюсь найти идентификатор в списке и получить его адрес, но также справляюсь с ситуацией, если ничего не найдено.

Вот что у меня есть:

Когда я запускаю test_stuff() , я получаю ошибку в функции в строке If found1 = Nothing Then с выделенным словом Nothing . «Compile error; Invalid Use of Object». Не знаю, что и делать.

Читать еще:  Excel vba ontime

2 Ответа

Для проверки объекта range необходимо использовать is вместо = :

Объяснение:

Nothing -это неинициализированное состояние объектной переменной. Объект не может быть простой переменной, такой как число или строка, поэтому он никогда не может быть 0 или «». Это должна быть более полная структура (текстовое поле, форма, набор записей, querydef, . )

Поскольку это не простое значение, вы не можете проверить, равно ли оно чему-то. VBA имеет ключевое слово Is , которое вы используете.

Разве это решает проблему? Если да, то проверьте решенный checkbox.

Другой способ найти совпадающие значения ключа и адрес — использовать функцию Match, которая возвращает строку совпадающего значения ключа, если она найдена. Он возвращает #N/A, если не найден. Затем можно выполнить цикл по столбцу с помощью if (ISNA(Rangeaddress)).

Похожие вопросы:

У меня есть вопрос об использовании метода .find в Excel VBA, когда есть объединенная ячейка в диапазоне поиска. Вот этот код: Dim SearchCell As Range Set SearchCell =.

Sub search Set objExl = CreateObject(Excel.Application) Set objWb = objExl.Workbooks objWb.Open(C:Documents and SettingsuserDesktopbook.xls) Set strbol = objWb(C:Documents and.

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

Как мы знаем, мы используем метод Find(), чтобы найти, существует ли строка или любой тип данных Microsoft Excel в excel. (Обычно мы делаем это на множестве данных) Я хочу знать, если любой такой.

Я использую Excel VBA для поиска строки, например CCC в листе Excel. Я использовал простой код, показанный на рисунке. Однако я хочу, чтобы VBA выбрал ячейку, в которой найдено первое вхождение CCC.

Я пытаюсь использовать метод VBA Find для столбца, который использует функцию Excel Concatenate для двух других столбцов. Похоже, что он не может найти значение, которое отображается с помощью.

Я должен найти значение celda в листе Excel. Я использовал этот код vba, чтобы найти его: Set cell = Cells.Find(What:=celda, After:=ActiveCell, LookIn:= _ xlFormulas, LookAt:=xlWhole.

Когда я выполняю этот vba sub, значения, возвращаемые из find в переменных Temp1 и Search, являются содержимым ячейки, а не переменной диапазона с адресом ячейки. Код находится здесь: Sub.

В определенном диапазоне 1-column-wide в электронной таблице мне нужно использовать метод Excel 2007 VBA range.find , чтобы найти текстовую ячейку, содержащую 2-символьное длинное значение: 8.

VBA метод find кажется неудачным, когда я пытаюсь найти значение в определенном столбце. Настоящий кодекс Sub TargetR() Dim CLL As Range Dim TargetRange As Worksheet Dim R As Range Set CLL =.

Nothing? Empty? Missing? Null?

It can be confusing to know which of these terms to use. They all mean different things, and are not the same as 0 (zero) or «» (a zero-length string.)

Other than Null, they are all part of the VBA language (Visual Basic for Applications.) Null is a term used in all databases; it is the value of a field when you have not entered. Think of it as meaning ‘unknown.’ Another article deals with the common errors with Null.

The text below will make most sense if you try the examples (right) as you go.

Nothing

Nothing is the uninitialized state of an object variable. An object cannot be a simple variable such as a number or a string, so it can never be 0 or «». It must be a more comprehensive structure (a text box, form, recordset, querydef, . )

Since it is not a simple value, you cannot test if it is equal to something. VBA has an Is keyword that you use like this:

(You get an error if you use = in place of Is for objects.)

You can de-assign an object by setting it back to Nothing:

Nothing: an uninitialized object

Empty

A Variant can act as any type of data: number, string, object, array, user-defined, and so on. You can assign it a simple value:

You can assign it an object:

You can assign it an array of values:

When first declared, VBA initializes a Variant to a value that behaves as both a 0 (zero) and a «» (a zero-length string):

The value that is equal to both a zero and a zero-length string is called Empty. If you try this in the Immediate Window (Ctrl+G), both lines return True:

That’s what Empty means. Note that you cannot normally compare 0 to «», as they are different data types:

The variant is not initialized to behave as an object:

But it could be Nothing if you explicitly Set it to an object type, e.g.:

Empty: an uninitialized variant

Missing

You can write VBA functions that accept optional arguments, like this one where you must supply 2 values, and can supply a third:

In the Immediate Window (Ctrl+G), try:

A prints as numeric value 1.
B prints as the string, «hello».
C prints as Error 448 (which means ‘Named argument not found.’)

Since we passed in only 2 arguments the 3rd one is Missing. So, Missing is actually an error value, and you will get an error if you try to do anything with it. VBA provides the IsMissing() function so you can avoid the error by testing for it like this:

Since Missing is an error value, this gives the same result:

Note that *only* a Variant can be Missing. In the example above, we did not declare any data type for the 3 arguments (a, b, and c), so VBA treats them as variants. If we had declared c as any other VBA type, it would not be Missing, but would be the initial value for that type. This example will yield ‘A = 0’ when you supply no argument, because the VBA initializes the integer to zero, so it is not Missing:

Missing: an omitted argument (variant)

Проверка условий (If…Then…)

Угадай, если сможешь, и выбери, если посмеешь

Краткое руководство по VBA If Statement

Формат операторов VBA If Then

Формат оператора If Then следующий

За ключевым словом If следуют условие и ключевое слово Then

Каждый раз, когда вы используете оператор If Then, вы должны использовать соответствующий оператор End If.

Когда условие оценивается как истинное, обрабатываются все строки между If Then и End If.

Чтобы сделать ваш код более читабельным, рекомендуется делать отступы между операторами If Then и End If.

Отступ между If и End If

Отступ означает просто переместить строку кода на одну вкладку вправо. Правило большого пальца состоит в том, чтобы сделать отступ между начальным и конечным операторами, такими как:

Sub … End Sub
If Then … End If
If Then… ElseIf … Else … Endif
For … Next
Do While … Loop
Select Case … End Case

Для отступа в коде вы можете выделить строки для отступа и нажать клавишу Tab. Нажатие клавиш Shift + Tab сделает отступ кода, т.е. переместит его на одну вкладку влево.

Вы также можете использовать значки на панели инструментов Visual Basic для отступа кода.

Если вы посмотрите на примеры кода на этом сайте, вы увидите, что код имеет отступ.

Простой пример If Then

Следующий код выводит имена всех студентов с баллами более 50.

  • Василий Кочин
  • Максим Бородин
  • Дмитрий Маренин
  • Олеся Клюева
  • Евгений Яшин
Читать еще:  Excel sheet copy

Поэкспериментируйте с этим примером и проверьте значение или знак > и посмотрите, как изменились результаты.

Условия IF

Часть кода между ключевыми словами If и Then называется условием. Условие — это утверждение, которое оценивается как истинное или ложное. Они в основном используются с операторами Loops и If. При создании условия вы используете такие знаки, как «>, ,> =, 5

Вы могли заметить x = 5, как условие. Не стоит путать с х = 5, при использовании в качестве назначения.

Когда в условии используется «=», это означает, что «левая сторона равна правой стороне».

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

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

Поначалу это может показаться странным, но подумайте об этом так. Любое утверждение, начинающееся с переменной и равно, имеет следующий формат

[переменная] [=] [оценить эту часть]

Поэтому все, что находится справа от знака равенства, оценивается и результат помещается в переменную. Посмотрите на последние три строки таблицы, как:

Использование If ElseIf

Инструкция ElseIf позволяет вам выбирать из нескольких вариантов. В следующем примере мы печатаем баллы, которые находятся в диапазоне.

Важно понимать, что порядок важен. Условие If проверяется первым.

Если это правда, то печатается «Высший балл», и оператор If заканчивается.

Если оно ложно, то код переходит к следующему ElseIf и проверяет его состояние.

Давайте поменяемся местами If и ElseIf из последнего примера. Код теперь выглядит так

В этом случае мы сначала проверяем значение более 75. Мы никогда не будем печатать «Высший балл», потому что, если значение больше 85, это вызовет первый оператор if.

Чтобы избежать подобных проблем, мы должны использовать два условия. Они помогают точно указать, что вы ищете, чтобы избежать путаницы. Пример ниже показывает, как их использовать. Мы рассмотрим более многочисленные условия в разделе ниже.

Давайте расширим оригинальный код. Вы можете использовать столько операторов ElseIf, сколько захотите. Мы добавим еще несколько, чтобы учесть все наши классификации баллов.

Использование If Else

Утверждение Else используется, как ловушка для всех. Это в основном означает «если бы не было условий» или «все остальное». В предыдущем примере кода мы не включили оператор печати для метки сбоя. Мы можем добавить это, используя Else.

Так что, если это не один из других типов, то это провал.

Давайте напишем некоторый код с помощью наших примеров данных и распечатаем студента и его классификацию.

Результаты выглядят так: в столбце E — классификация баллов

Используя If And/If Or

В выражении If может быть несколько условий. Ключевые слова VBA And и Or позволяют использовать несколько условий.

Эти слова работают так же, как вы используете их на английском языке.

Давайте снова посмотрим на наши примеры данных. Теперь мы хотим напечатать всех студентов, которые набрали от 50 до 80 баллов.

Мы используем Аnd, чтобы добавить дополнительное условие. Код гласит: если оценка больше или равна 50 и меньше 75, напечатайте имя студента.

Вывести имя и фамилию в результаты:

  • Дмитрий Маренин
  • Олеся Клюева
  • Евгений Яшин

В нашем следующем примере мы хотим знать, кто из студентов сдавал историю или геометрию. Таким образом, в данном случае мы говорим, изучал ли студент «История» ИЛИ изучал ли он «Геометрия» (Ctrl+G).

  • Василий Кочин
  • Александр Грохотов
  • Дмитрий Маренин
  • Николай Куликов
  • Олеся Клюева
  • Наталия Теплых
  • Дмитрий Андреев

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

Использование IF AND

And работает следующим образом:

Что вы заметите, так это то, что And верно только тогда, когда все условия выполняются.

Использование IF OR

Ключевое слово OR работает следующим образом

Что вы заметите, так это то, что OR ложно, только когда все условия ложны.

Смешивание And и Or может затруднить чтение кода и привести к ошибкам. Использование скобок может сделать условия более понятными.

Использование IF NOT

Также есть оператор NOT. Он возвращает противоположный результат условия.

Следующие две строки кода эквивалентны.

Помещение условия в круглые скобки облегчает чтение кода

Распространенное использование Not — при проверке, был ли установлен объект. Возьмите Worksheet для примера. Здесь мы объявляем рабочий лист.

Мы хотим проверить действительность mySheet перед его использованием. Мы можем проверить, если это Nothing.

Нет способа проверить, является ли это чем-то, поскольку есть много разных способов, которым это может быть что-то. Поэтому мы используем NOT с Nothing.

Если вы находите это немного запутанным, вы можете использовать круглые скобки, как здесь

Функция IIF

VBA имеет функцию, аналогичную функции Excel If. В Excel вы часто используете функцию If следующим образом:

= ЕСЛИ (F2 =»»,»», F1 / F2)

= If (условие, действие, если ИСТИНА, действие, если ЛОЖЬ).

VBA имеет функцию IIf, которая работает так же. Давайте посмотрим на примере. В следующем коде мы используем IIf для проверки значения переменной val. Если значение больше 10, мы печатаем ИСТИНА, в противном случае мы печатаем ЛОЖЬ.

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

В следующем фрагменте кода мы будем использовать функцию IIf. Код здесь намного аккуратнее.

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

Использование Nested IIf

Вы также можете вкладывать IIf-операторы, как в Excel. Это означает использование результата одного IIf с другим. Давайте добавим еще один тип результата в наши предыдущие примеры. Теперь мы хотим напечатать «Отлично», «Удовлетворительно» или «Незачетт» для каждого студента.

Используя обычный VBA, мы сделали бы это так

Используя вложенные IIfs, мы могли бы сделать это так

Использование вложенного IIf хорошо в простых случаях, подобных этому. Код прост для чтения и, следовательно, вряд ли вызовет ошибки.

Чего нужно остерегаться

Важно понимать, что функция IIf всегда оценивает как Истинную, так и Ложную части выражения независимо от условия.

В следующем примере мы хотим разделить по баллам, когда он не равен нулю. Если он равен нулю, мы хотим вернуть ноль.

Однако, когда отметки равны нулю, код выдаст ошибку «Делить на ноль». Это потому, что он оценивает как Истинные, так и Ложные утверждения. Здесь ложное утверждение, т.е. (60 / Marks), оценивается как ошибка, потому что отметки равны нулю.

Если мы используем нормальный оператор IF, он будет запускать только соответствующую строку.

Это также означает, что если у вас есть функции для ИСТИНА и ЛОЖЬ, то обе будут выполнены. Таким образом, IIF будет запускать обе функции, даже если он использует только одно возвращаемое значение. Например:

IF против IIf

В этом случае вы можете видеть, что IIf короче для написания и аккуратнее. Однако если условия усложняются, вам лучше использовать обычное выражение If. Недостатком IIf является то, что он недостаточно известен, поэтому другие пользователи могут не понимать его так же, как и код, написанный с помощью обычного оператора if.

Кроме того, как мы обсуждали в последнем разделе, IIF всегда оценивает части ИСТИНА и ЛОЖЬ, поэтому, если вы имеете дело с большим количеством данных, оператор IF будет быстрее.

Читать еще:  Excel vba удалить лист

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

Использование Select Case

Оператор Select Case — это альтернативный способ написания статистики If с большим количеством ElseIf. Этот тип операторов вы найдете в большинстве популярных языков программирования, где он называется оператором Switch. Например, Java, C #, C ++ и Javascript имеют оператор switch.

Давайте возьмем наш пример DobClass сверху и перепишем его с помощью оператора Select Case.

Ниже приведен тот же код с использованием оператора Select Case. Главное, что вы заметите, это то, что мы используем “Case 85 to 100” rather than “marks >=85 And marks =85 And marks

Ответ на упражнение

Следующий код показывает, как выполнить вышеупомянутое упражнение.

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

If false, do nothing with current cell value

  • 1 Page 1 of 2
  • 2

In the workbook that I attached and I am trying to do something that apparently needs a VBA code to accomplish. My formula «G44» on the third worksheet ‘Rough Estimate’ works great for generating the total job phase amount that I am looking for when I manually enter the parameters for the search in «D46:F46». My problem is with the «If» statement in my formula. As I have it right now, If=false, then «» the cell is left blank, but what I want to do is, If=false, then (I would like the current value in the cell left alone and not changed).

By my research, it appears that I cannot leave the current value in the cell by using a formula, so VBA code will apparently do the trick. Unfortunately for me, I am just a beginner Excel enthusiast who is trying to make the best use of Excel for his construction business, so knowing code is not my strong suit. I am trying to learn it, but I do not have enough hours in the day and night.

I would greatly appreciate it if someone could share a code for me that would accomplish what I am trying to do. I appreciate your help ahead of time.

Files

(120.71 kB, downloaded 51 times, last: Tuesday, 4:58 pm )

Re: If false, do nothing with current cell value

I think this should be doable with a formula.

What is the expected result in G44 if false? Please explain in words how you arrive at expected result.

Re: If false, do nothing with current cell value

Expected result needs to be that the existing number(calculation) in G44 is left untouched and not recalculated with the new (different) crew size. The reason being is that I could have several job phases on one estimate and each of the job phases could have different crew sizes. When I adjust my crew size in the first worksheet, I don’t want it to effect the total of the Job Phases I have already completed that have a different crew size, otherwise, the formula works beautifully.

I think this should be doable with a formula.

What is the expected result in G44 if false? Please explain in words how you arrive at expected result.

Re: If false, do nothing with current cell value

could you use an =IF(OR( statement?

=IF(OR(D46=’Pedry Remodeling_8 Hrs_5 days’!C234,D46=FALSE),(VLOOKUP(E46,’Pedry Remodeling_8 Hrs_5 days’!$C$237:$I$290,MATCH(‘Rough Estimate’!F46,’Pedry Remodeling_8 Hrs_5 days’!$C$236:$I$236,0),0)*G46),»»)

Re: If false, do nothing with current cell value

Isn’t that (post #3) just a case of removing the IF parts of your formula? What is wrong with the result in G44 if you remove the IF?

Re: If false, do nothing with current cell value

Perhaps this UDF would help.
Put =IF(A1=1, CurrentValue(), A2+A3) in a cell, change the values of A1 (sometimes to 1, sometimes not) , A2 and A3, to see how it works.

  1. Function CurrentValue() As Variant
  2. CurrentValue = Application.Caller.Text
  3. If IsDate(CurrentValue) Then
  4. CurrentValue = CDate(CurrentValue)
  5. ElseIf IsNumeric(CurrentValue) Then
  6. CurrentValue = Val(CurrentValue)
  7. End If
  8. End Function

Re: If false, do nothing with current cell value

I started out not having the IF parts in the formula. If you look at the first worksheet of the workbook, so will see that the ‘crew’ size can be increased or decreased. I do not want the result of G44 changed when I change the crew size. Everytime I change the crew size on the first worksheet page, all the ‘Job Phase Totals’ on the Rough Estimate worksheet will change or show a blank! I don’t want that.

Isn’t that (post #3) just a case of removing the IF parts of your formula? What is wrong with the result in G44 if you remove the IF?

Re: If false, do nothing with current cell value

The formula still leaves a blank in the cell if it false with the OR statement. If I remove the double quotes at the end of the formula, then the cell produces the word ‘FALSE’. I don’t want anything in the cell except for what was already there. I am pretty convinced that a formulate with not tell a function to ‘do nothing’, unless you make a circular reference. I do not want to use a circular reference.

could you use an =IF(OR( statement?

=IF(OR(D46=’Pedry Remodeling_8 Hrs_5 days’!C234,D46=FALSE),(VLOOKUP(E46,’Pedry Remodeling_8 Hrs_5 days’!$C$237:$I$290,MATCH(‘Rough Estimate’!F46,’Pedry Remodeling_8 Hrs_5 days’!$C$236:$I$236,0),0)*G46),»»)

Re: If false, do nothing with current cell value

This is where I am totally clueless and my questions become endless. Can you modify this code a little closer to what I would need to use? I don’t even know what to do to set the ‘CurrentValue’

Perhaps this UDF would help.
Put =IF(A1=1, CurrentValue(), A2+A3) in a cell, change the values of A1 (sometimes to 1, sometimes not) , A2 and A3, to see how it works.

  1. Function CurrentValue() As Variant
  2. CurrentValue = Application.Caller.Text
  3. If IsDate(CurrentValue) Then
  4. CurrentValue = CDate(CurrentValue)
  5. ElseIf IsNumeric(CurrentValue) Then
  6. CurrentValue = Val(CurrentValue)
  7. End If
  8. End Function

Re: If false, do nothing with current cell value

In the workbook that I attached and I am trying to do something that apparently needs a VBA code to accomplish. My formula «G44» on the third worksheet ‘Rough Estimate’ works great for generating the total job phase amount that I am looking for when I manually enter the parameters for the search in «D46:F46». My problem is with the «If» statement in my formula. As I have it right now, If=false, then «» the cell is left blank, but what I want to do is, If=false, then (I would like the current value in the cell left alone and not changed).

By my research, it appears that I cannot leave the current value in the cell by using a formula, so VBA code will apparently do the trick. Unfortunately for me, I am just a beginner Excel enthusiast who is trying to make the best use of Excel for his construction business, so knowing code is not my strong suit. I am trying to learn it, but I do not have enough hours in the day and night.

I would greatly appreciate it if someone could share a code for me that would accomplish what I am trying to do. I appreciate your help ahead of time.

Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector
×
×