2014-09-12 4 views
0

Все.CODE Изменение текста ячейки на основе значения трех других ячеек

В настоящее время я использую приведенный ниже код, чтобы изменить текст ячеек, исходя из того, какой текст находится в других ячейках. То, что я хотел бы также сделать, - это на некоторых ячейках изменить текст на основе номера/даты в этих ячейках.

Пример: если J2, K2 и L2 являются либо датой, либо числом, введите «N» в ячейку N2. Любые идеи, которые будут работать для этого?

код в настоящее время используют, чтобы изменить текст на основе текста:

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

ответ

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 
Смежные вопросы