Страницы: 1
RSS
Определение границ интервалов, в которых значение ниже заданного критерия
 
Здравствуйте. Я анализирую результаты экспериментов, приходящих в виде текстовых файлов. Для анализа, мне нужно выделить интервалы значений, в которых измеряемый параметр опускается ниже определенного значения. На скриншоте ниже - слева таблица исходных данных, справа - вид, который хотелось бы получить. Структура файлов постоянна. Первый столбец - глубина, оттуда забираются значения TOP и BOTTOM, второй столбец - замеряемый параметр и пятый столбец - критерий для сравнения.

У меня получилось написать процедуру, которая корректно обрабатывает интервалы, у которых есть "начало" и "конец", однако если первое значение параметра в исходном файле будет уже ниже критерия - такое вхождение проигнорируется.
Вот что у меня получилось, а во вложении архив с xlsm и примером исходного файла данных.
Скрытый текст

Заранее благодарен.
 
Формульный вариант нужен?
По вопросам из тем форума, личку не читаю.
 
Код
For i = 0 To UBound(AllText)
    If AllText(i) <> "" Then
        buff = Split(AllText(i), " ")
        For j = 0 To UBound(buff)
            Values(i + 1, j + 1) = buff(j)
        Next j
    End If
Next i
InsideInterval = False
For i = 1 To UBound(Values, 1)
    With Worksheets("Sheet1")
       'Debug.Print (Values(i, 1) & " " & Values(i, 2) & " " & Values(i, 3))
        If InsideInterval = False And Values(i, 2) < Values(i, 5) Then
            InsideInterval = True
            lLastRow = .Cells(Rows.Count, 1).End(xlUp).Row
            Top = Values(i, 1)
            .Cells(lLastRow + 1, 1) = Top
        End If
        If InsideInterval = True And Values(i, 2) > Values(i, 5) Then
            InsideInterval = False
            lLastRow = .Cells(Rows.Count, 2).End(xlUp).Row
            Bottom = Values(i - 1, 1)
            .Cells(lLastRow + 1, 2) = Bottom
        End If
        If InsideInterval = True And i = UBound(Values, 1) Then
            InsideInterval = False
            lLastRow = .Cells(Rows.Count, 2).End(xlUp).Row
            Bottom = Values(i, 1)
            .Cells(lLastRow + 1, 2) = Bottom
        End If
    End With
Next
      
Изменено: heso - 11.03.2019 13:00:52
 
БМВ, спасибо, но не подойдет. Данные на листе я привел больше для демонстрации, тогда как в планах анализировать текстовые файлы без загрузки их в эксель ввиду большого объема и количества.
heso, спасибо, это частично решает проблему. Самый верхний интервал обрабатывается правильно, но остается проблема с последним. Т.е. его нижняя граница, которая в моем случае должна быть последней точкой замера не заносится в таблицу.
Изменено: VSerg - 11.03.2019 12:20:16
 
подкорректировал предыдущий ответ
 
heso, большое спасибо, прекрасно работает.
Страницы: 1
Наверх