Функция, которая должна отфильтровывать числа выше 100 и ниже -100 и находить минимальное значение - PullRequest
0 голосов
/ 05 июля 2019

Я работаю над функцией потери VBA, которая читает 11-ю строку другого листа и находит минимальное значение в строке.

Однако абсолютное значение минимума должно быть меньше 100. (В строке отображаются и проценты, и обычные значения, а мне нужен только минимальный процент.)

Кроме того, когда у меня есть значение минимального значения в 11-й строке, я хочу присвоить значение ячейки прямо над переменной, благодаря функции Worst.

Вот то, что я имею до сих пор, благодаря помощи ответов на предыдущий вопрос, который я задал:

Function Loss(worksheet1 As Worksheet) As Double

    Dim min As Double
    Dim i As Integer
    Dim myRight As Long, Colcount As Long

    min = 100

    With worksheet1
        myRight = .Cells(1, .Columns.Count).End(xlToLeft).Column
        For Colcount = 4 To myRight
            If (.Cells(11, Colcount).Value < min) And (Abs(.Cells(11, Colcount).Value) <= 100) Then
                min = .Cells(11, Colcount).Value
            End If
        Next Colcount
    End With

    Loss = min

End Function
Function Worst(worksheet1 As Worksheet) As String

    Dim min As Double
    Dim i As Integer
    Dim myRight As Long, Colcount As Long

    min = 100

    With worksheet1
        myRight = .Cells(1, .Columns.Count).End(xlToLeft).Column
        For Colcount = 4 To myRight
             If (.Cells(11, Colcount).Value < min) And (Abs(.Cells(11, Colcount).Value) <= 100) Then
                 min = .Cells(11, Colcount).Value
                  Worst = .Cells(10, Colcount).Value
             End If
        Next Colcount
    End With

End Function

1 Ответ

0 голосов
/ 06 июля 2019

Разбейте трудную задачу на артефакты.

Worst _ 
Сell_Minimum( _
Range_of_Values_without_Percent (_
Range_get))

'Как и большинство программистов VBA, вы хотите выполнить много действий в одной процедуре - это приводит к сложности.«Давайте упростим - давайте напишем простые односложные методы, цепочка которых неизбежно решит проблему.

Function Range_get(Optional ByVal sMsg As String) _
        As Range
' Your simple CODE
'
End Function

Function Range_of_Values_without_Percent(ByVal r As Range) _
        As Range
' Your simple CODE
'
End Function

Function Cell_Minimum(ByVal r As Range) _
        As Range
' Your simple CODE
'
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...