Excel vba если строка пустая

Содержание

  1. Функция IsNull
  2. Синтаксис
  3. Замечания
  4. Пример
  5. См. также
  6. Поддержка и обратная связь
  7. Excel vba если строка пустая
  8. VBA IsEmpty — Как использовать функцию Excel VBA IsEmpty?
  9. VBA IsEmpty
  10. Синтаксис IsEmpty в Excel VBA
  11. Как использовать функцию VBA IsEmpty в Excel?
  12. VBA IsEmpty — Пример № 1
  13. VBA IsEmpty — Пример № 2
  14. VBA IsEmpty — Пример № 3
  15. То, что нужно запомнить
  16. Рекомендуемые статьи
  17. VBA Excel. Проверка переменных и выражений
  18. Проверка переменных и выражений
  19. Функция IsArray
  20. Описание функции
  21. Пример с IsArray
  22. Функция IsDate
  23. Описание функции
  24. Пример с IsDate
  25. Функция IsEmpty
  26. Описание функции
  27. Пример с IsEmpty
  28. Функция IsError
  29. Описание функции
  30. Пример с IsError

Функция IsNull

Возвращает значение типа Boolean, которое указывает, не содержит ли выражение достоверных данных (Null).

Синтаксис

IsNull(выражение)

Замечания

IsNull возвращает значение True (Истина), если используется expression равное Null; в другом случае IsNull возвращает значение False (Ложь). Если expression состоит из нескольких переменных, значение Null, заданное для одной из них, приводит к возврату значения True для всего выражения.

Значение Null указывает, что Variant не содержит достоверных значений. Null не приравнивается к значению Empty (Пусто), которое указывает, что переменная не была инициализирована. Это также не то же самое, что строка нулевой длины («»), которую иногда называют пустой строкой.

Используйте функцию IsNull, чтобы определить, содержит ли выражение значение Null. Выражения, для которых может потребоваться значение True , в некоторых случаях, например If Var = Null и If Var <> Null , всегда имеют значение False. Это связано с тем, что любое выражение, содержащее значение NULL , само по себе имеет значение NULL и , следовательно, false.

Пример

В этом примере используется функция IsNull, чтобы определить, содержит ли переменная значение Null.

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Excel vba если строка пустая

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

Dim s As String

If (Len(s) <> 0) Then
MsgBox («Кулллл!»)
End If

If (s <> «») Then
MsgBox («Кулллл!»)
End If

От: Аноним
Дата: 15.03.05 12:31
Оценка:

Здравствуйте, Hades, Вы писали:

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

От: Unforgiver
Дата: 15.03.05 12:54
Оценка:

Здравствуйте, Аноним, Вы писали:

А>Как с помощью vba в Excel таблице проверить является ли данная строка пустой (без данных, без оформления) или нет. Просто мне необходимо проходить все строки таблицы и выдёргивать нужную информацию. Но среди нужных строк иногда попадаются пустые строки, которые нужно игнорировать.

Включи обработчик ошибок:

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

От: Elena_
Дата: 15.03.05 13:43
Оценка: 4 (1)

Здравствуйте, Аноним, Вы писали:

А>Строка — имеется в виду row, т.е. ячейки, расположенные на одинаковом горизонтальном уровне

Ну если по содержанию ячеек, то перебрать строки можно, например, так

А по оформлению, может быть, нужно и смотреть оформление отдельно, надо подумать

От: Аноним
Дата: 16.03.05 12:32
Оценка:

Здравствуйте, Аноним, Вы писали:

А>Как с помощью vba в Excel таблице проверить является ли данная строка пустой (без данных, без оформления) или нет. Просто мне необходимо проходить все строки таблицы и выдёргивать нужную информацию. Но среди нужных строк иногда попадаются пустые строки, которые нужно игнорировать.

Да чего вы изголяетесь, пробежаться по всем строкам и по всем ячейкам в строке и не париться.
Вот прмер отчёта в Intermediate о «путотости»/»непустотости» каждой строки в активном листе:

PS: Задолбаетесь ждать, пока макрос отработает — жмите +. Это я так, на всяк.

От: Elena_
Дата: 16.03.05 13:49
Оценка:

Здравствуйте, Аноним, Вы писали:

А>Да чего вы изголяетесь, пробежаться по всем строкам и по всем ячейкам в строке и не париться.
А>Вот прмер отчёта в Intermediate о «путотости»/»непустотости» каждой строки в активном листе:

А>

Но зачем проверять даже те ячейки, которые не попали в UsedRange?
Зачем проверять каждую ячейку, если можно проверить сразу диапазон?

От: Аноним
Дата: 18.03.05 13:44
Оценка:

Здравствуйте, Elena_, Вы писали:

E_>Но зачем проверять даже те ячейки, которые не попали в UsedRange?
E_>Зачем проверять каждую ячейку, если можно проверить сразу диапазон?
Согласен, но тогда «отмажусь» нехваткой времени ==> сыростью программы.
+ тут уже есть пример с использованием UserRange.

PS: В 97’м ёкселе (были слухи что и в 2000’м) «SpecialCells(xlCellTypeBlanks)» не всегда корректно работает.

От: Elena_
Дата: 18.03.05 20:35
Оценка:

Здравствуйте, Аноним, Вы писали:

А>PS: В 97’м ёкселе (были слухи что и в 2000’м) «SpecialCells(xlCellTypeBlanks)» не всегда корректно работает.

В общем-то, если пустых ячеек совсем нет, то действительно некорректно получается

Я имела в виду, чтобы не перебирать по ячейке, так как при больших объемах это все-таки будет заметно

Источник

VBA IsEmpty — Как использовать функцию Excel VBA IsEmpty?

VBA IsEmpty

IsEmpty — это функция, которая используется для проверки, является ли ячейка, на которую ссылаются, пустой или нет. Это очень похоже на функцию ISBLANK в Excel. Функция IsEmpty в Excel VBA также называется информационной функцией в Excel, так как она дает информацию о том, является ли данная ячейка пустой или нет.

Функция IsEmpty — это встроенная функция в Excel VBA. Как объяснено в приведенном выше определении, оно используется для определения того, является ли данная ячейка пустой или нет. Если данная ячейка пуста, мы можем отобразить сообщение пользователю, что ячейка пуста, и если она не пуста, мы можем отобразить сообщение, что ячейка не пуста.

Синтаксис IsEmpty в Excel VBA

Синтаксис для функции Isempty следующий:

Мы можем использовать эту функцию, чтобы проверить, является ли одна ячейка пустой или весь диапазон данных пуст или нет. Эта функция возвращает два значения. Одно верно, а другое ложно. Если указанная ячейка пуста, функция возвращает значение как true, а если указанная ячейка не пуста, она возвращает значение как false.

Как использовать функцию VBA IsEmpty в Excel?

Мы узнаем, как использовать функцию VBA IsEmpty с несколькими примерами в Excel.

Вы можете скачать этот шаблон VBA IsEmpty Excel здесь — Шаблон VBA IsEmpty Excel

VBA IsEmpty — Пример № 1

Во-первых, давайте посмотрим значение, возвращаемое этой функцией, как она работает.

Чтобы использовать функцию VBA IsEmpty в Excel, выполните следующие действия:

Шаг 1: Перейдите на вкладку разработчика и нажмите на Visual Basic.

Шаг 2: Напишите следующий код в проекте.

Код:

Во-первых, давайте поймем код, написанный выше, шаг за шагом:

  • Проверка — это имя определенной подфункции.
  • Mycheck — это переменная, которую мы определили как строку, потому что функция Isempty возвращает логическое значение.
  • Mycheck сохраняет значение Isempty, возвращаемое при проверке ячейки A1.
  • Значение, хранящееся в Mycheck Variable, отображается функцией MsgBox.

Шаг 3: Запустите код, нажав кнопку запуска.

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

VBA IsEmpty — Пример № 2

Теперь давайте воспользуемся функцией Isempty с функцией if для проверки определенной ячейки на рабочем листе, является ли она пустой или нет.

Чтобы использовать функцию VBA IsEmpty в Excel, выполните следующие действия:

Шаг 1: На вкладке разработчика нажмите Visual Basic под разделом кода.

Шаг 2: Напишите следующий код в окне кода,

Код:

Давайте еще раз поймем код, написанный выше, еще раз.

  • Во-первых, мы определили нашу подфункцию как Sample1.
  • Мы используем функцию Isempty с функцией If, чтобы проверить, пуста ли ячейка A1 или нет.
  • Если ячейка A1 пуста, мы используем функцию msgbox для отображения сообщения о том, что данная ячейка пуста.
  • Если ячейка A1 не пуста, мы используем функцию msgbox для отображения сообщения о том, что данная ячейка не пуста.

Шаг 3: Запустите приведенный выше код, нажав на кнопку «Выполнить».

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

Шаг 4: Теперь поместите случайное значение в ячейку A, например, я поместил значение A в ячейку A1.

Шаг 5: Теперь снова запустите код, и мы получим следующий результат.

VBA IsEmpty — Пример № 3

Теперь давайте используем эту функцию, чтобы выяснить, является ли данный диапазон ячеек пустым или нет. Ранее мы использовали эту функцию в одной ячейке. В этом примере наш диапазон данных будет от B1: D7.

Чтобы использовать функцию VBA IsEmpty в Excel, выполните следующие действия:

Шаг 1: На вкладке разработчика нажмите Visual Basic под разделом кода.

Шаг 2: Напишите следующий код в окне кода,

Код:

Давайте разберемся в написанном выше коде шаг за шагом.

  • После определения подфункции в качестве примера 2 мы определили переменную с именем cell как Range, а B пусто как Boolean, так как Boolean хранит логические значения.
  • Мы заранее определили, что Bisempty будет ложным, если указанный диапазон ячеек не пустой.
  • Но если данный диапазон ячеек пуст, значение, сохраненное в Bisempty, будет истинным.
  • Если значение, хранящееся в переменной Bisempty, равно true, мы отображаем сообщение как пустые ячейки, или, если значение, сохраненное в переменной, равно false, мы отображаем сообщение как ячейки со значениями.

Шаг 3: Запустите приведенный выше код, нажав на кнопку «Выполнить».

Мы видим следующий результат, поскольку ячейка A1 пуста.

То, что нужно запомнить

Есть несколько вещей, которые мы должны помнить об Isempty Function в Excel VBA:

  • Isempty похож на функцию Isblank в Excel.
  • IsEmpty — это информационная функция.
  • Функция IsEmpty возвращает логическое значение, т.е. true или false.
  • Функция IsEmpty может использоваться для одной ячейки или для диапазона ячеек.

Рекомендуемые статьи

Это было руководство для VBA IsEmpty. Здесь мы обсудили, как использовать функцию Excel VBA IsEmpty вместе с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи —

  1. Функция копирования и вставки в VBA
  2. Функция подстроки Excel
  3. Индекс VBA вне диапазона
  4. Excel ISNUMBER Formula

Источник

VBA Excel. Проверка переменных и выражений

Проверка переменных и выражений с помощью встроенных функций VBA Excel: IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject.

Проверка переменных и выражений

Встроенные функции VBA Excel — IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject — проверяют значения переменных и выражений на соответствие определенному типу данных или специальному значению.

Синтаксис функций для проверки переменных и выражений:

Expression — выражение, переменная или необязательный аргумент для IsMissing.

Все функции VBA Excel для проверки переменных и выражений являются логическими и возвращают значение типа Boolean — True или False.

Функция IsArray

Описание функции

Функция IsArray возвращает значение типа Boolean, указывающее, является ли переменная массивом:

  • True — переменная является массивом;
  • False — переменная не является массивом.

Пример с IsArray

Как показывает пример, функция IsArray возвращает True и в том случае, если переменная только объявлена как массив, но еще не содержит значений.

Функция IsDate

Описание функции

Функция IsDate возвращает логическое значение, указывающее, содержит ли переменная значение, которое можно интерпретировать как дату:

  • True — переменная содержит дату, выражение возвращает дату, переменная объявлена с типом As Date;
  • False — в иных случаях.

Пример с IsDate

Функция IsEmpty

Описание функции

Функция IsEmpty возвращает значение типа Boolean, указывающее, содержит ли переменная общего типа (As Variant) значение Empty:

  • True — переменная содержит значение Empty;
  • False — переменной присвоено значение, отличное от Empty.

Пример с IsEmpty

Как видно из примера, функцию IsEmpty можно использовать для проверки ячеек на содержание значения Empty (пустая ячейка общего формата).

Функция IsError

Описание функции

Функция IsError возвращает логическое значение, указывающее, является ли аргумент функции значением ошибки, определенной пользователем:

  • True — аргумент функции является значением ошибки, определенной пользователем;
  • False — в иных случаях.

Пользователь может определить одну или несколько ошибок для своей процедуры или функции с рекомендациями действий по ее (их) исправлению. Возвращается номер ошибки с помощью функции CVErr.

Пример с IsError

Допустим, пользователь определил, что ошибка №25 означает несоответствие аргумента функции Vkuba числовому формату:

Источник

Определение с помощью кода VBA Excel, что диапазон ячеек пуст, то есть, ни одна из ячеек диапазона (строки, столбца) не содержит отображаемого значения.

Определение пустого диапазона

Определить в VBA Excel, что диапазон ячеек пуст, можно с помощью функции рабочего листа WorksheetFunction.CountA или свойства диапазона ячеек Range.Text.

Пример 1

Определение, что диапазон ячеек пуст, с помощью функции рабочего листа WorksheetFunction.CountA:

Sub Primer1()

    If WorksheetFunction.CountA(Range(«A1:L8»)) = 0 Then

        MsgBox «Диапазон ячеек ««A1:L8»» пуст»

    Else

        MsgBox «Диапазон ячеек ««A1:L8»» не пуст»

    End If

End Sub

Функция WorksheetFunction.CountA подсчитывает количество ячеек, содержащих значения, в том числе нули и формулы, возвращающие пустые строки. Если хотя бы одна ячейка в диапазоне будет содержать пустую строку, возвращенную формулой, то код первого примера определит, что диапазон не пуст.

Пример 2

Определение, что диапазон ячеек пуст, с помощью свойства Text объекта Range:

Sub Primer2()

    If Range(«A1:L8»).Text = «» Then

        MsgBox «Диапазон ячеек ««A1:L8»» пуст»

    Else

        MsgBox «Диапазон ячеек ««A1:L8»» не пуст»

    End If

End Sub

Свойство Text объекта Range возвратит пустую строку только в том случае, если все ячейки диапазона будут содержать пустые строки и (или) значение Empty. Если одна или более ячеек в диапазоне будут содержать пустую строку, возвращенную формулой, то код второго примера все-равно определит, что диапазон пуст.

Определение пустой строки

Определение пустой строки в VBA Excel с помощью свойства Range.Text:

Sub Primer3()

    If Rows(5).Text = «» Then

        MsgBox «Указанная строка пуста»

    Else

        MsgBox «Указанная строка не пуста»

    End If

End Sub

Данное определение пустой строки используется в коде для удаления пустых строк из таблицы.

Определение пустого столбца

Определение пустого столбца в VBA Excel с помощью свойства Range.Text:

Sub Primer4()

    If Columns(7).Text = «» Then

        MsgBox «Указанный столбец пуст»

    Else

        MsgBox «Указанный столбец не пуст»

    End If

End Sub

или

Sub Primer5()

    If Columns(«G»).Text = «» Then

        MsgBox «Указанный столбец пуст»

    Else

        MsgBox «Указанный столбец не пуст»

    End If

End Sub


Фразы для контекстного поиска: диапазон пустой, строка пустая, столбец пустой.



Проверить есть ли в строке данные

От: Аноним

 
Дата:  15.03.05 06:55
Оценка:

Как с помощью vba в Excel таблице проверить является ли данная строка пустой (без данных, без оформления) или нет. Просто мне необходимо проходить все строки таблицы и выдёргивать нужную информацию. Но среди нужных строк иногда попадаются пустые строки, которые нужно игнорировать.


Re: Проверить есть ли в строке данные

От:

Hades

 
Дата:  15.03.05 09:03
Оценка:

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

Dim s As String

If (Len(s) <> 0) Then
MsgBox («Кулллл!»)
End If

s = «aaa»

или так:

If (s <> «») Then
MsgBox («Кулллл!»)
End If


Re[2]: Проверить есть ли в строке данные

От: Аноним

 
Дата:  15.03.05 12:31
Оценка:

Здравствуйте, Hades, Вы писали:

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


Re: Проверить есть ли в строке данные

От:

Unforgiver

Россия

 
Дата:  15.03.05 12:54
Оценка:

Здравствуйте, Аноним, Вы писали:

А>Как с помощью vba в Excel таблице проверить является ли данная строка пустой (без данных, без оформления) или нет. Просто мне необходимо проходить все строки таблицы и выдёргивать нужную информацию. Но среди нужных строк иногда попадаются пустые строки, которые нужно игнорировать.

Включи обработчик ошибок:

On Error Resume Next

' Делаем операцию со строкой.

On Error Goto 0

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

Всё заканчивается плохо. Если что-то закончилось хорошо — значит оно еще не закончилось.


Re[3]: Проверить есть ли в строке данные

От:

Elena_

Россия

 
Дата:  15.03.05 13:43
Оценка:

4 (1)

Здравствуйте, Аноним, Вы писали:

А>Строка — имеется в виду row, т.е. ячейки, расположенные на одинаковом горизонтальном уровне

Ну если по содержанию ячеек, то перебрать строки можно, например, так

    Dim ranRow As Range
    For Each ranRow In ActiveSheet.UsedRange.Rows
        If Intersect(ranRow, ActiveSheet.UsedRange).Address = _
            ranRow.SpecialCells(xlCellTypeBlanks).Address Then
            MsgBox ranRow.row & " - Пустая Строка"
        Else
            MsgBox ranRow.row & " - Непустая Строка"
        End If
    Next ranRow

А по оформлению, может быть, нужно и смотреть оформление отдельно, надо подумать

Пользователь — друг программиста!


Re: Странные вы какие-то…

От: Аноним

 
Дата:  16.03.05 12:32
Оценка:

Здравствуйте, Аноним, Вы писали:

А>Как с помощью vba в Excel таблице проверить является ли данная строка пустой (без данных, без оформления) или нет. Просто мне необходимо проходить все строки таблицы и выдёргивать нужную информацию. Но среди нужных строк иногда попадаются пустые строки, которые нужно игнорировать.

Да чего вы изголяетесь, пробежаться по всем строкам и по всем ячейкам в строке и не париться.
Вот прмер отчёта в Intermediate о «путотости»/»непустотости» каждой строки в активном листе:

Option Explicit

Public Sub RowsCheck()
    Dim clsRow As Excel.Range
    Dim clsCell As Excel.Range
    Dim clsActiveSheet As Excel.Worksheet
    Dim blnEmpty As Boolean
    
    Set clsActiveSheet = ActiveSheet
    
    For Each clsRow In clsActiveSheet.Rows
        blnEmpty = True
        ''''''''''''''''''''''''''''''''''''''
        'Тут проверяешь каждую строку в листе.
        For Each clsCell In clsRow.Cells
            '''''''''''''''''''''''''''''''''''''''
            'Тут проверяешь каждую ячейку в строке.
            If Not VBA.IsEmpty(clsCell.Value) Then
                blnEmpty = False
                Exit For
            End If
        Next clsCell
        
        If blnEmpty Then
            Debug.Print "Row:""" & clsRow.Address & """ Is Empty"
        Else
            Debug.Print "Row:""" & clsRow.Address & """ Is Not Empty"
        End If
    Next clsRow
End Sub

PS: Задолбаетесь ждать, пока макрос отработает — жмите {Ctrl}+{Pause|Break}. Это я так, на всяк…


Re[2]: Странные вы какие-то…

От:

Elena_

Россия

 
Дата:  16.03.05 13:49
Оценка:

Здравствуйте, Аноним, Вы писали:

А>Да чего вы изголяетесь, пробежаться по всем строкам и по всем ячейкам в строке и не париться.

А>Вот прмер отчёта в Intermediate о «путотости»/»непустотости» каждой строки в активном листе:

А>

А>    For Each clsRow In clsActiveSheet.Rows
А>        blnEmpty = True
А>        ''''''''''''''''''''''''''''''''''''''
А>        'Тут проверяешь каждую строку в листе.
А>        For Each clsCell In clsRow.Cells
А>            '''''''''''''''''''''''''''''''''''''''
А>            'Тут проверяешь каждую ячейку в строке.
А>            If Not VBA.IsEmpty(clsCell.Value) Then
А>                blnEmpty = False
А>                Exit For
А>            End If
А>        Next clsCell
А>

Но зачем проверять даже те ячейки, которые не попали в UsedRange?
Зачем проверять каждую ячейку, если можно проверить сразу диапазон?

Пользователь — друг программиста!

От: Аноним

 
Дата:  18.03.05 13:44
Оценка:

Здравствуйте, Elena_, Вы писали:

E_>Но зачем проверять даже те ячейки, которые не попали в UsedRange?

E_>Зачем проверять каждую ячейку, если можно проверить сразу диапазон?
Согласен, но тогда «отмажусь» нехваткой времени ==> сыростью программы.
+ тут уже есть пример с использованием UserRange.

PS: В 97’м ёкселе (были слухи что и в 2000’м) «SpecialCells(xlCellTypeBlanks)» не всегда корректно работает…

От:

Elena_

Россия

 
Дата:  18.03.05 20:35
Оценка:

Здравствуйте, Аноним, Вы писали:

А>PS: В 97’м ёкселе (были слухи что и в 2000’м) «SpecialCells(xlCellTypeBlanks)» не всегда корректно работает…

В общем-то, если пустых ячеек совсем нет, то действительно некорректно получается

Я имела в виду, чтобы не перебирать по ячейке, так как при больших объемах это все-таки будет заметно

Можно еще, например,

    Dim ranRow As Range
    For Each ranRow In ActiveSheet.UsedRange.Rows
        If Application.WorksheetFunction.CountBlank(ranRow.EntireRow) = 256 Then
            MsgBox ranRow.Row & " - Пустая Строка"
        Else
            MsgBox ranRow.Row & " - Непустая Строка"
        End If
    Next ranRow

Пользователь — друг программиста!

Подождите ...

Wait...

  • Переместить
  • Удалить
  • Выделить ветку

Пока на собственное сообщение не было ответов, его можно удалить.

roneta90

0 / 0 / 0

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

Сообщений: 55

1

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

29.10.2016, 16:33. Показов 8646. Ответов 9

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


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

всем доброго времени суток.подскажите пожалуйста , задача у меня такая: если в диапазоне А1:L10 есть пустая строка (в примере строка 6) то выполняем одной действие (например ячейка М1 красным выделяется) а если в этом же диапазоне (А1:L10) нет пустой строки то выполняем другое действие(N1 выделяется красным)

я колупалась дошла до такого варианта(эксперементировала,пробовала выделить строку чтоб потом по подобию загнать условие в цикл if…Then ) но получилось выделить все пустые ЯЧЕЙКИ во всех строках. А мне нужна пустая СТРОКА. когда ввожу условие if …then пишет ошибку type s mismatch. Вообщем мои изыскания завели меня в тупик — на них особо не обращайте внимания)

Visual Basic
1
2
3
4
5
6
7
Sub uslovie pustaya stroka ()
    With Range("a1:L10")
   Dim ORANGE2 As Range
   Set ORANGE2 = .SpecialCells(xlCellTypeBlanks) 'здесь получается находит все пустые ЯЧЕЙКИ а мне нужна пустая СТРОКА  
if ORANGE2<>o then cells(1,13).Interior.Color = 255 else cells(1,14).interior.color=255 'этот цикл не работает
End With
End Sub

Вложения

Тип файла: xlsx test12.xlsx (9.6 Кб, 9 просмотров)



0



Programming

Эксперт

94731 / 64177 / 26122

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

Сообщений: 116,782

29.10.2016, 16:33

Ответы с готовыми решениями:

Условие: если строка пустая — выполнить действие
Здравствуйте, если можете, помогите создать такое условие:

&quot;Условие: если строка пустая -…

Нужно проверить существует ли определенный объект, и после этого выполнить действие, если он есть
Доброе время суток!
Возникла у меня потребность проверить существует ли объект определенный и…

Если ячейка в не пустая, то произвести действие с диапазоном в этой строке
Здравствуйте, подскажите, пожалуйста как прописать, если ячейка в столбце А не пустая, то…

Google Таблицы. Как при изменении ячейки в определенном диапазоне выполнить действие?
Добрый день.
Прошу помочь, так как не смог найти ответ в инете.

Необходимо написать постоянно…

9

Казанский

15136 / 6410 / 1730

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

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

29.10.2016, 16:51

2

roneta90, есть такой прием

Visual Basic
1
2
3
  For Each r In Range("A1:L10").Rows
    If r.Text = "" Then 'строка пустая
   '...



1



roneta90

0 / 0 / 0

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

Сообщений: 55

29.10.2016, 16:51

 [ТС]

3

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

Visual Basic
1
2
3
4
5
Sub m_1()
Dim r1 As Integer
'r1 = Worksheets("end").Range("A1:l10").SpecialCells(xlCellTypeBlanks).Row
If Worksheets("end").Range("A1:l10").SpecialCells(xlCellTypeBlanks).Row = 0 Then Cells(1, 13).Interior.Color = 255 Else Cells(1, 14).Interior.Color = 255
End Sub



0



roneta90

0 / 0 / 0

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

Сообщений: 55

29.10.2016, 22:51

 [ТС]

4

добрый день! работает но если пустая строка есть то выполняются оба условия. Я вам опишу полный макрос может получится адаптировать(у самой допилить не получилось) :существует три блока данных за определенные числа(14,15,16). каждый блок подразделяется на два диапазона(зеленый и красный) которые разделяются пустой строкой(желтая).
правило 1)если есть такое подразделение то:
первый диапазон(от строки с датой до пустой строки) равен соответствующей дате (например 15)(в столбце A и B)
второй диапазон(после пустой строки до строки со следующей датой) равен ст А- сответсвующая дата +2(17) ст. В -соответствующая дата(15)
правило 2)если нет подразделения т.е. желтой строки то во всем блоке(диапазон между смежными датами , например между 15 и 16) будет ст А- сответсвующая дата +2(17) ст. В -соответствующая дата(15) — этот вариант я выделила оранжевым(ФАЙЛ FIRST2)

правило 1 получилось сделать у меня получилось(реализовано на книге first1 макрос запускается с книги Основной)

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Sub correct()
Dim d1, d As Range
Dim dat1 As Date
Dim sh As Worksheet
Set sh = Sheets("Base")
With Workbooks("first.xlsx").Sheets("Лист1")
'поиск диапазонов
For t = 1 To 3
dat1 = sh.Cells(t, 1)' ввод даты для заполнения ст. В
dat2 = sh.Cells(t + 1, 1)'ввод даты чтобы определить нижнюю границу блока
dat3 = sh.Cells(4, 1)'вводы даты для заполнения столбца ст.А
Dim glastrow As Long
Dim g1 As Range
glastrow = .Cells.Find("*", [A1], SearchDirection:=xlPrevious).Row
Set g1 = .Range("e" & glastrow + 1)
Set d = .Columns(5).Find(dat1, , xlValues, xlWhole)
Set d1 = .Columns(5).Find(dat2, , xlValues, xlWhole)
If d Is Nothing Then: MsgBox "NO": Exit Sub
If d1 Is Nothing Then Set d1 = g1
'заполнение датами
.Range(.Cells(d.Row + 1, "a"), .Cells(d.End(xlDown).Row, "b")) = dat1 ' заполнение столбца А и В при выполнении Правила 1 диапазон до пустой строки
.Range(.Cells(d.End(xlDown).Row + 2, "a"), .Cells(d1.Row - 1, "a")) = dat3 ' заполнение ст. А при выполенении Правила1 диапазон после пустой строки  
.Range(.Cells(d.End(xlDown).Row + 2, "b"), .Cells(d1.Row - 1, "b")) = dat1 'заполение ст. В при выполенении Правила1 диапазон послк пустой строки
Next
End With
End Sub

а вот второе правило когда внутри блока нет пустой строки не получается реализовать. Хелп,пожалуйста

Вложения

Тип файла: rar WinRAR archive.rar (17.2 Кб, 4 просмотров)



0



anton-sf

123 / 59 / 14

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

Сообщений: 265

30.10.2016, 00:41

5

Не вижу другой возможности кроме перебора всех строк диапазона с проверкой всех ячеек в строке

Добавлено через 9 минут
«if ORANGE2<>o»

Вы проверяете объект (Range), ответ не может быть ничем другим как либо Range либо Nothing, поэтому у вас возникает ошибка типа данных

Я бы сделал так:

Добавлено через 2 минуты

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub Тест()
    'Стиль ссылок R1C1
    Dim НомерСтроки As Integer
    Dim НомерСтолбца As Integer
    Dim СтрокаПустая As Boolean
    
    For НомерСтроки = 1 To 10
        СтрокаПустая = True
        For НомерСтолбца = 1 To 5 '(A-F)
            If Cells(НомерСтроки, НомерСтолбца).Value <> "" Then
                СтрокаПустая = False
                Exit For
            End If
        Next
        If СтрокаПустая Then
            'Выполнять команды для пустой строки
        Else
            'Выполнять команды для НЕ пустой строки
        End If
    Next
End Sub



1



roneta90

0 / 0 / 0

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

Сообщений: 55

30.10.2016, 01:06

 [ТС]

6

я тут такое решение придумала(впринципе на основании вашего) построчно даты записывать

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
'поиск диапазонов
For t = 1 To 3
dat1 = sh.Cells(t, 1)
dat2 = sh.Cells(t + 1, 1)
dat3 = sh.Cells(4, 1)
Dim glastrow As Long
Dim g1 As Range
glastrow = Cells.Find("*", [A1], SearchDirection:=xlPrevious).Row
Set g1 = Range("e" & glastrow + 1)
'g1.Interior.Color = 255
 
Set d = Columns(5).Find(dat1, , xlValues, xlWhole)
Set d1 = Columns(5).Find(dat2, , xlValues, xlWhole)
 
If d Is Nothing Then: MsgBox "NO": Exit Sub
If d1 Is Nothing Then Set d1 = g1
For i = Cells(d.row+1)To Cells(d1.Row - 1)' цикл проверки ячейки по столбцу 5 от строки с датой до строки со второй датой i строка 5 -столбец
If Cells(i, 5) = "" Then ' если ячейка пустая  то 
Range(Cells(d.Row + 1, "a"), Cells(i - 1, "b")) = dat1 ' в диапазоне до пустой ячейки в ячейку А и B этой строки записываю дату 1
Range(Cells(i + 1, "a"), Cells(d1.Row - 1, "a")) = dat3' в диапазоне после пустой ячейки в ячейку А этой строки записываю дату 3
Range(Cells(i + 1, "b"), Cells(d1.Row - 1, "b")) = dat1' в диапазоне после пустой ячейки в ячейку  B этой строки записываю дату 3
GoTo metka1 ' перехожу к проверке следующего блока
Else:  ' если проверяемая ячейка по столбцу 5 не пустая то 
 
Range(Cells(i, "a")) = dat3 'записываю дату3 в столбец А 
Range(Cells(i, "b")) = dat1'записываю дату3 в столбец В
GoTo metka2'перехожу на проверку следующей ячейки
End If
'если при проверке не будет пустых ячеек то в столбец А и В будет записываться по условию ELSE , а когда пустая ячейка попадется данные перезапишутся по условию then 
 
 
metka2: Next i
metka1: Next
End Sub

теперь возник вопрос с границами блоков : For i = Cells(d.row+1) To Cells(d1.Row — 1)(получается когда я выполняю поиск дат для верхней границы блока у меня получается значение d.row(верхняя дата)+1 и нижняя граница d1.row(нижняя дата)-1
у меня почему то i либо 0 либо overflow. Подскажите как правильно задать границы проверяемого на наличие пустых строк блока



0



123 / 59 / 14

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

Сообщений: 265

30.10.2016, 01:26

7

на какой строке спотыкается из приведенных выше ?



1



0 / 0 / 0

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

Сообщений: 55

30.10.2016, 01:27

 [ТС]

8

For i = Cells(d.row+1) To Cells(d1.Row — 1) ПИШЕТ ОШИБКУ OVERFLOW
ПО ИДЕЕ I ДОЛЖНО ПРИСВАИВАТЬСЯ НОМЕР СТРОКИ



0



123 / 59 / 14

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

Сообщений: 265

30.10.2016, 01:49

9

Лучший ответ Сообщение было отмечено roneta90 как решение

Решение

гм, а зачем вы пишете cells?
цикл то не по самим ячейкам а по их номерам
поэтому строка должна выглядеть так
For i = d.row+1 To d1.Row — 1



1



roneta90

0 / 0 / 0

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

Сообщений: 55

30.10.2016, 02:06

 [ТС]

10


Получилось спасибо огромнейшее — вы просто реально ГУРУ
Вот код «со всеми потрохами»

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Sub correct()
Dim d1, d As Range
Dim dat1 As Date
Dim sh As Worksheet
Set sh = Sheets("Base")
With Workbooks("first.xlsx").Sheets("Лист1")
'поиск диапазонов
For t = 1 To 3
dat1 = sh.Cells(t, 1)
dat2 = sh.Cells(t + 1, 1)
dat3 = sh.Cells(4, 1)
Dim glastrow As Long
Dim g1 As Range
glastrow = .Cells.Find("*", [A1], SearchDirection:=xlPrevious).Row
Set g1 = .Range("e" & glastrow + 1)
Set d = .Columns(5).Find(dat1, , xlValues, xlWhole)
Set d1 = .Columns(5).Find(dat2, , xlValues, xlWhole)
If d Is Nothing Then: MsgBox "NO": Exit Sub
If d1 Is Nothing Then Set d1 = g1
For i = d.Row + 1 To d1.Row - 1 ' цикл проверки ячейки по столбцу 5 от строки с датой до строки со второй датой i строка 5 -столбец
If .Cells(i, 5) = "" Then ' если ячейка пустая  то
.Range(.Cells(d.Row + 1, "a"), .Cells(i - 1, "b")) = dat1 ' в диапазоне до пустой ячейки в ячейку А и B этой строки записываю дату 1
.Range(.Cells(i + 1, "a"), .Cells(d1.Row - 1, "a")) = dat3 ' в диапазоне после пустой ячейки в ячейку А этой строки записываю дату 3
.Range(.Cells(i + 1, "b"), .Cells(d1.Row - 1, "b")) = dat1 ' в диапазоне после пустой ячейки в ячейку  B этой строки записываю дату 3
GoTo metka1 ' перехожу к проверке следующего блока
Else:  ' если проверяемая ячейка по столбцу 5 не пустая то 
.Cells(i, "a") = dat3 'записываю дату3 в столбец А
.Cells(i, "b") = dat1 'записываю дату3 в столбец В
GoTo metka2 'перехожу на проверку следующей ячейки
End If
'если при проверке не будет пустых ячеек то в столбец А и В будет записываться по условию ELSE , а когда пустая ячейка попадется данные перезапишутся по условию then 
metka2: Next i
metka1: Next
End With
End Sub



0



 

Jack Famous

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

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

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#1

12.11.2020 12:17:05

Доброго времени суток, Планетяне!

Может кому пригодится

Изменено: Jack Famous12.11.2020 12:20:00

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

Дмитрий(The_Prist) Щербаков

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

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

Профессиональная разработка приложений для MS Office

#2

12.11.2020 13:20:51

Код
If vl = vbNullString Then MsgBox "Найдена строка нулевой длины (псевдопустая)!"

:)

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

БМВ

Модератор

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

Excel 2013, 2016

Пустая но не очень :-)
Алексей,  
1. Long???  Че не Double ???
2. Чисто лексически IsEmpty — имеет только два ответа , но не три
3. По аналоги с Sheets (  Visible, Hide, VeryHide ) ответы  Не пусто, Пусто  , Очень пусто :-)
4. Что ж вы так MSGBOX то любите?

По вопросам из тем форума, личку не читаю.

 

Jack Famous

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

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

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#4

12.11.2020 15:01:43

Дмитрий(The_Prist) Щербаков, привет
А ты пробовал? У меня vl=vbNullString выдаёт True и на реально пустые ячейки

Цитата
БМВ: Long???  Че не Double ???

если ты про Integer, то он либо медленнее, либо такой же по скорости, как Long (сюрприз)

Цитата
БМВ: Чисто лексически IsEmpty — имеет только два ответа , но не три

взял название известной функции и добавил отрицательное возвращаемое значения для контроля ошибок. Мне отлично. Сейчас выложу версию, включающую ещё один отрицательный вывод — для псевдополных (только пробелы, неразрывные пробелы и переносы)

Цитата
БМВ: Что ж вы так MSGBOX то любите?

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

Изменено: Jack Famous12.11.2020 15:01:59

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

Jack Famous

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

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

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#5

12.11.2020 15:09:28

Коротко: если в вариативную переменную x передать значение ячейки Cell.Value, и при этом x=Empty And Not IsEmpty(x) — это означает, что в ячейке была строка нулевой длины, которую можно получить формулой «=»»» или вставленным значением её

Версия 2 + аналог Trim

Изменено: Jack Famous12.11.2020 15:29:37

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

Андрей VG

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

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

Excel 2016, 365

#6

12.11.2020 15:10:21

Доброе время суток

Цитата
Jack Famous написал:
А ты пробовал?

Алексей, или меняйте

Цитата
Функция для проверки значения на строку нулевой длины «=»»

на Variant или в

Цитата
Jack Famous написал:
PRDX_IsEmpty(vl)

используйте

Код
PRDX_IsEmpty(vl As String)
 

Jack Famous

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

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

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

хватит ко мне «на вы» уже обращаться))
Андрей VG, если пустую ячейку передать в строковую переменную, то штатная IsEmpty() выдаст False как будто это строка нулевой длины. Мне это не нужно. Мне нужно различать пустые ячейки и ячейки, в которых стоит «=»»» формулой или значением. Так что название верное и функция работает  :)

Изменено: Jack Famous12.11.2020 15:23:14

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

Дмитрий(The_Prist) Щербаков

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

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

Профессиональная разработка приложений для MS Office

#8

12.11.2020 15:30:23

Цитата
Jack Famous написал:
У меня vl=vbNullString выдаёт True и на реально пустые ячейки

да. Я думал догадаешься, что проверять надо ПОСЛЕ проверки на IsEmpty…

Код
Function PRDX_IsEmpty(vl)
    If IsEmpty(vl) Then
        PRDX_IsEmpty = "Найдено ПУСТОЕ значение!"
    Else
        If vl = vbNullString Then
            PRDX_IsEmpty = "Найдена строка нулевой длины (псевдопустая)!"
        Else
            PRDX_IsEmpty = "Значение «" & vl & "» НЕ ПУСТОЕ!"
        End If
    End If
End Function

Мне лично так нагляднее, чем ElseIf непонятно с чем. Но это дело вкуса.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Jack Famous

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

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

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#9

12.11.2020 15:33:15

Дмитрий(The_Prist) Щербаков, те же яйца, только в профиль :D

Суть метода/функции

  1.  у меня просто Empty вместо vbNullString
  2. я сначала проверяю на Empty, потому что проверка на равенство с константой должно быть шустрее даже такой лайтовой функции, как IsEmpty()

Изменено: Jack Famous12.11.2020 15:38:25

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

Андрей VG

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

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

Excel 2016, 365

#10

12.11.2020 15:58:54

Цитата
Jack Famous написал:
штатная IsEmpty()
Цитата
Обязательный expression аргумент expression — это переменная Variant
Цитата
IsEmpty возвращает значение True, если переменная не инициализована, или для нее явно указано значение Empty

А чего вы собственно от неё ещё хотели? Если работаете с данными ячейки, то сначала определяется тип того, что там и если это строка — тогда уже проверка строкового значения. Медведь же уже написал, но ваши ответы на его подколки — всё мимо :)

Цитата
Jack Famous написал:
хватит ко мне «на вы» уже обращаться))

Алексей, так принято на форуме — зачем нарушать?

 

БМВ

Модератор

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

Excel 2013, 2016

#11

12.11.2020 16:08:44

Цитата
Jack Famous написал:
если ты про Integer,

я байты памяти кто будет экономить?????

По вопросам из тем форума, личку не читаю.

 

Jack Famous

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

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

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#12

12.11.2020 17:03:04

Цитата
Андрей VG: так принято на форуме — зачем нарушать?

неправда)) тут с незнакомыми так принято и мы с Мишей обижаемся, когда ты отчуждаешься  :D

По остальному я так и не понял, в чём проблема-то:

  1. я определяю пустая ли ячейка на самом деле или в ней есть строка нулевой длины. Иногда это имеет значение и не одно и то же
  2. да — я определяю строку, но передать должен вариативную переменную. Всё правильно
  3. Обвес для определения псевдозаполненных — это просто для универсальности. Удалить легко

Функция не работает или работает как-то неправильно?
Или что-то другое?)

Изменено: Jack Famous12.11.2020 17:04:06

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

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