Потскажите, может есть стандартный способ решения данной проблемы?
К примеру, есть Таблица1.
# Название Код количество
1 Булка 1001 10
2 Пряник 1002 20
3 Печенье 235 30
И Таблица2
Код Развес
1001 0,5кг
235 0,9кг
Требуется подставить в первую таблицу, значение поля Развес из второй таблицы, если во второй таблице, есть соответствующий код. При помощи SQL (или в Аccess) 10 секунд делов. А вот в Exсell как при помощи макроса подставить данные значения? Ну не пробегаться же по всей второй таблице в поисках при формировании каждой позиции первой таблицы. Просто уверен, что должен существовать стандартный способ.
Left Join в Excell
Модератор: Naeel Maqsudov
Можно функцией ВПР (смотрите справку Excel) по коду товара
Даже при помощи записи макроса вытаскивается функция VLOOKUP. Это функция листа Экселя. Если в каждую строку такую функцию вставлять, я думаю слишком долго отчёт будет работать. Нет ли аналогичонй функции в VBA?.
а не надо вставлять в каждую ячейку макросом, вы просто протяните формулу мышкой или средставами VBA (.AutoFill)
Pomuk, Любую формулу можно ввести сразу в несколько ячеек, для этого достаточно выделить нужный диапазон, ввести нужную формулу и нажать клавиши CTRL+ENTER. Программно же это будет выглядить так :
Код: Выделить всё
Worksheets(1).Range("A1:A100").Formula = "=B1+C1"
Код: Выделить всё
Worksheets(1).Range("A1:A100").FormulaR1C1 = "=RC[1]+RC[2]"
Да как вставить формулу в диапазон это я знаю. Просто эта формула в конечном итоге будет в каждой ячейке, и соответственно, пересчитываться будет в каждой ячейке. А что-то мне потсказывает, что если я в VBA посчитаю и вставлю значение в ячейку, то выйдет быстрее. Если строк с формулами будет 10 то это конечно не критично. А если уже пару тысяч, то пауза заметна. А если формулы будут в двух ячейках в строке, а не в одной...
Pomuk, Все знают как ввести формулу в ячейку, а вот как заполнить целый диапазон, почему-то нет. Впрочем, если Вы не хотите вводить формулы с последующей заменой их на значения, которые они возвращают (см. ниже), то смотрите здесь ...
Код: Выделить всё
With Worksheets(1).Range("A1:A100")
.Formula = "=B1+C1"
.Value = .Value
End With
- Naeel Maqsudov
- Сообщения: 2551
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Уверен, что в Вашем случае будет как раз наоборот.Просто эта формула в конечном итоге будет в каждой ячейке, и соответственно, пересчитываться будет в каждой ячейке. А что-то мне потсказывает, что если я в VBA посчитаю и вставлю значение в ячейку, то выйдет быстрее.
Если сподобитесь сравнить, то сообщите здесьт результат, если не трудно.
Да. вы правы. При помощи VBA получается медленнее.
Да я подумал, это и логичней. То ли бэйсик это будет делать, то ли по любому более быстрый язык, на котором написан Excell (если не изменяет память - на С)
Да я подумал, это и логичней. То ли бэйсик это будет делать, то ли по любому более быстрый язык, на котором написан Excell (если не изменяет память - на С)
А в этом никто и не сомневался, именно поэтому все и предлагали Вам использовать формулы.