День добрый.
Убедительная просьба! Если у кого есть какие идеи выкладывайте их здесь.
Очень надо! Пожалуйста.
Собственно задача:
Есть два прайс-листа , которые отличаются наличием разного товара oldPrice.xls and newPrice.xls.
Вопрос
как сделать в newPrice.xls чтобы:
1. на против нового товара в новом столбце вывести значение '1'
2. напротив товара, которого уже нет в новом прайсе, вывести значение '0'
3. строки со старым товаром, который есть в обоих файлах, удалить из файла.
Я так понимаю
в цикле надо перебрать и сравнить ячейки в двух файлах:
1.Если ячейки нет в oldPrice, значит товар новый -> ставим значение '1'
2. сравниваем oldPrice с newPrice, если во втором файле нет товара, значит выводи '0'
3. Если кода совпадают, значит товар старый, - удаляем из файла
У кого какие мысли, если можно подкрепите реальным кодом.
Заранее спасибо
Excel. Сравнить два файла по значениям ячееек.
Модератор: Naeel Maqsudov
Я на днях написал пообный код для сравнения двух листов и поиском отличий в старом и новом. Отправь мне свой майл, я тебе вышлю с пояснениями. Алгоритм примерно такой: сначала ОЛД сравнивается с НЬЮ и все отличия выделяются красным и копируются в отдельны лист РЕПОРТ, затем наоборот и тоже красным и в РЕПОРТ. По две тысячи строк на каждом листе.
можно ли публике посмотреть код?
Влруг посоветуют чего в оптимизации, да и задача не праздная, потомкам пригодится.
Влруг посоветуют чего в оптимизации, да и задача не праздная, потомкам пригодится.
Самоучка 

Откопал для Вас и мне пригодилось
А какой Ваш код Sad ko :?:
Код: Выделить всё
Sub Compare_A_B()
Application.ScreenUpdating = False
Dim i As Integer
Dim stroka1 As Integer: stroka1 = 2 ' íîìåð ïåðâîé ñòðîêè
Dim stroka9 As Integer: stroka9 = 100 ' íîìåð ïîñëåäíåé ñòðîêè
For i = stroka1 To stroka9
a0 = Range("A" & LTrim(Str(i))).Value ' ïîëó÷èì çíà÷åíèå òåêóùåé ñòðîêè, êîëîíêè "A"
b0 = Range("B" & LTrim(Str(i))).Value ' ïîëó÷èì çíà÷åíèå òåêóùåé ñòðîêè, êîëîíêè "B"
If a0 <> b0 Then
r = r + 1
Range("D" & LTrim(Str(i))).Value = "ÇÄÅÑÜ ÍÅ ÐÀÂÍÎ"
' èëè ìîæíî óäàëèòü òåêóùóþ çàïèñü
'Rows(LTrim(Str(i)) & ":" & LTrim(Str(i))).Select
'Selection.Delete Shift:=xlUp
stroka9 = stroka9 - 1
End If
Next
Application.ScreenUpdating = True
Exit Sub
Err0:
Application.ScreenUpdating = True
MsgBox Err.Description & vbCrLf & "íà ñòðîêå " & Str(i)
End Sub
Ser Artur
В редакторе VBA переключись на русский язык, скопируй код и вставь сюда, плиз, а то твои русские комментраии нечитабельны.Ser Artur писал(а):Откопал для Вас и мне пригодилось
Вот мой код. Примитивно, конечно, но написан на скорую руку и что характерно работает.
Суть такая: два листа, открывается форма, вносим названия листов(месяц) в текстбоксы. Конечно надо еще проверку поставить, чтобы проверял есть ли лист с таким именем. Но было не до этого. Хотел поискать попроще, но как через Find не разобрался. Еще видел оператор Like, но с ним тоже еще не работал, поэтому решил по-простому.
Суть такая: два листа, открывается форма, вносим названия листов(месяц) в текстбоксы. Конечно надо еще проверку поставить, чтобы проверял есть ли лист с таким именем. Но было не до этого. Хотел поискать попроще, но как через Find не разобрался. Еще видел оператор Like, но с ним тоже еще не работал, поэтому решил по-простому.
Код: Выделить всё
Private Sub CommandButton1_Click()
lst1 = TextBox1.Text
lst2 = TextBox2.Text
If TextBox1 = Empty Then
MsgBox "Введите название месяца", vbInformation
Exit Sub
TextBox1.SetFocus
End If
If TextBox2 = Empty Then
MsgBox "Введите название месяца", vbInformation
Exit Sub
TextBox2.SetFocus
End If
n1 = Sheets(lst1).Range("B1").CurrentRegion.Rows.Count
n2 = Sheets(lst2).Range("B1").CurrentRegion.Rows.Count
'сверяем первый лист со вторым
Sheets(lst1).Select
Columns(2).Select
Selection.Interior.ColorIndex = xlNone
Range("B2").Select
m1 = 0
For i = 2 To n1
x = Sheets(lst1).Cells(i, 2).Value
z = 0
For j = 2 To n2
y = Sheets(lst2).Cells(j, 2).Value
If x = y Then GoTo tre
Next j
Sheets(lst1).Cells(i, 2).Interior.ColorIndex = 3
m1 = m1 + 1
tre:
Next i
'сверяем второй лист с первым
Sheets(lst2).Select
Columns(2).Select
Selection.Interior.ColorIndex = xlNone
Range("B2").Select
m2 = 0
For i = 2 To n2
x = Sheets(lst2).Cells(i, 2).Value
z = 0
For j = 2 To n1
y = Sheets(lst1).Cells(j, 2).Value
If x = y Then GoTo tren
Next j
Sheets(lst2).Cells(i, 2).Interior.ColorIndex = 3
m2 = m2 + 1
tren:
Next i
Me.Hide
MsgBox "Отличия: на листе " & lst1 & " " & m1 & " значений; на листе " & lst2 & " " & m2 & " значений"
End Sub
-
- Сообщения: 1
- Зарегистрирован: 15 дек 2010, 00:28
В продолжение темы хотелось бы уточнить некоторые особенности.
То что тут предлагается очень хорошо, но только если прайс одной фирмы и сравнивает позиции похожие буква в букву. Хотелось бы попросить умных людей помочь в сравнении нескольких файлов, потому как в одном файле пишется «плата материнская» в другом «материнская плата», либо «сгущенка Рогачев» {моя любимая
}, в другом «Рогачев сгущенка», в третьем «сгущенное молоко Рогачев» и т.д. Исходя из этих соображений хотелось бы Вас попросить помочь, сообразить следующее:
0я колонка – номер строчки 1го прайса
1я колонка – позиции наименования 1го прайса
2я колонка- Процентное соотношение совпадения ко второго прайса к первому.
3я колонка – наименование второго прайса
4я колонка – выключатель (если понадобиться исключить наименование [и цену] из данной строки (ячейки с наименованием и ценами будут пусты или нулевые значения)
5я колонка- Процентное соотношение совпадения ко третьего прайса к первому.
6я колонка- Процентное соотношение совпадения ко третьего прайса ко второму.
7я колонка – наименование третьего прайса
8я колонка – выключатель (если понадобиться исключить наименование [и цену] из данной строки (ячейки с наименованием и ценами будут пусты или нулевые значения)
N1я колонка- Процентное соотношение совпадения ко этого прайса к первому.
N1я колонка- Процентное соотношение совпадения ко этого прайса ко второму.
N1я колонка- Процентное соотношение совпадения ко этого прайса к третьему.
N1я колонка- Процентное соотношение совпадения ко этого прайса к предыдущему .
N2я колонка – наименование второго прайса
N3я колонка – выключатель (если понадобиться исключить наименование [и цену] из данной строки
И соответственно цены (при обнаружении минимальной цены в строке дописывать « min»)
С права установить функцию скрыть строку из команд группировки строк.
Думаю вначале можно вывести диалоговое окно с запросом количества файлов,
второе диалоговое окно спросит наименование файла, листа, столбец наименований, столбец цен и количество строк.
И так попробую привести пример
Прас 1
материнская плата 3500р
сетевая карта 500р
оперативная память 2G 1500р
Прас 2
плата материнская 3600р
память оперативная 2G 1600р
карта сетевая 400р
процессор 6000р
Прас 3
Мат. плата 6500р
Жесткий диск 3500р
Опер. память 1G 1000р
Сет. карта 200р
Проц. 5400р.
предполагаю что данную темку можно реализовать в Access
Уточнение - в место первго прайса можно содать файл с ключевыми словами введенные через точку с запятой в ячейку для поиска нужной позиции по прайсам
( мат.;материнская;плата; ), думаю это упростит задачу поиска нужного товара.
(хотел вставить табличку для примера,но не знаю как, подскажите)
Всем кто это прочитал - ставлю виртуальную бутылку пива
То что тут предлагается очень хорошо, но только если прайс одной фирмы и сравнивает позиции похожие буква в букву. Хотелось бы попросить умных людей помочь в сравнении нескольких файлов, потому как в одном файле пишется «плата материнская» в другом «материнская плата», либо «сгущенка Рогачев» {моя любимая

0я колонка – номер строчки 1го прайса
1я колонка – позиции наименования 1го прайса
2я колонка- Процентное соотношение совпадения ко второго прайса к первому.
3я колонка – наименование второго прайса
4я колонка – выключатель (если понадобиться исключить наименование [и цену] из данной строки (ячейки с наименованием и ценами будут пусты или нулевые значения)
5я колонка- Процентное соотношение совпадения ко третьего прайса к первому.
6я колонка- Процентное соотношение совпадения ко третьего прайса ко второму.
7я колонка – наименование третьего прайса
8я колонка – выключатель (если понадобиться исключить наименование [и цену] из данной строки (ячейки с наименованием и ценами будут пусты или нулевые значения)
N1я колонка- Процентное соотношение совпадения ко этого прайса к первому.
N1я колонка- Процентное соотношение совпадения ко этого прайса ко второму.
N1я колонка- Процентное соотношение совпадения ко этого прайса к третьему.
N1я колонка- Процентное соотношение совпадения ко этого прайса к предыдущему .
N2я колонка – наименование второго прайса
N3я колонка – выключатель (если понадобиться исключить наименование [и цену] из данной строки
И соответственно цены (при обнаружении минимальной цены в строке дописывать « min»)
С права установить функцию скрыть строку из команд группировки строк.
Думаю вначале можно вывести диалоговое окно с запросом количества файлов,
второе диалоговое окно спросит наименование файла, листа, столбец наименований, столбец цен и количество строк.
И так попробую привести пример
Прас 1
материнская плата 3500р
сетевая карта 500р
оперативная память 2G 1500р
Прас 2
плата материнская 3600р
память оперативная 2G 1600р
карта сетевая 400р
процессор 6000р
Прас 3
Мат. плата 6500р
Жесткий диск 3500р
Опер. память 1G 1000р
Сет. карта 200р
Проц. 5400р.
предполагаю что данную темку можно реализовать в Access
Уточнение - в место первго прайса можно содать файл с ключевыми словами введенные через точку с запятой в ячейку для поиска нужной позиции по прайсам
( мат.;материнская;плата; ), думаю это упростит задачу поиска нужного товара.
(хотел вставить табличку для примера,но не знаю как, подскажите)
Всем кто это прочитал - ставлю виртуальную бутылку пива
