GSerg писал(а):Насколько я помню, "примерный ответ" заключался в том, чтобы тупо скопировать один прайс в конец другого, после чего применить на полном списке расширенный фильтр с установленной галкой "только уникальные записи". Ы?
GSerg писал(а)::roll:
Урок работы с excel, нач. шк...
Создать справа от второго прайса колонку с формулой =ВПР(артикул_из_текущей_строки_нового_прайса; $весь_старый_прайс; номер_столбца_с_артикулами_в_старом_прайсе; ЛОЖЬ).
Растянуть на весь прайс.
Данные - Фильтр - Автофильтр.
В списке, соответствующем формуле, выбрать пункт #Н/Д, чем отфильтровать новый прайс.
Выделить всё, что осталось, скопировать в старый прайс...
labuh писал(а):Второй прайс - Вы имеете в виду прайс Поставщика или мой?
labuh писал(а):А потом (простите великодушно если я сейчас сморожу) функция ВПР - она ведь по артикулу найдет соответствие моего прайса и поставщика, а новые артикулы из прайса поставщика она как добавит?
GSerg писал(а):Выделить всё, что осталось, скопировать в старый прайс... Скопировать, выделив не весь результат фильтровки, а только нужные его колонки...
GSerg писал(а):Делаем описанное ручками, предварительно включив "запись макроса" из соотв. меню.
Ы?
GSerg писал(а):1. Откройте упаковку.
2. Сьешьте орешки...
Сервис - Макрос - Начать запись.
Выполнить действия ручками.
Сервис - Макрос - Остановить запись.
labuh писал(а):Спрошу: если записывать все действия ручками, тогда ведь макрос километровый получится - это нормально?
labuh писал(а):Задам последний вопрос:
Нет ли кода чтобы перенести новые позиции из одного прайса в другой.
ERROR: QUESTION MARK MISSING
Нет ли кода. Ли код таки надо писать самому. Завтра утром мож это сделает кто, может я даже, а сейчас поздно, сонно и лень.
labuh писал(а):Что это?
Sub asdf(ByVal OldPrice As Excel.Range, ByVal NewPrice As Excel.Range, ByVal OldPriceArticleFieldName As String, ByVal NewPriceArticleFieldName As String, ParamArray FieldMappings() As Variant)
Dim opapos As Long, npapos As Long
Dim i As Long, j As Long
Dim t As Excel.Range
Dim v As Variant
Dim mapp As Collection
If OldPrice Is Nothing Then Err.Raise 5, , "Нефиг."
If NewPrice Is Nothing Then Err.Raise 5, , "Нефиг."
If (UBound(FieldMappings) - LBound(FieldMappings) + 1) Mod 2 <> 0 Then Err.Raise 5, , "Нефиг."
If Len(OldPriceArticleFieldName) = 0 Then Err.Raise 5, , "Нефиг."
If Len(NewPriceArticleFieldName) = 0 Then Err.Raise 5, , "Нефиг."
If OldPrice.Rows.Count < 2 Then Err.Raise 5, , "Нефиг."
If NewPrice.Rows.Count < 2 Then Err.Raise 5, , "Нефиг."
opapos = Application.WorksheetFunction.Match(OldPriceArticleFieldName, OldPrice.Rows(1), 0)
npapos = Application.WorksheetFunction.Match(NewPriceArticleFieldName, NewPrice.Rows(1), 0)
Set t = OldPrice.Columns(opapos)
j = OldPrice.Rows.Count
Set mapp = New Collection
If UBound(FieldMappings) < LBound(FieldMappings) Then
On Error Resume Next
For i = 1 To OldPrice.Columns.Count
mapp.Add Array(i, Application.WorksheetFunction.Match(OldPrice.Cells(1, i).Value, NewPrice.Rows(1), 0))
Next
On Error GoTo 0
Else
mapp.Add Array(opapos, npapos)
On Error Resume Next
For i = LBound(FieldMappings) To UBound(FieldMappings) Step 2
mapp.Add Array(Application.WorksheetFunction.Match(FieldMappings(i), OldPrice.Rows(1), 0), Application.WorksheetFunction.Match(FieldMappings(i + 1), NewPrice.Rows(1), 0))
Next
On Error GoTo 0
End If
For i = 2 To NewPrice.Rows.Count
On Error GoTo norecord
Application.WorksheetFunction.Match NewPrice.Cells(i, npapos).Value, t, 0
Next
Exit Sub
norecord:
j = j + 1
For Each v In mapp
OldPrice.Cells(j, v(0)).Value = NewPrice.Cells(i, v(1)).Value
Next
Resume Next
End Sub
GSerg писал(а):Наверное потому, что процедуру с параметрами надо вызывать с параметрами?
ЗЫ: В первоначальном варианте постинга описания параметров вообще не было, т.к. их имена представлялись самоочевидными... Потом, поразмыслив, добавил описание параметров. Увы...
по причине не полного понимания и отсутствия знаний в области программирования
labuh писал(а):Скажите какие описания параметров нужны и я с радостью напишу о них.
Так:
asdf range("а1:g100"), range("Лист2!a5:f500"), "артикул", "article"
Или так:
asdf range("а1:g100"), range("Лист2!a5:f500"), "артикул", "article", "поле1", "field1", "поле2", "field2"
GSerg писал(а):labuh, чтобы писать и/или использовать код в виде исходников, надо что-то знать. Без наличия определённых (весьма небольших, кстати) знаний с обеих сторон просто не получится диалога
Но у меня, скорее всего, не будет к ним интереса. Если они окажутся подходящими под код, интереса не будет ввиду понятности, если неподходящими (из-за не описанных в вопросе хитрых группировок и т.п.) - интерес пропадёт по причине а-ля "возможно, получение того, о чём вы просили, вместо того, что вам на самом деле нужно, чему-то вас научит".
Создай макрос с любым именем без параметров и помести вызов в него.
labuh писал(а):Уверен, что если Вы объясните мне всё спокойно, я пойму.
labuh писал(а):Классно ругаетесь, уважаемый Шаман!
labuh писал(а):Какой вызов?
Спрашивается, чем отличается описанный процесс от непосредственного использования прайса поставщика с тупым удалением имевшегося ранее прайса?
labuh писал(а):А кроме Вас уважаемый Шаман кто-нибудь живет на этом форуме?
Строить учет мат. ценностей в Excel самоубийство. Срочно в базы данных (1-С и пр.).
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 98