макросы в Excel

Aliens

Меня знают многие ;-)
#1
Помогите создать макрос. Сам этим никогда не занимался, поэтому не соображу как правильно все это оформить. Суть задачи такая:
по столбцу 2 идет поиск и, если следующая ячейка пустая, то она заполняется значением из предыдущей. Также для каждой ячейки идет проверка содержимого столбца 1 соответствующей строки. Как только слева ячейка оказывается пустой, замены прекращаются.
 

Ortodocs

Житель мегаполиса
#3
Не видел я этой темы. Макрос должен работать как: при открытии; постоянно во время работы, т.е. при изменении ячеек; при клике на ячейки; при нажатии на кнопку или ещё как?
 

Ortodocs

Житель мегаполиса
#4
Nazzi, вот код:
Dim i As Integer
For i = 1 To 10000
If Sheets("НазваниеТвоегоЛистао").Cells(i, 1).Value = "" Then
End
Else
If Sheets("НазваниеТвоегоЛиста").Cells(i, 2).Value = "" Then
Sheets("НазваниеТвоегоЛиста").Cells(i, 2).Value = Sheets("НазваниеТвоегоЛиста").Cells(i - 1, 2).Value
End If
End If
Next i

Какой аналог цикла While Do в VB я не помню, поэтому использовал обычный For.
Если надо чтоб код срабатывал только после изменения любой ячейки вставляй этот код в предопределённую процедуру Worksheet_Change(ByVal Target As Range), а если надо после клика на любой ячейке то в Worksheet_SelectionChange(ByVal Target As Range).
 

Aliens

Меня знают многие ;-)
#5
Ortodocs спасибо, что отозвался, я попробую. а как сделать так, чтобы этот макрос запускался по нажатию на кнопку? И вообще было бы здорово, если бы он действовал в выделенном диапазоне ячеек. Т.е. выделяю диапазон ячеек в пределах одного столбца и он сам берет количество строк по выделенным?
 

Ortodocs

Житель мегаполиса
#6
Nazzi, получай.
Кнопка берётся с панели инструментов Visual Basic. Нажимаешь кнопку "Элементы управления", а там выбирай "Кнопка" и на лист её помещай. Дважды щёлкни её, откроется процедура и помещай туда текст:

Private Sub CommandButton1_Click()
Dim cel As Range
For Each cel In Selection.Cells 'цикл по всем выделенным ячейкам
If IsEmpty(Sheets("Лист1").Cells(cel.Row, cel.Column - 1).Value) = True Then 'если ячейка слева стоящая от текущей ячейки пустая, тогда
End 'выход
Else 'иначе
If IsEmpty(cel.Value) = True Then 'если текущая ячейка пустая, тогда
cel.Value = Sheets("Лист1").Cells(cel.Row - 1, cel.Column).Value 'тогда присваиваем ей значение вышестоящей ячейки
End If
End If
Next cel
End Sub
Вместо "Лист1" соответственно название ТВОЕГО листа.
Как работает: выделяешь ТОЛЬКО диапазон ячеек, которые необходимо проверить на "пустоту" (т.е. если смотреть твое условие, то в столбце №2) и нажимешь кнопку, запустится макрос.
Если что ещё надо, спрашивай.