2014-09-12 134 views
0

每個人。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 
+0

爲什麼你需要VBA?這可以通過我認爲的公式來完成。只是好奇。 – L42 2014-09-13 01:19:41

回答

0

您可以創建自定義函數來做到這一點,把它想:

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 
相關問題