CODE根据其他三个单元的值更改单元格的文本
问题描述:
我目前正在使用下面的代码来根据其他单元格中的文本更改单元格的文本。我还想做的是,在某些单元格基于这些单元格中的数字/日期更改文本。
示例:如果J2,K2和L2是日期或数字,请在单元格N2中输入“N”。任何想法哪些功能将为此工作?
代码目前使用更改文本基于文本:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row > 1 Then
Application.EnableEvents = False
Select Case Target.Column
Case Columns("G:G").Column
If UCase(Target.Text) = "Y" Then
Target = UCase(Target.Text)
Range("I" & Target.Row).Value = "N"
Range("M" & Target.Row).Value = "N"
End If
Case Columns("F:F").Column
If UCase(Target.Text) = "CAR" Or UCase(Target.Text) = "BIKE" Then
Target = UCase(Target.Text)
Range("I" & Target.Row).Value = "N"
ElseIf UCase(Target.Text) = "N" Then
Target = UCase(Target.Text)
Range("I" & Target.Row).Value = "Y"
Range("G" & Target.Row).Value = "N"
Range("H" & Target.Row).Value = ""
End If
Case Columns("F:F").Column
If UCase(Target.Text) = "N" Then
Target = UCase(Target.Text)
Range("I" & Target.Row).Value = "Y"
End If
Case Columns("G:G").Column
If UCase(Target.Text) = "Y" Then
Target = UCase(Target.Text)
Range("I" & Target.Row).Value = "N"
End If
End Select
Application.EnableEvents = True
End If
End Sub
答
您可以创建自定义函数来做到这一点,把它想:
MsgBox(IsNumberOrDate(Range("J2:L2")))
或者非连续的单元格:
MsgBox(IsNumberOrdate(Range("J2", "F2")))
这里是你如何做到这一点。创建一个返回布尔值的函数。将值数组发送到函数,然后迭代数组中的项值,测试每个数值是或数字或日期(实际上可能是多余的,除非您的日期是字符串),如果任何项目是既不是,那么函数返回False
。如果全部项目是日期/数字,则函数返回True
。您可能需要稍微对其进行修改,具体取决于您希望对空单元执行的操作(通常以数字进行评估)。
Function IsNumberOrDate(values As Variant) As Boolean
Dim ret As Boolean
Dim v As Variant
For Each v In values
If IsNumeric(v) Or IsDate(v) Then
ret = True
Else
ret = False
Exit For
End If
Next
IsNumberOrDate = ret
End Function
所以你的情况,你可以这样做:
If IsNumberOrDate(Range("J2:L2")) Then
'do something if all items ARE number or date
MsgBox "All values are numeric/date", vbOkOnly
Else
'do something else if they are not
MsgBox "NOT all values are numeric/date", vbCritical
End If
为什么你需要VBA?这可以通过我认为的公式来完成。只是好奇。 – L42 2014-09-13 01:19:41