Страницы: 1
RSS
Удаление ячеек в столбце по условию
 
Может кто сталкивался с задачей.
Есть массив данных эксель. Необходимо по столбцам выборочно удалить (очистить) ячейки которые попадают под определенное условие.
В частности, отсеять данные выпадающие из монотонно возрастающего ряда и 2-й вариант оставить в ряду только максимальное значение.  
В качестве примера файл во вложении.
Как лучше и проще это сделать? В примере данных мало, в реальных задачах около 100-300 столбцов по 200-500 строк.  
 
Цитата
bonza написал:
определенное условие.
Какое? из примера не понятно.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Цитата
bonza написал:
монотонно возрастающего ряда
А почему тогда значения из диапазона C14:C18 не вывели в отдельный столбец?
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Извиняюсь из за спешки не описал подробно.
Ряд данных (в обновленном файле приведен) в столбце, значения этих данных от первого (нумерованный столбец В) до 20 меняются произвольно, нам необходимо удалить из столбца те данные которые не соотв. правилу, каждое следующее число должно быть больше больше предыдущего. Начало отсчета это первая ячейка в столбце. Рядом привел диаграммы которые наглядно демонстрируют результат.
Таких столбцов на листе у нас сотни, поэтому решили написать макрос или надстройку.
 
 
вот примерно по такому принципу.
Код
for each aa in [a1:a10]
  if aa.row<>1 and aa<=aa.offset(-1,0) then
    aa.clearcontents
  end if
next 
 
Цитата
Anchoret написал:
if aa.row<>1 and aa<=aa.offset(-1,0) then
Спасибо!
Проверил, но получается, сравниваются только соседние ячейки? результат работы во вложении
 
В итоге нужно получить значения ячеек которые во всем диапазоне столбца только растут.  
 
Диапазоны сами укажете, но вроде как нужно получается.
Код
Sub test()
    Dim arr(), i&, j&, x&
    arr = ActiveSheet.UsedRange.Value
    For x = 1 To UBound(arr, 2)
        For i = 1 To UBound(arr)
            For j = i + 1 To UBound(arr) - 1
                If Not IsEmpty(arr(j, x)) Then _
                If arr(j, x) < arr(i, x) Then arr(j, x) = Empty Else Exit For
            Next j
        Next i
    Next x
    ActiveSheet.Range("a1").Resize(UBound(arr), UBound(arr, 2)) = arr
End Sub
Изменено: Nordheim - 23.03.2018 15:09:48
"Все гениальное просто, а все простое гениально!!!"
 
Спасибо!!!! Все работает! Спасибо еще раз!!!
Страницы: 1
Наверх