Страница 1 из 2
Сравнение значений в ячейках
Добавлено: 07 апр 2011, 18:52
Interactive
Помогите пожалуйста.
Ситуация такая:
есть столбец со значениями артикулов товара и названием, формат примерно такой:
571716 0191 3PPK DAVIS CREW SOCK
681721 0001 2PPK LIGHT WEIGHT CREW SOCK
571720 0001 6PPK DAVIS CREW SOCK
и так далее
весь текст в одной ячейке
Также есть столбец только с артикулом товара, например
571716 0191
681721 0001
571720 0001
Всего примерно 800 значений
Нужен макрос, который будет сравнивать значения артикула со значениями, где указан артикул и наименование и если есть совпадение, то выделить ячейку (закрасить, сделать жирным, неважно).
Просто вручную перелопачивать такой массив очень не хочется =)
Заранее благодарю.
Re: Сравнение значений в ячейках
Добавлено: 07 апр 2011, 21:57
Interactive
Вопрос решён. Если кому-то интересно, то вот макрос:
Sub MySelection()
Dim a As New Collection
For Each C In Cells.Range("A1:A1000").Cells
If (C.Value <> "") Then
a.Add (C.Value)
End If
Next
For Each C In Cells.Range("B1:B1000").Cells
For Each V In a
If (Left(C.Value, Len(V)) = V) Then
C.Interior.ColorIndex = 8
End If
Next
Next
End Sub
В столбце A содержались значения артикула, который надо было сравнить, а в B артикул+полное название.
Re: Сравнение значений в ячейках
Добавлено: 08 апр 2011, 06:39
SAS888
На мой взгляд, решение далеко не оптимальное: "куча" циклов, цикл в цикле, непосредственная работа с ячейками листа и т.д.
Можно существенно проще и быстрее:
Код: Выделить всё
Sub Main()
Dim i As Long, a(): a = Range([A1], Cells(Rows.Count, 1).End(xlUp)).Value
With Application
.FindFormat.Clear: .ReplaceFormat.Clear: .ScreenUpdating = False
.ReplaceFormat.Interior.ColorIndex = 36
For i = 1 To UBound(a, 1)
If a(i, 1) <> "" Then .[B:B].Replace a(i, 1), a(i, 1), , , , , , True
Next
End With
End Sub
Re: Сравнение значений в ячейках
Добавлено: 11 апр 2011, 14:30
Андриано73
Уважаемые программисты помогите неучу написать макрос. Так как в макросах я ни какой ,то приходиться все делать вручную. Задача такая: Есть прайс в екселе, состоящий из 6 столбцов.
1 - порядковый номер;
2 - тип оборудования;
3 - код оборудования;
4 - кол-во;
5 - цена за единицу;
6 - сумма;
Так как прайс приходится постоянно обновлять (поставщиков много), то нужно чтобы макрос сравнивал цены оборудования из разных книг и в соответствующей ячейки где "цена", изменял её на новое значение. Обозначение столбцов одинаковое в обоих книгах.
Re: Сравнение значений в ячейках
Добавлено: 13 апр 2011, 05:48
SAS888
Как задавать имя листа и имя файла, из которого требуется получить обновленные значения?
Лучше всего прикрепите пример с этими файлами по несколько строк.
Re: Сравнение значений в ячейках
Добавлено: 20 апр 2011, 13:18
Андриано73
SAS888 писал(а):Как задавать имя листа и имя файла, из которого требуется получить обновленные значения?
Лучше всего прикрепите пример с этими файлами по несколько строк.
Доброго времени суток. Господа програмиссты помогите написать макрос для Excel. Задача такая. Нужно чтобы включая макрос он выполнял обновление данных цены в прайсе. Подробнее:
Есть книга с прайсом. В ней один лист- "Прайс". Каждую неделю приходит обновление цен на товары в этом прайсе. Поставщиков много поэтому и товаров тоже очень много. Формат листа "Прайс" отличается от новых прайсов поставщиков, но в моём листе "Прайс" есть колонка "Код" и "Цена", как и прайсе поставщиков. Чтобы обновить цену мне приходиться по коду со своей страницы "Прайс" (скопировав его в буфер) через пункт меню "найти" искать товар с темже кодом в прайсе поставщика. Затем новую цену переносить в свой лист. Работа ужасно трудоемкая, когда в прайсе 20000 наименований. Я хочу чтобы моя работа заключалась только в том, чтобы скопировать новый прайс поставщика в свою книгу, и назвав его - например "Прайс 2"- запустить макрос или скрипт, чтобы он сам поочереди обновил цену у каждого товара из моего прайса. Из первой строки моего прайса копировал код товара - находил его в обновлении прайса поставщика - брал новую цену из столбца "Цена" и копировал её в сответствующую ячейку на моём листе также в столбце "Цена". Есть одна тонкость в обновлении прайса могут быть новые товары и могут отсутствовать. В этом случае не плохо было-бы помечать их заливкой эти позиции - В моём прайсе если не обновился, а в прайсе обновления если новый товар.
P.S. Все прайсы я копирую в одну книгу: "Прайс"- это мой прайс, "Прайс2","Прайс3","Прайс4" и т. д.- это прайсы обновления. Получается несколько листов в книге.
Re: Сравнение значений в ячейках
Добавлено: 21 апр 2011, 06:52
SAS888
Посмотрите вложение. Откройте файл "Прайс.xls" и нажмите кнопку "Обновить".
В появившемся окне выберите файл, из которогол требуется получить обновления.
Строки с обновленными ценами будут окрашены в желтый цвет. Причем, не зависимо от того, совпадает новая цена со старой, или нет (не оговорено в условии задачи). В файле-источнике обновлений, новые (ненайденные) строки будут окрашены в зеленый цвет. В основной файл эти строки перенесены не будут (в условии такой задачи нет).
Re: Сравнение значений в ячейках
Добавлено: 22 апр 2011, 09:17
Андриано73
SAS888 писал(а):Посмотрите вложение. Откройте файл "Прайс.xls" и нажмите кнопку "Обновить".
В появившемся окне выберите файл, из которогол требуется получить обновления.
Строки с обновленными ценами будут окрашены в желтый цвет. Причем, не зависимо от того, совпадает новая цена со старой, или нет (не оговорено в условии задачи). В файле-источнике обновлений, новые (ненайденные) строки будут окрашены в зеленый цвет. В основной файл эти строки перенесены не будут (в условии такой задачи нет).
Выдает ошибку:
Run-time error '1004'
Method 'Range' of object '_Global' failed
Нажал кнопку "Debug" в выделенной строке какаято ошибка...:
Private Sub Main()
Dim ws As Worksheet, i As Long, fPath As String, x As Range, a()
Application.ScreenUpdating = False
With Application.FileDialog(msoFileDialogOpen)
.Show: If .SelectedItems.Count = 0 Then Exit Sub Else fPath = .SelectedItems(1)
End With
Set ws = ThisWorkbook.Sheets(1): Workbooks.Open fPath: Sheets(1).Activate
Cells.Interior.ColorIndex = xlNone: ws.Cells.Interior.ColorIndex = xlNone
a = Range("C2:E" & Cells(Rows.Count, 3).End(xlUp)).Value
=> в этой строке
For i = 1 To UBound(a, 1)
If a(i, 1) <> "" Then
Set x = ws.[C:C].Find(a(i, 1), , , xlWhole)
If x Is Nothing Then
Cells(i, 1).Resize(, 5).Interior.ColorIndex = 4
Else
x.Offset(, 2) = a(i, 3)
Intersect(x.EntireRow, ws.[A:F]).Interior.ColorIndex = 6
End If: End If: Next: ws.Activate
End Sub
Re: Сравнение значений в ячейках
Добавлено: 23 апр 2011, 16:20
SAS888
Строку
Код: Выделить всё
a = Range("C2:E" & Cells(Rows.Count, 3).End(xlUp)).Value
замените на
Код: Выделить всё
a = Range("C2:E" & Cells(Rows.Count, 3).End(xlUp).Row).Value
Re: Сравнение значений в ячейках
Добавлено: 25 апр 2011, 10:35
Андриано73
SAS888 писал(а):Строку
Код: Выделить всё
a = Range("C2:E" & Cells(Rows.Count, 3).End(xlUp)).Value
замените на
Код: Выделить всё
a = Range("C2:E" & Cells(Rows.Count, 3).End(xlUp).Row).Value
Добрый день. Все обновилось, но вот только в файле обновлении зелёной заливкой окрашиваются даже те строки, которые в основном прайсе окрасились в желтый. И ещё позиции без кода в прайсе есть, они были пропущены. Можно ли их проверять по типу только.