Я думал, что в новом прайсе будет только изменение цены и новые позиции, а если всё, что в наличии - тогда просто генеришь новому прайсу номера, а старый прайс удаляешь полностью. Если название не изменилось - номер будет такой же. Если название новое - номер новый. А генерить можно руками - протянув формулы, или макросом - тоже проставив/протянув формулы или сгенерить кодом по этому алгоритму.
Я думал, что в новом прайсе будет только изменение цены и новые позиции, а если всё, что в наличии - тогда просто генеришь новому прайсу номера, а старый прайс удаляешь полностью. Если название не изменилось - номер будет такой же. Если название новое - номер новый. А генерить можно руками - протянув формулы, или макросом - тоже проставив/протянув формулы или сгенерить кодом по этому алгоритму.Hugo
Добрый всем день Снова вернулся к этой проблеме,но поскольку решения другого,чем предложил ув. Boroda я не нашел,прошу помощи как из огромного количества кодов проверить все коды на уникальность,т.е. что бы один и тот же код не повторялся в столбце дважды.Не какой то конкретный по отношению ко всем,а сразу весь столбец проверить нет ли в нем совпадений.Заранее спасибо всем за ответы
Добрый всем день Снова вернулся к этой проблеме,но поскольку решения другого,чем предложил ув. Boroda я не нашел,прошу помощи как из огромного количества кодов проверить все коды на уникальность,т.е. что бы один и тот же код не повторялся в столбце дважды.Не какой то конкретный по отношению ко всем,а сразу весь столбец проверить нет ли в нем совпадений.Заранее спасибо всем за ответыhimmik
Или кодом - прогнать весь столбец через Dictionary, при ошибке занесения Msgbox. Или в конце сверить количество строк с размером полученного словаря. Код нужен?
P.S. Вот такой вариант с выводом рядом количества повторов по позициям и количества ячеек с повторами в сообщении. Можно заменить на просто вывод мессиджа при первом повторе и выход из кода. [vba]
Код
Option Explicit
Sub otbor()
Dim a(), oDict As Object, i As Long, Temp As String
a = Sheets(1).Range("A1:A" & Sheets(1).Range("A" & Rows.Count).End(xlUp).Row).Value Set oDict = CreateObject("Scripting.Dictionary") For i = 1 To UBound(a) Temp = Trim(a(i, 1)) If Not oDict.Exists(Temp) Then oDict.Add Temp, CStr(1) Else 'MsgBox "Double!": Exit Sub oDict.Item(Temp) = CStr(--oDict.Item(Temp) + 1) End If Next
With ThisWorkbook.Worksheets(1) .Range("C1").Resize(oDict.Count) = Application.Transpose(oDict.keys) .Range("D1").Resize(oDict.Count) = Application.Transpose(oDict.items) End With
Или кодом - прогнать весь столбец через Dictionary, при ошибке занесения Msgbox. Или в конце сверить количество строк с размером полученного словаря. Код нужен?
P.S. Вот такой вариант с выводом рядом количества повторов по позициям и количества ячеек с повторами в сообщении. Можно заменить на просто вывод мессиджа при первом повторе и выход из кода. [vba]
Код
Option Explicit
Sub otbor()
Dim a(), oDict As Object, i As Long, Temp As String
a = Sheets(1).Range("A1:A" & Sheets(1).Range("A" & Rows.Count).End(xlUp).Row).Value Set oDict = CreateObject("Scripting.Dictionary") For i = 1 To UBound(a) Temp = Trim(a(i, 1)) If Not oDict.Exists(Temp) Then oDict.Add Temp, CStr(1) Else 'MsgBox "Double!": Exit Sub oDict.Item(Temp) = CStr(--oDict.Item(Temp) + 1) End If Next
With ThisWorkbook.Worksheets(1) .Range("C1").Resize(oDict.Count) = Application.Transpose(oDict.keys) .Range("D1").Resize(oDict.Count) = Application.Transpose(oDict.items) End With
Во вложении поменяйте (или добавьте внизу новое) значение в столбце А на какое-нибудь уже имеющееся.
А если это прайс из 1000 или более наименований или добавьте эту же формулу в таблицу Kod_po_naim_.rar которую Вы ранее советовали.Заранее спасибо
Quote (_Boroda_)
Во вложении поменяйте (или добавьте внизу новое) значение в столбце А на какое-нибудь уже имеющееся.
А если это прайс из 1000 или более наименований или добавьте эту же формулу в таблицу Kod_po_naim_.rar которую Вы ранее советовали.Заранее спасибоhimmik
Сообщение отредактировал himmik - Воскресенье, 10.04.2011, 15:00
Подскажите,что я делаю не так,уже в своем прайсе вставляю формулу =СУММ(СЧЁТЕСЛИ(Диап;Диап))-СЧЁТЗ(Диап) через Ctrl+Shift+Enter Пишет "Совпадения есть" а вот где они совпадения,не показывает (не подсвечивает красные поля)как в Ваших примерах.Заранее спасибо
Quote (_Boroda_)
Ловите Kod_po_naim_.rar
Подскажите,что я делаю не так,уже в своем прайсе вставляю формулу =СУММ(СЧЁТЕСЛИ(Диап;Диап))-СЧЁТЗ(Диап) через Ctrl+Shift+Enter Пишет "Совпадения есть" а вот где они совпадения,не показывает (не подсвечивает красные поля)как в Ваших примерах.Заранее спасибоhimmik