删除单元格内的值

Deleting values inside cells

我有一个电子表格,用于插入不同球队的得分值。 A 列有球队名称,B 列有他们的分数。 C 列和 D 列也是如此。有 10 个团队,A 列和 C 列中有 5 个。我的目标是在您为一个团队输入分数时进行编码,它会向右移动两个,当您输入该值时,它会下降一个,剩下两个。我以前有过这个工作,但我不得不再做一件事,然后它就停止工作了。我必须实现,当输入无效分数、非数字、负数等时,它会自行删除。我不确定我做错了什么或者是什么导致我走错了方向。

这是我所拥有的

Private Sub Worksheet_Change(ByVal Target As Range)
Dim TeamScore2 As Integer
Dim TeamScore4 As Integer
Select Case Target.Column
    Case 2: Target.Offset(0, 2).Select
    Case 4: Target.Offset(1, -2).Select
End Select
    TeamScore2 = ActiveCell.Offset(0, 2).Value
    TeamScore4 = ActiveCell.Offset(1, -2).Value
    If TeamScore2 <= -1 Then
    ActiveCell.Value = ""
    End If
    If TeamScore4 <= -1 Then
    ActiveCell.Value = ""
    End If
 End Sub

电子表格图片 最终陈述

我声明了两个整数,当所选单元格取决于偏移量时,(0, 2) 或 (1, -2) 小于或等于 -1,则值应为“”。另外,我不确定如何实现值是字符串的情况。另外,有人说这个问题已经用 link 回答了,但我无法解释它,因为它的想法与我的意图不同。

工作表更改:团队和分数

  • 在单元格 B8 中,您可以使用

    =IF(COUNT(B3:B7,D3:D7)=10,"Yes","No")
    

代码

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    
    Const rgAddress As String = "B3:B7,D3:D7"
    Const MinNum As Long = 0
    Const MaxNum As Long = 100

    Dim srg As Range: Set srg = Range(rgAddress)
    Dim irg As Range: Set irg = Intersect(srg, Target)
    If irg Is Nothing Then Exit Sub
    
    Dim iCell As Range
    Dim ValidCell As Range
    Dim InvalidCells As Range
    Dim iValue As Variant
    Dim IsValid
    
    For Each iCell In irg.Cells
        iValue = iCell.Value
        If VarType(iValue) = vbDouble Then ' number
            If iValue = Int(iValue) Then ' whole number
                If iValue >= MinNum And iValue <= MaxNum Then ' in range
                    Set ValidCell = iCell
                    IsValid = True
                End If
            End If
        End If
        If IsValid Then
            IsValid = False
        Else
            If InvalidCells Is Nothing Then
                Set InvalidCells = iCell
            Else
                Set InvalidCells = Union(InvalidCells, iCell)
            End If
        End If
    Next iCell
    
    If InvalidCells Is Nothing Then
        Dim ColOffset As Long
        ColOffset = srg.Areas(2).Column - srg.Areas(1).Column
        If Intersect(ValidCell, srg.Areas(1)) Is Nothing Then
            ValidCell.Offset(1, -ColOffset).Select
        Else
            ValidCell.Offset(, ColOffset).Select
        End If
    Else
        Application.EnableEvents = False
        InvalidCells.Value = Empty
        Application.EnableEvents = True
        InvalidCells.Cells(1).Select
    End If
 
End Sub