Сравнить (отсортировать) строки

Программирование на Visual Basic for Applications
slon2
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 18.01.2005 (Вт) 10:47

Сравнить (отсортировать) строки

Сообщение slon2 » 18.01.2005 (Вт) 12:20

есть таблица с данными. Название столбцов:
Наименование, кол-во, цена
Например:
а 1 1
б 2 5
в 3 8
я 4 5
у 3 3
Есть вторая таблица на другой или этой же странице с теми же низваниями столбцов, с похожими или другими данными
Например:
б 3 5
я 5 5
а 3 1
ы 4 2

Необходимо получить на одной странице отсортированные по одинаковым строкам данные. Несовпадающие строки в конец таблицы.
Результат:
а 1 1 а 3 1
б 2 5 б 3 5
я 4 5 я 5 5
у 3 3 у 0 0
ы 0 0 ы 4 2
Я вот тут наваял по чайниковски:
Sheets("Лист1").Select
Range("a1").Select

For x = 1 To 10

a = ActiveCell
Sheets("Лист2").Select

Cells.Find(What:=a, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _
.Activate

Range(ActiveCell, ActiveCell.Offset(0, 3)).Select
Selection.Cut
Sheets("Лист1").Select
ActiveCell.Offset(0, 4).Select
ActiveSheet.Paste

ActiveCell.Offset(1, -4).Select

Next x
Но если товар на одной странице не имеет аналогов на другой, то поиск строки выдает ошибку. Вот тут я и застрял.
Пособите, кому не в лом.
Спасибо

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 18.01.2005 (Вт) 15:01

А где ошибка? В этой строке?
Код: Выделить всё
Cells.Find(What:=a, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Activate

А какая? Object variable or with block not set, поскольку Find ничего не нашел? Так сохрани объект, который Find вернет, в отдельную переменную и проверь, что там что-то полезное есть. Если есть, то тогда и активизируй...
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

slon2
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 18.01.2005 (Вт) 10:47

Сообщение slon2 » 18.01.2005 (Вт) 18:01

А поподробней можно?

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 19.01.2005 (Ср) 15:48

То есть все так, как я написала происходит?

Ну, что-то типа такого:
Код: Выделить всё
Dim r as Range
Set r = Cells.Find(What:=a, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
if not r is nothing then
    r.Activate
    'и остальные действия по копированию
end if
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)


Вернуться в VBA

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

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

    TopList  
cron