Добрый день! Прошу помощи в решении задачи.. Что нужно: В списке есть одинаковые строки по двум столбцам Артикул и Наименование, в основном таких по 2, но встречается по 3 и более. Необходимо найти одинаковые (сразу по обоим столбцам), определить среди одинаковых самую дорогую и самую дешевую цену, в столбец Е присвоить название "Оригинал" дорогому и "Аналог" дешевому, средние значения цены - удалить строки.
Добрый день! Прошу помощи в решении задачи.. Что нужно: В списке есть одинаковые строки по двум столбцам Артикул и Наименование, в основном таких по 2, но встречается по 3 и более. Необходимо найти одинаковые (сразу по обоим столбцам), определить среди одинаковых самую дорогую и самую дешевую цену, в столбец Е присвоить название "Оригинал" дорогому и "Аналог" дешевому, средние значения цены - удалить строки.anabioss13
Sub Button1_Click() arr = Range("B5:K" & Cells(Rows.Count, "B").End(xlUp).Row).Value For i = 1 To UBound(arr) arr(i, 9) = arr(i, 8) arr(i, 10) = arr(i, 8) For j = 1 To UBound(arr) If arr(i, 2) = arr(j, 2) Then If arr(i, 8) < arr(j, 8) Then arr(i, 9) = arr(j, 8) ElseIf arr(i, 8) > arr(j, 8) Then arr(i, 10) = arr(j, 8) End If End If Next Next
For i = UBound(arr) To 1 Step -1 'Cells(i + 4, "J") = arr(i, 9) 'Cells(i + 4, "K") = arr(i, 10) If arr(i, 9) <> arr(i, 10) Then If arr(i, 8) = arr(i, 9) Then Cells(i + 4, "E") = "Оригинал" ElseIf arr(i, 8) = arr(i, 10) Then Cells(i + 4, "E") = "Аналог" Else 'Cells(i + 4, "E") = "Удалить" Rows(i + 4).Delete End If End If Next End Sub
[/vba]
[vba]
Код
Sub Button1_Click() arr = Range("B5:K" & Cells(Rows.Count, "B").End(xlUp).Row).Value For i = 1 To UBound(arr) arr(i, 9) = arr(i, 8) arr(i, 10) = arr(i, 8) For j = 1 To UBound(arr) If arr(i, 2) = arr(j, 2) Then If arr(i, 8) < arr(j, 8) Then arr(i, 9) = arr(j, 8) ElseIf arr(i, 8) > arr(j, 8) Then arr(i, 10) = arr(j, 8) End If End If Next Next
For i = UBound(arr) To 1 Step -1 'Cells(i + 4, "J") = arr(i, 9) 'Cells(i + 4, "K") = arr(i, 10) If arr(i, 9) <> arr(i, 10) Then If arr(i, 8) = arr(i, 9) Then Cells(i + 4, "E") = "Оригинал" ElseIf arr(i, 8) = arr(i, 10) Then Cells(i + 4, "E") = "Аналог" Else 'Cells(i + 4, "E") = "Удалить" Rows(i + 4).Delete End If End If Next End Sub
Sub tt() n_ = Cells(Rows.Count, 2).End(3).Row - 4 sortir (n_) ar = Range("A5").Resize(n_ + 1, 9) For i = 1 To n_ If ar(i, 3) = ar(i + 1, 3) And ar(i, 4) = ar(i + 1, 4) Then 'ниже такая же If fl_ Then 'она не первая For j = 1 To 9 ar(i, j) = Empty Next j Else 'она первая ar(i, 5) = "Оригинал" End If fl_ = 1 Else 'ниже другая If ar(i, 5) <> "Оригинал" And fl_ Then ar(i, 5) = "Аналог" End If fl_ = 0 End If Next i Range("A5").Resize(n_ + 1, 9) = ar sortir (n_) End Sub
Sub sortir(n_) With ActiveSheet.Sort.SortFields .Clear .Add Key:=Range("C5").Resize(n_) .Add Key:=Range("D5").Resize(n_) .Add Key:=Range("I5").Resize(n_), Order:=xlDescending .Parent.SetRange Range("A4").Resize(n_ + 1, 9) .Parent.Apply End With End Sub
[/vba] В свой файл перенести просто - топаете правой мышой на ярлык листа, выбираете "Исходный текст", вставляете туда код и запускаете макрос tt
У меня такой вариант [vba]
Код
Sub tt() n_ = Cells(Rows.Count, 2).End(3).Row - 4 sortir (n_) ar = Range("A5").Resize(n_ + 1, 9) For i = 1 To n_ If ar(i, 3) = ar(i + 1, 3) And ar(i, 4) = ar(i + 1, 4) Then 'ниже такая же If fl_ Then 'она не первая For j = 1 To 9 ar(i, j) = Empty Next j Else 'она первая ar(i, 5) = "Оригинал" End If fl_ = 1 Else 'ниже другая If ar(i, 5) <> "Оригинал" And fl_ Then ar(i, 5) = "Аналог" End If fl_ = 0 End If Next i Range("A5").Resize(n_ + 1, 9) = ar sortir (n_) End Sub
Sub sortir(n_) With ActiveSheet.Sort.SortFields .Clear .Add Key:=Range("C5").Resize(n_) .Add Key:=Range("D5").Resize(n_) .Add Key:=Range("I5").Resize(n_), Order:=xlDescending .Parent.SetRange Range("A4").Resize(n_ + 1, 9) .Parent.Apply End With End Sub
[/vba] В свой файл перенести просто - топаете правой мышой на ярлык листа, выбираете "Исходный текст", вставляете туда код и запускаете макрос tt_Boroda_