Ошибка несоответствия в функции, которая возвращает минимум в строке другой книги - PullRequest
0 голосов
/ 05 июля 2019

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

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

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

If (.Cells(11, Colcount).Value < min) And (Abs(.Cells(11, Colcount).Value) <= 100) Then

Эта строка дает мне ошибку:

Ошибка времени выполнения '13': несоответствие типов

Кроме того, когда у меня есть значение минимального значения в 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 Ответ

1 голос
/ 05 июля 2019

Вы получите Type Mismatch, если значение ячейки не является числовым.

Добавьте дополнительную проверку, используя IsNumeric перед попыткой сравнения и Abs.

Function Loss(worksheet1 As Worksheet) As Double

    Dim min As Double
    min = 100

    Dim myRight As Long
    myRight = worksheet1.Cells(1, worksheet1.Columns.Count).End(xlToLeft).Column

    Dim colCount As Long

    For colCount = 4 To myRight
        With worksheet1.Cells(11, colCount)
            If IsNumeric(.Value) Then
                If .Value < min And Abs(.Value) <= 100 Then
                    min = .Value
                End If
            End If
        End With
    Next colCount

    Loss = min
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...