Left Join в Excell

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Pomuk
Сообщения: 13
Зарегистрирован: 25 окт 2006, 14:39
Контактная информация:

31 окт 2006, 15:58

Потскажите, может есть стандартный способ решения данной проблемы?
К примеру, есть Таблица1.

# Название Код количество
1 Булка 1001 10
2 Пряник 1002 20
3 Печенье 235 30

И Таблица2

Код Развес
1001 0,5кг
235 0,9кг

Требуется подставить в первую таблицу, значение поля Развес из второй таблицы, если во второй таблице, есть соответствующий код. При помощи SQL (или в Аccess) 10 секунд делов. А вот в Exсell как при помощи макроса подставить данные значения? Ну не пробегаться же по всей второй таблице в поисках при формировании каждой позиции первой таблицы. Просто уверен, что должен существовать стандартный способ.
Pavel55
Сообщения: 405
Зарегистрирован: 20 окт 2006, 11:40
Откуда: Moscow

31 окт 2006, 16:30

Можно функцией ВПР (смотрите справку Excel) по коду товара
Pomuk
Сообщения: 13
Зарегистрирован: 25 окт 2006, 14:39
Контактная информация:

31 окт 2006, 18:07

Даже при помощи записи макроса вытаскивается функция VLOOKUP. Это функция листа Экселя. Если в каждую строку такую функцию вставлять, я думаю слишком долго отчёт будет работать. Нет ли аналогичонй функции в VBA?.
Pavel55
Сообщения: 405
Зарегистрирован: 20 окт 2006, 11:40
Откуда: Moscow

31 окт 2006, 18:15

а не надо вставлять в каждую ячейку макросом, вы просто протяните формулу мышкой или средставами VBA (.AutoFill)
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

31 окт 2006, 18:28

Pomuk, Любую формулу можно ввести сразу в несколько ячеек, для этого достаточно выделить нужный диапазон, ввести нужную формулу и нажать клавиши CTRL+ENTER. Программно же это будет выглядить так :

Код: Выделить всё

Worksheets(1).Range("A1:A100").Formula = "=B1+C1"

Код: Выделить всё

Worksheets(1).Range("A1:A100").FormulaR1C1 = "=RC[1]+RC[2]"
Pomuk
Сообщения: 13
Зарегистрирован: 25 окт 2006, 14:39
Контактная информация:

01 ноя 2006, 11:53

Да как вставить формулу в диапазон это я знаю. Просто эта формула в конечном итоге будет в каждой ячейке, и соответственно, пересчитываться будет в каждой ячейке. А что-то мне потсказывает, что если я в VBA посчитаю и вставлю значение в ячейку, то выйдет быстрее. Если строк с формулами будет 10 то это конечно не критично. А если уже пару тысяч, то пауза заметна. А если формулы будут в двух ячейках в строке, а не в одной...
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

01 ноя 2006, 13:09

Pomuk, Все знают как ввести формулу в ячейку, а вот как заполнить целый диапазон, почему-то нет. Впрочем, если Вы не хотите вводить формулы с последующей заменой их на значения, которые они возвращают (см. ниже), то смотрите здесь ...

Код: Выделить всё

With Worksheets(1).Range("A1:A100")
     .Formula = "=B1+C1"
     .Value = .Value
End With
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

01 ноя 2006, 23:37

Просто эта формула в конечном итоге будет в каждой ячейке, и соответственно, пересчитываться будет в каждой ячейке. А что-то мне потсказывает, что если я в VBA посчитаю и вставлю значение в ячейку, то выйдет быстрее.
Уверен, что в Вашем случае будет как раз наоборот.
Если сподобитесь сравнить, то сообщите здесьт результат, если не трудно.
Pomuk
Сообщения: 13
Зарегистрирован: 25 окт 2006, 14:39
Контактная информация:

10 ноя 2006, 11:56

Да. вы правы. При помощи VBA получается медленнее.
Да я подумал, это и логичней. То ли бэйсик это будет делать, то ли по любому более быстрый язык, на котором написан Excell (если не изменяет память - на С)
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

10 ноя 2006, 12:51

А в этом никто и не сомневался, именно поэтому все и предлагали Вам использовать формулы.
Ответить