删除单元格内的值
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
我有一个电子表格,用于插入不同球队的得分值。 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