Как удалить определенное значение с помощью команд VBA? - PullRequest
0 голосов
/ 05 января 2019

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

Вот что у меня есть.

Function MinDel(Stuff)

MinDel = Application.Worksheetfunction.min(stuff)

End Function

Как удалить значение MinDel?

Ответы [ 3 ]

0 голосов
/ 05 января 2019

Приведенная ниже процедура удалит самое низкое значение в выборке при условии, что выборка содержит более одной ячейки. Он игнорирует все, кроме первого столбца выбора.

Sub DelMin()
    ' 05 Jan 2019

    Dim Arr As Variant, i As Integer
    Dim Mm As Variant, m As Integer

    With Selection
        If .Cells.Count > 1 Then
            Arr = .Value
            For i = 1 To UBound(Arr)
                If Not IsEmpty(Arr(i, 1)) Then
                    If IsEmpty(Mm) Or (Arr(i, 1) < Mm) Then
                        Mm = Arr(i, 1)
                        m = i
                    End If
                End If
            Next i
            .Cells(m, 1).ClearContents
        End If
    End With End Sub
0 голосов
/ 05 января 2019

Как упоминалось в комментариях, UDF (пользовательская функция) не может изменить значение или диапазон в Excel по умолчанию, и следует использовать Sub. Это мой способ удалить минимальное значение в Selection:

Public Sub DeleteMinimum()

    Dim myRange As Range
    Dim minValue As Double
    Dim myMin As Range        
    If Not TypeOf Selection Is Excel.Range Then Exit Sub
    Dim valueAssigned As Boolean: valueAssigned = False
    minValue = 0

    For Each myRange In Selection
        If IsNumeric(myRange) Then
            If Not valueAssigned Then
                valueAssigned = True
                minValue = myRange
                Set myMin = myRange
            Else
                If myRange < minValue Then
                    minValue = myRange
                    Set myMin = myRange
                End If
            End If
        End If
    Next myRange

    If Not myMin Is Nothing Then
        myMin = "DELETED!"
    End If

End Sub
0 голосов
/ 05 января 2019

Вы можете изменить функцию с здесь вот так

Option Explicit

Function AddressOfMax(rng As Range) As Range
    Set AddressOfMax = rng.Cells(WorksheetFunction.Match(WorksheetFunction.Max(rng), rng, 0))
End Function

Function AddressOfMin(rng As Range) As Range
    Set AddressOfMin = rng.Cells(WorksheetFunction.Match(WorksheetFunction.Min(rng), rng, 0))
End Function

Sub TestIt()
Dim rg As Range
Dim rgMin As Range

    Set rg = ActiveSheet.Range("A1:A6")
    Set rgMin = AddressOfMin(rg)
    rgMin.Clear

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