Страница 1 из 1

Left Join в Excell

Добавлено: 31 окт 2006, 15:58
Pomuk
Потскажите, может есть стандартный способ решения данной проблемы?
К примеру, есть Таблица1.

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

И Таблица2

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

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

Добавлено: 31 окт 2006, 16:30
Pavel55
Можно функцией ВПР (смотрите справку Excel) по коду товара

Добавлено: 31 окт 2006, 18:07
Pomuk
Даже при помощи записи макроса вытаскивается функция VLOOKUP. Это функция листа Экселя. Если в каждую строку такую функцию вставлять, я думаю слишком долго отчёт будет работать. Нет ли аналогичонй функции в VBA?.

Добавлено: 31 окт 2006, 18:15
Pavel55
а не надо вставлять в каждую ячейку макросом, вы просто протяните формулу мышкой или средставами VBA (.AutoFill)

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

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

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

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

Worksheets(1).Range("A1:A100").FormulaR1C1 = "=RC[1]+RC[2]"

Добавлено: 01 ноя 2006, 11:53
Pomuk
Да как вставить формулу в диапазон это я знаю. Просто эта формула в конечном итоге будет в каждой ячейке, и соответственно, пересчитываться будет в каждой ячейке. А что-то мне потсказывает, что если я в VBA посчитаю и вставлю значение в ячейку, то выйдет быстрее. Если строк с формулами будет 10 то это конечно не критично. А если уже пару тысяч, то пауза заметна. А если формулы будут в двух ячейках в строке, а не в одной...

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

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

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

Добавлено: 01 ноя 2006, 23:37
Naeel Maqsudov
Просто эта формула в конечном итоге будет в каждой ячейке, и соответственно, пересчитываться будет в каждой ячейке. А что-то мне потсказывает, что если я в VBA посчитаю и вставлю значение в ячейку, то выйдет быстрее.
Уверен, что в Вашем случае будет как раз наоборот.
Если сподобитесь сравнить, то сообщите здесьт результат, если не трудно.

Добавлено: 10 ноя 2006, 11:56
Pomuk
Да. вы правы. При помощи VBA получается медленнее.
Да я подумал, это и логичней. То ли бэйсик это будет делать, то ли по любому более быстрый язык, на котором написан Excell (если не изменяет память - на С)

Добавлено: 10 ноя 2006, 12:51
pashulka
А в этом никто и не сомневался, именно поэтому все и предлагали Вам использовать формулы.