Добрый день Без Вашей помощи не смогу удалить все строки, если в выделенном массиве столбца F содержатся дубли, кроме первых и последних. Т.е. если значение встречается однажды или дважды, то его игнорируем (как и все пустые ячейки массива), а если трижды, четырежды..., то удаляем строку с дублем, кроме строк содержащих ячейки с верхним дублем и нижним дублем. И самая нижняя ячейка выделенного массива может содержать как одно значение (без запятой пробела), так и несколько (через запятую пробел). Эти значения также нужно рассматривать как нижние дубли (т.е. не удалять), но рассматривать без учета запятой и пробела. Массив выделяю при помощи кода от _Boroda_
[vba]
Код
r1_ = Cells(1).SpecialCells(xlLastCell).Row 'номер последней используемой строки ar_ = Cells(1, 3).Resize(r1_).Value 'в массив все от С1 вниз на r1_ t_ = "Массив Ниже в F +2" 'текст для поиска For I = r1_ To 1 Step -1 'цикл от r1_ до 1 If ar_(I, 1) = t_ Then 'если элемент массива с номером i равен тексту для поиска fl_ = 1 'флаг равен 1 Cells(I + 2, 6).Resize(r1_ - I - 1).Select ' выдели 6 столбец ' Range("F" & NomerStroki & ":F" & lpRow).Select Exit For 'Заканчиваем цикл End If ' окончание if Next I 'окончание цикла If fl_ <> 1 Then 'если флаг не =1 (мы не нашли искомый текст) MsgBox "Текст ''" & t_ & "'' не найден." 'выводим об этом сообщение End If
[/vba]
Добрый день Без Вашей помощи не смогу удалить все строки, если в выделенном массиве столбца F содержатся дубли, кроме первых и последних. Т.е. если значение встречается однажды или дважды, то его игнорируем (как и все пустые ячейки массива), а если трижды, четырежды..., то удаляем строку с дублем, кроме строк содержащих ячейки с верхним дублем и нижним дублем. И самая нижняя ячейка выделенного массива может содержать как одно значение (без запятой пробела), так и несколько (через запятую пробел). Эти значения также нужно рассматривать как нижние дубли (т.е. не удалять), но рассматривать без учета запятой и пробела. Массив выделяю при помощи кода от _Boroda_
[vba]
Код
r1_ = Cells(1).SpecialCells(xlLastCell).Row 'номер последней используемой строки ar_ = Cells(1, 3).Resize(r1_).Value 'в массив все от С1 вниз на r1_ t_ = "Массив Ниже в F +2" 'текст для поиска For I = r1_ To 1 Step -1 'цикл от r1_ до 1 If ar_(I, 1) = t_ Then 'если элемент массива с номером i равен тексту для поиска fl_ = 1 'флаг равен 1 Cells(I + 2, 6).Resize(r1_ - I - 1).Select ' выдели 6 столбец ' Range("F" & NomerStroki & ":F" & lpRow).Select Exit For 'Заканчиваем цикл End If ' окончание if Next I 'окончание цикла If fl_ <> 1 Then 'если флаг не =1 (мы не нашли искомый текст) MsgBox "Текст ''" & t_ & "'' не найден." 'выводим об этом сообщение End If
Добрый.Макрос работает по выделенному диапазону. Поправите под себя
[vba]
Код
Sub Killer() Dim rng As Range, A(), Sh As Worksheet Set rng = Selection Set Sh = rng.Parent RowStart& = rng(1, 1).Row dx = rng Set List = CreateObject("scripting.dictionary") For n = 1 To UBound(dx) Key$ = dx(n, 1) If Key <> "" Then If n = UBound(dx) Then Keys = Split(Key, ", ") For Each Key_ In Keys If List.Exists(Key_) Then A = List.Item(Key_) paralast = UBound(A) + 1 ReDim Preserve A(paralast) A(paralast) = n - 1 + RowStart List.Item(Key_) = A Else List.Item(Key_) = Array(n - 1 + RowStart) End If Next Else If List.Exists(Key) Then A = List.Item(Key) paralast = UBound(A) + 1 ReDim Preserve A(paralast) A(paralast) = n - 1 + RowStart List.Item(Key) = A Else List.Item(Key) = Array(n - 1 + RowStart) End If End If End If Next Set rng = Nothing Items = List.Items For n = 0 To List.Count - 1 A = Items(n) For i = 1 To UBound(A) - 1 If rng Is Nothing Then Set rng = Sh.Cells(A(i), 1) Else Set rng = Union(rng, Sh.Cells(A(i), 1)) End If Next Next If Not rng Is Nothing Then rng.EntireRow.Delete End If End Sub
[/vba]
Добрый.Макрос работает по выделенному диапазону. Поправите под себя
[vba]
Код
Sub Killer() Dim rng As Range, A(), Sh As Worksheet Set rng = Selection Set Sh = rng.Parent RowStart& = rng(1, 1).Row dx = rng Set List = CreateObject("scripting.dictionary") For n = 1 To UBound(dx) Key$ = dx(n, 1) If Key <> "" Then If n = UBound(dx) Then Keys = Split(Key, ", ") For Each Key_ In Keys If List.Exists(Key_) Then A = List.Item(Key_) paralast = UBound(A) + 1 ReDim Preserve A(paralast) A(paralast) = n - 1 + RowStart List.Item(Key_) = A Else List.Item(Key_) = Array(n - 1 + RowStart) End If Next Else If List.Exists(Key) Then A = List.Item(Key) paralast = UBound(A) + 1 ReDim Preserve A(paralast) A(paralast) = n - 1 + RowStart List.Item(Key) = A Else List.Item(Key) = Array(n - 1 + RowStart) End If End If End If Next Set rng = Nothing Items = List.Items For n = 0 To List.Count - 1 A = Items(n) For i = 1 To UBound(A) - 1 If rng Is Nothing Then Set rng = Sh.Cells(A(i), 1) Else Set rng = Union(rng, Sh.Cells(A(i), 1)) End If Next Next If Not rng Is Nothing Then rng.EntireRow.Delete End If End Sub