Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2011, 04:35   #1
Brandon Skywalker
 
Регистрация: 30.09.2011
Сообщений: 4
По умолчанию Условие: ЕСЛИ ячейка непустая, то ... - как?

на листе А имеется таблица. На листе Б - выборочные строки этой таблицы. Нужно пройтись по столбцу X таблицы А, и если ячейка непустая, то скопировать всю строку в таблицу Б. Как это будет выглядеть на VBA?
Brandon Skywalker вне форума Ответить с цитированием
Старый 05.10.2011, 05:27   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

приблизительно так:
Код:
Sub CopyNoBlank()
  X = 6
  Application.Union(Columns(X).SpecialCells(2), Columns(X).SpecialCells(-4123)).EntireRow.Copy Destination:=Sheets(2).[a1]
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 05.10.2011, 05:38   #3
Brandon Skywalker
 
Регистрация: 30.09.2011
Сообщений: 4
По умолчанию

IgorGO, как вы обошлись без цикла? Ведь нужно последовательно перебрать все ячейки в столбце. Если в ячейке что-то есть, то скопировать ВСЮ строку на другой лист.
ЗЫ У меня не работает, выдает ошибку 1004.
Brandon Skywalker вне форума Ответить с цитированием
Старый 05.10.2011, 07:51   #4
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Игорь, так можно, если уверен, что есть и константы и формулы. Вариант:
Код:
Sub CopyRows()
    Dim c As Range
    Set c = [f:f].Find(what:="", LookAt:=xlWhole)
    [f:f].ColumnDifferences(c).EntireRow.Copy Sheets(2).[a1]
End Sub
Вариант Игоря можно так:
Код:
Sub CopyNoBlank()
    Dim c As Range: X = 6: On Error Resume Next
    Set c = Columns(X).SpecialCells(2)
    If Not c Is Nothing Then
        Set c = Application.Union(c, Columns(X).SpecialCells(-4123))
    Else
        Set c = Columns(X).SpecialCells(-4123)
    End If
    c.EntireRow.Copy Destination:=Sheets(2).[a1]
End Sub
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728

Последний раз редактировалось kuklp; 05.10.2011 в 08:05.
kuklp вне форума Ответить с цитированием
Старый 05.10.2011, 09:06   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Brandon Skywalker, приведенный мною пример кода будет работать если в столце Х таблицы А есть хоть одна формула и хоть одна константа - то все будет работать. Если формул нет - впишите в одну из ячеек вместо находящегося там значения значения формулу =значение. И все заработает.
или если в стобце только константы:
Код:
Sub CopyNoBlank()
  X = 6
  Columns(X).SpecialCells(2).EntireRow.Copy Destination:=Sheets(2).[a1]
End Sub
а если только формулы:
Код:
Sub CopyNoBlank()
  X = 6
  Columns(X).SpecialCells(-4123).EntireRow.Copy Destination:=Sheets(2).[a1]
End Sub

Сережа, это понятно, спасибо!. Человек задал общий вопрос - получил общий ответ. при желании он мог из ответа выбрать подходящюю для себя часть.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 05.10.2011, 09:28   #6
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Игорь, я по этому:
Цитата:
Сообщение от Brandon Skywalker Посмотреть сообщение
IgorGO, как вы обошлись без цикла? Ведь нужно последовательно перебрать все ячейки в столбце.
понял, что он не мог из ответа выбрать подходящюю для себя часть:-)
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 06.10.2011, 04:16   #7
Brandon Skywalker
 
Регистрация: 30.09.2011
Сообщений: 4
По умолчанию

Спасибо, друзья, работает! А можно разжевать мезанизм программы? Что за числа -4123, операторы SpecialCells, EntireRow?
Brandon Skywalker вне форума Ответить с цитированием
Старый 06.10.2011, 07:59   #8
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
А можно разжевать мезанизм программы?
Предлагаете всю справку по VBA вам здесь переписать?
Неужто сложно поставить курсор на непонятное слово в коде, и нажать F1?
EducatedFool вне форума Ответить с цитированием
Старый 06.10.2011, 08:53   #9
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

ключевая функция тут SpecialCells - читайте справку по ней.
Там же прочитаете о XlCellType.

Успехов!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 14.02.2013, 13:39   #10
Amaus
Новичок
Джуниор
 
Регистрация: 08.06.2011
Сообщений: 1
По умолчанию

Игорь, подскажите, пожалуйста, как залить цветом все непустые ячейки в определенном диапазоне? Формат данных при этом может быть разный (и текст, и число и дата).
Amaus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа формулы, только если ячейка содержит 5 цифр scratik Microsoft Office Excel 11 21.06.2011 15:27
Присвоение цвета кнопке если на другом листе ячейка становится не пустой Energetik Microsoft Office Excel 10 10.03.2011 18:24
Как записать условие меньше или равно функции ЕСЛИ() Tidus Microsoft Office Excel 9 18.02.2010 11:05
Условие: Если книга НЕ открыта ruavia3 Microsoft Office Excel 1 04.02.2010 11:35
Если ячейка пуста, то залить..... Verbludov Microsoft Office Word 12 21.10.2009 12:28