CODE根据其他三个单元格的值更改单元格的文本

时间:2014-09-12 23:23:51

标签: vba excel-vba excel

的所有人。

我目前正在使用以下代码根据其他单元格中的文本更改单元格的文本。我还想做的是,某些单元格会根据这些单元格中的数字/日期更改文本。

示例:如果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

1 个答案:

答案 0 :(得分:0)

您可以创建自定义函数来执行此操作,如下所示:

MsgBox(IsNumberOrDate(Range("J2:L2")))

或者对于非连续的细胞:

MsgBox(IsNumberOrdate(Range("J2", "F2")))

以下是如何做到这一点。创建一个返回布尔值的函数。将值数组发送到函数,然后迭代数组中的项值,测试每个值是 数字还是日期(除非你的日期是字符串,否则可能实际上是多余的),如果有的话这些项目既不,那么该函数返回False。如果所有项目都是日期/数字,则该函数返回True。您可能需要稍微修改它,具体取决于您对空单元格的处理方式(这些将评估为 numeric ),通常。

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