Поиск первой пустой строки и растягивание в Excel'е. Как?

Программирование на Visual Basic for Applications
Disintegrator
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 18.09.2003 (Чт) 11:36
Откуда: Москва

Поиск первой пустой строки и растягивание в Excel'е. Как?

Сообщение Disintegrator » 22.09.2003 (Пн) 11:09

Мучения мои продолжаются. Не то чтобы не хватает знаний, но их просто нет, а сделать очень надо :-)
Необходима такая замудреная вещь:
Поиск в таблице первой строки, в которой содержится пустая ячейка в столбце 3, затем растягивание (копирование и вставка следующего значения – в моем случае это названия месяцев и формулы) предыдущей строки в эту пустую строку.

Посмотрите, так ли я вообще мыслю:
Указание пустых?:
For rwIndex = 190 To 230
For colIndex = 3 To 3
If rw.Cells(1, 1).Value = 0 Then Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!Я идиот! Убейте меня, кто-нибудь!???

Это растягивание, но конкретных ячеек, а не найденных:
Range("D208").Select
Selection.AutoFill Destination:=Range("D208:D209"), Type:=xlFillDefault

Спасибо за ответы

Штурман
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 25.07.2003 (Пт) 10:47
Откуда: Москва

Сообщение Штурман » 22.09.2003 (Пн) 13:24

строка = Application.CountA(Sheets("ТвойЛист").Columns(3))
так ищут первую пустую строку
диапазон="C" & строка & ":C" & строка+1
Cells(строка,3).AutoFill Destination:=Range(диапазон), Type:=xlFillDefault

Disintegrator
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 18.09.2003 (Чт) 11:36
Откуда: Москва

Сообщение Disintegrator » 22.09.2003 (Пн) 13:50

Штурман писал(а):строка = Application.CountA(Sheets("ТвойЛист").Columns(3))
так ищут первую пустую строку
диапазон="C" & строка & ":C" & строка+1
Cells(строка,3).AutoFill Destination:=Range(диапазон), Type:=xlFillDefault


Уважаемый Штурман!
Я ж написал выше: Не то чтобы не хватает знаний, но их просто нет.
Поэтому подскажите, пжлста, это все в виде готового кода.
Мне надо не просто найти первую пустую строку на листе, а первую пустую в таблице (перед этой таблицей много пустого места).

Эту строку как перевести на русский?:
диапазон="C" & строка & ":C" & строка+1
Слова "Строка", "диапазон" по-русски писАть или как-нибудь определять необходимо?

Штурман
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 25.07.2003 (Пт) 10:47
Откуда: Москва

Сообщение Штурман » 22.09.2003 (Пн) 13:59

а перед таблицей всегда одно и тоже количество пустых строк,или меняется?
строка и диапазон,это переменные, можно обзывать хоть по русски,хоть по английски,главно чтоб не совпадали со словами,которые использует VBA(Cells,Range, и тд)

Disintegrator
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 18.09.2003 (Чт) 11:36
Откуда: Москва

Сообщение Disintegrator » 22.09.2003 (Пн) 14:14

Перед таблицей постоянное число строк.

Вот тут мне в другом форуме подсказали:
Dim i As Long

i = 190
While IsEmpty(Cells(i, 1))
i = i + 1
Wend
Rows(CStr(i + 1) + ":" + CStr(i)).Select
Selection.FillDown
Cells(i, 2).Value = "C149"

Только этот код немного не то делает. Он 190 ячейку копирует в 191 (а там данные), а нужно найти первое пустое значение (у меня это строка 209), и скопировать 208 строку в 209-ю.

Штурман
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 25.07.2003 (Пт) 10:47
Откуда: Москва

Сообщение Штурман » 22.09.2003 (Пн) 14:27

ну я думаю,тада счетчик нужен
For i=a To b'вместо а подставить номер первой не пустой строки,вместо b номер строки,которую точно не перепрыгнешь,3000 например
строка=Cells(i,3)
If строка="" Then GoTo ПРИПЛЫЛИ
Next
диапазон="C" & i & ":C" & i+1
Cells(строка,3).AutoFill Destination:=Range(диапазон), Type:=xlFillDefault

Штурман
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 25.07.2003 (Пт) 10:47
Откуда: Москва

Сообщение Штурман » 22.09.2003 (Пн) 14:29

For i=a To b'вместо а подставить номер первой не пустой строки,вместо b номер строки,которую точно не перепрыгнешь,3000 например
строка=Cells(i,3)
If строка="" Then GoTo ПРИПЛЫЛИ
Next
ПРИПЛЫЛИ:
диапазон="C" & i & ":C" & i+1
Cells(строка,3).AutoFill Destination:=Range(диапазон), Type:=xlFillDefault
Ссори,забыл вставить

Disintegrator
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 18.09.2003 (Чт) 11:36
Откуда: Москва

Сообщение Disintegrator » 22.09.2003 (Пн) 14:38

Dim строка
Dim i As Long
строка = Cells(i, 3)
If строка = "" Then GoTo
Next
Cells(строка, 3).AutoFill Destination:=Range(диапазон), Type:=xlFillDefault

Ругается. Говорит, синтаксическая ошибка в If строка = "" Then GoTo

Штурман
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 25.07.2003 (Пт) 10:47
Откуда: Москва

Сообщение Штурман » 22.09.2003 (Пн) 14:43

я забыл вначале вставить куда именно GoTo,смотри второй вариант

Disintegrator
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 18.09.2003 (Чт) 11:36
Откуда: Москва

Сообщение Disintegrator » 22.09.2003 (Пн) 15:04

Вот код:

Dim строка
Dim i As Long
Dim диапазон
Dim ПРИПЛЫЛИ

For i = 190 To 230
строка = Cells(i, 3)
If строка = "" Then GoTo ПРИПЛЫЛИ
Next
ПРИПЛЫЛИ:
диапазон = "C" & i & ":C" & i + 1
Cells(строка, 3).AutoFill Destination:=Range(диапазон), Type:=xlFillDefault


Выделяет желтым строку:
Cells(строка,3).AutoFill Destination:=Range(диапазон), Type:=xlFillDefault

Чего не нравится ему, не пойму.

Штурман
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 25.07.2003 (Пт) 10:47
Откуда: Москва

Сообщение Штурман » 22.09.2003 (Пн) 15:14

опять прошу прощения,двадцатью делами сразу занимаюсь
Cells(i,3).AutoFill Destination:=Range(диапазон), Type:=xlFillDefault

Disintegrator
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 18.09.2003 (Чт) 11:36
Откуда: Москва

Сообщение Disintegrator » 22.09.2003 (Пн) 16:06

Так. всем миром сделали вот что:

Dim i As Long
i = 190
While Not IsEmpty(Cells(i, 3))
i = i + 1
Wend
Rows(CStr(i - 1) + ":" + CStr(i)).Select
Selection.FillDown
Range("C149").Select
Selection.Copy
Cells(i, 3).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone

Штурман, как Вашу строку
Cells(i, 3).AutoFill Destination:=Range(диапазон), Type:=xlFillDefault
прикрутить вместо
Selection.FillDown

, а то этот код не растягивает, а копирует предыдущую один в один.

Евген
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 66
Зарегистрирован: 01.07.2003 (Вт) 14:13
Откуда: СПб

Сообщение Евген » 23.09.2003 (Вт) 7:25

Код: Выделить всё
While Not IsEmpty(Cells(i, 3))
i = i + 1
Wend

- так ты найдешь только первую и единственную пустую ячейку!

Код: Выделить всё
Range("D190:D191").AutoFill Destination:=Range("D192:D230"), Type:=xlFillDefault

- можно и так...
Ёж птица гордая, пока не пнешь - не полетит!

Штурман
Новичок
Новичок
 
Сообщения: 37
Зарегистрирован: 25.07.2003 (Пт) 10:47
Откуда: Москва

Сообщение Штурман » 23.09.2003 (Вт) 8:31

тада,чтоб растягивалось,а не копировалось вместо
Type:=xlFillDefault,поставь Type:=xlFillSeries

Disintegrator
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 18.09.2003 (Чт) 11:36
Откуда: Москва

Сообщение Disintegrator » 23.09.2003 (Вт) 9:16

Маленькая радость. Все получилось. Что значит с утра работать.
Вот код, который отлично работает (Штурману большой фенкс):

Dim строка
Dim i As Long
Dim j As Long
Dim диапазон
Dim диапазон2
Dim ПРИПЛЫЛИ

For i = 190 To 230
For j = 1 To 4
строка = Cells(i, 3)
If строка = "" Then GoTo ПРИПЛЫЛИ
Next
Next
ПРИПЛЫЛИ:
диапазон = "A" & i - 1 & ":D" & i
диапазон2 = "A" & i - 1 & ":D" & i - 1
Range(диапазон2).Select
Selection.AutoFill Destination:=Range(диапазон), Type:=xlFillDefault
Range(диапазон).Select
Range("C149").Select
Selection.Copy
Cells(i, 3).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone
End Sub

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 23.09.2003 (Вт) 10:25

Код: Выделить всё
Sub DoIt(where As Excel.Range)
  On Error GoTo oops
  With where.Rows(where.Columns(3).Find(vbNullString, , xlValues, xlWhole).Row - where.Row)
    .AutoFill Union(.Offset(0), .Offset(1)), xlFillSeries
  End With
oops:
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 98

    TopList