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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2012, 15:08   #1
kzld
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 625
По умолчанию Определить,занята ли ячейка

Прошу помощи, надо определить занята ли ячейка D17 ?
Если занята,перейти и проверить D18,
если и она занята , перейти и проверить D19.
Короче найти первую пустую ячейку в столбце D, начиная с D17
kzld вне форума Ответить с цитированием
Старый 23.12.2012, 15:19   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Код:
MsgBox Range("D17").End(xlDown)(2).Address
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 23.12.2012, 15:28   #3
kzld
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 625
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Код:
MsgBox Range("D17").End(xlDown)(2).Address
Спасибо за ответ. Наверное я неправильно сформулировал вопрос\задачу.
Надо проверить занята ли ячейка D17, если занята (D18 ... D )переместить курсор на первую свободную ячейку в cтолбце D
kzld вне форума Ответить с цитированием
Старый 23.12.2012, 16:06   #4
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Разжевать?
[D16].End(xlDown)(2).select
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 23.12.2012, 16:11   #5
kzld
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 625
По умолчанию

Цитата:
Сообщение от kuklp Посмотреть сообщение
Разжевать?
[D16].End(xlDown)(2).select
ДА-а-а-а
Желательно "на пальцах"
kzld вне форума Ответить с цитированием
Старый 23.12.2012, 16:20   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Вообще кажется не всё так просто, на практике обрастает (или я просто не нашёл пути прямее, т.к. я сам на практике всегда иду другим путём. Вообще другим.):
Код:
Sub tttt()
    If Not IsEmpty(Range("D17")) Then
        If Not IsEmpty(Range("D18")) Then
            Range("D17").End(xlDown)(2).Select
        Else
            Range("D16").End(xlDown)(2).Select
        End If
    End If
End Sub
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 23.12.2012, 16:44   #7
kzld
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 625
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Вообще кажется не всё так просто, на практике обрастает (или я просто не нашёл пути прямее, т.к. я сам на практике всегда иду другим путём. Вообще другим.):
Код:
Sub tttt()
    If Not IsEmpty(Range("D17")) Then
        If Not IsEmpty(Range("D18")) Then
            Range("D17").End(xlDown)(2).Select
        Else
            Range("D16").End(xlDown)(2).Select
        End If
    End If
End Sub
Спасибо, работает. Но только если курсор стоит в ячейке D17
Как в начале макроса "передвинуть\поставить" курсор на ячейку D17
kzld вне форума Ответить с цитированием
Старый 23.12.2012, 19:51   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Показывайте файл. У меня работает всегда независимо от того, где курсор. Только что ещё раз проверил - создал новый файл, записал символ в D17, активировал ячейку где-то выше-правее, выполнил код - всё ОК.

Т.е. поставить курсор нет проблем (запишите рекордером) - но зачем?
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 24.12.2012, 08:43   #9
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Можно и одной строкой:
Код:
Range([D17], [D17].Offset(Rows.Count - 17)).SpecialCells(xlCellTypeBlanks).Cells(1, 1).Select
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 24.12.2012, 16:33   #10
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Вариант 1
Код:
Sub Макрос1()

    Dim i As Long
    
    'Задаём номер строки, с которой нужно работать.
    i = 17
    
    Do
    
        If IsEmpty(Cells(i, "D")) = True Then
        
            Cells(i, "D").Activate
            
            Exit Do
            
        End If
    
        i = i + 1
        
    Loop
    
End Sub
Вариант 2:
Код:
Sub Макрос2()

    Dim rFind As Excel.Range
    
    'Параметры команды "Find" получены с помощью макрорекордера.
    
    'Range("A17:A50") - здесь указываем диапазон ячеек, где ищем.
    'After:=Range("A50") - указываем последнюю ячейку в диапазоне,
    'в котором ищем, потому что поиск начинается со следующей ячейки.
    Set rFind = Range("A17:A50").Find(What:="", After:=Range("A50"), LookIn:=xlValues, _
        LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
        
    'Если найдено, то переменная "rFind" представляет собой ячейку,
    'в которой было найдено.
    If Not rFind Is Nothing Then
        rFind.Activate
    End If
    
End Sub
Скрипт вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ячейка с накоплением Ольга Ларина Microsoft Office Excel 10 27.10.2018 03:04
Показывается, что часть диска занята, а внутри - Эта папка пуста keen_ Операционные системы общие вопросы 11 15.10.2012 11:54
Как определить что ячейка редактируется screenshot Microsoft Office Excel 7 28.05.2010 06:43
Ячейка с накоплением Ольга Ларина Microsoft Office Excel 11 27.01.2010 07:15
Ячейка с текстом, ячейка без текста. segail Microsoft Office Excel 5 16.09.2009 21:55