Копирование и вставка строки в нужном месте

Программирование на Visual Basic for Applications
Boombeat
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 15.01.2005 (Сб) 12:32

Копирование и вставка строки в нужном месте

Сообщение Boombeat » 27.01.2005 (Чт) 12:46

В принципе уже писал об этом, но тема затерялась.

есть две таблицы на разных листах

код товара | код группы | наименование


Нужно, если товар из одной и той же группы есть в таблице1
и нет во 2-й таблице, копируется из 1-й и вставляется во 2-ю перед последней строкой данной группы

Надеюсь понятно изложил?

Boombeat
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 15.01.2005 (Сб) 12:32

Сообщение Boombeat » 28.01.2005 (Пт) 15:07

Неужели никто не поможет?

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Сообщение АндрейБ » 28.01.2005 (Пт) 15:13

Немного сложно понять смысл задачи (зачем такое, что бы обязательно перед последней строкой этой группы), но если тебе необходимо, можно сделать все.
Конечно важен момент насколько много тебе необходимо вставлять записей из 1 во 2 таблицу. Если это ограничивается 1000, то лучше написать код на VBА, если > 10000, то лучше через запросы-действия!
Быстродействие важная штука.
Выделить те позиции что отсутсвуют во 2 таблице легко через запрос-выборку. В запросе делаешь объеденение таблиц по коду товара (если он уникален!), ограничиваешь выборку по коду группы (если это необходимо), а связь делаешь как все записи из таблице 1, а из 2 таблицы только то что совпадает. Естественно, в поле код товара из 2 таблицы, которых не будет = NULL. Соответственно добавляешь в запрос условия на это поле IS NULL. И у тебя получается выборка по требуемому условию, т.е. выдает записи которые отсутствуют во 2 второй таблице.
На счет добавления здесь надо обсудить. Какие свойства полей в таблицах - уникальность КОД ТОВАРА? и др.
Зачем перед последней? Смысл?
И по подробнее про задачу.

Boombeat
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 15.01.2005 (Сб) 12:32

Сообщение Boombeat » 28.01.2005 (Пт) 15:35

Суть задачи в следующем. Есть прайс-лист поставщика (10000 строк)
таблица копируется на лист3, на лист2 копируются остатки моего склада (500 строк). После этого информация о количестве товара на моем складе копируется на Лист3 (вот код:

FirstRow1 As Long, LastRow1 As Long, FirstRow2 As Long, LastRow2 As Long
Dim count1 As Long, count2 As Long

FirstRow1 = 1
LastRow1 = 10000

FirstRow2 = 1
LastRow2 = 500

For count1 = FirstRow1 To LastRow1
For count2 = FirstRow2 To LastRow2
If Worksheets("Лист3").Cells(count1, 1).Text = Worksheets("Лист2").Cells(count2, 1).Text Then _
Worksheets("Лист3").Cells(count1, 8) = "[" & Worksheets("Лист2").Cells(count2, 3) & "] " & Worksheets("Лист3").Cells(count1, 8)
Next count2
Next count1

, после чего происходит дальнейшая обработка Листа3 (наценка и т.д.) и копирование на лист1 готового прайса.

Проблема в том, что у меня на складе иногда бывает товар, которого в данный момент нет в прайсе поставщика, поэтому я хочу его тоже добавлять в лист3 для дальнейшей обработки. И хочу вставлять его в нужную группу (в принципе не важно какой строкой)

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Сообщение АндрейБ » 28.01.2005 (Пт) 17:51

Ты делаешь в Екселе?

Boombeat
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 15.01.2005 (Сб) 12:32

Сообщение Boombeat » 28.01.2005 (Пт) 18:26

Да

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Сообщение АндрейБ » 28.01.2005 (Пт) 18:40

Ясно. Я решил что ты с Акцессом работаешь.
Здесь я тебе не помогу. Сори.

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

Сообщение Штурман » 31.01.2005 (Пн) 19:07

Кое что сваял, но боюсь при 10 000 строк будет считать долго.
Код: Выделить всё
'Находим последнюю строку прайса(первый столбец не должен иметь пустых ячееек)
    For w = 2 To 65000 '
    If Sheets("Лист1").Cells(w, 1) = "" Then GoTo ups
    Next
ups:
'начинаем сравнивать значения по коду товара(надеюсь они не повторяются)
For i = 2 To 65000 'i,w,q должны иметь значение строки,
'с которой собственно начинается товар
If Sheets("Лист2").Cells(i, 1) = "" Then GoTo op

    For q = 2 To 65000 '
    If Sheets("Лист1").Cells(q, 1) = "" Then GoTo ops
    If Sheets("Лист1").Cells(q, 1) = Sheets("Лист2").Cells(i, 1) Then GoTo opa
    Next
ops:
Sheets("Лист1").Cells(w, 1) = Sheets("Лист2").Cells(i, 1)
Sheets("Лист1").Cells(w, 2) = Sheets("Лист2").Cells(i, 2)
Sheets("Лист1").Cells(w, 3) = Sheets("Лист2").Cells(i, 3)
w = w + 1
opa:
Next
op:
'сортируем прайс по принципу-группа, товар
    Sheets("Лист1").Select
    Columns("A:C").Sort Key1:=Range("B2"), Order1:=xlAscending, Key2:=Range("A2") _
        , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
        False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
        :=xlSortNormal
    Range("A1").Select


Вернуться в VBA

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

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

    TopList