Я бы рекомендовал использовать формулу
=IF(TRIM(A1)="","",IF(OR(A1=0.1,A1=0.2,A1=0.5),"FLAT",IF(OR(A1=2,A1=5),"PER","")))
Но так как вы упомянули в комментариях
, так что если это <= 1, то ответ будет FLAT, так что если это больше чем 1, тогда ответ - PER - Кейт Сайсон 16 минут a go </p>
Таким образом, вышеизложенное изменится на
=IF(TRIM(A1)="","",IF(A1<1,"FLAT",IF(A1>=1,"PER","")))
Другой альтернативой является использование события изменения рабочего листа. Это будет действовать только тогда, когда значение в столбце A изменится, и обновит только столбец B. Таким образом, остальная часть рабочего листа безопасна.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim aCell As Range
On Error GoTo Whoa
Application.EnableEvents = False
If Not Intersect(Target, Columns(1)) Is Nothing Then
For Each aCell In Target
If IsNumeric(aCell.Value2) And _
Len(Trim(aCell.Value2)) <> 0 And _
aCell.Column = 1 Then
Select Case aCell.Value2
Case Is < 1: Range("B" & aCell.Row).Value = "FLAT"
Case Else: Range("B" & aCell.Row).Value = "PER"
End Select
End If
Next
End If
Letscontinue:
Application.EnableEvents = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume Letscontinue
End Sub
Если вам все еще нужен макрос, попробуйте этот код:
Option Explicit
Sub Sample()
Dim ws As Worksheet
Dim lRow As Long
Dim i As Long
'~~> Change this to the relevant sheet
Set ws = Sheet1
With ws
'~~> Find last row in Col A
lRow = .Range("A" & .Rows.Count).End(xlUp).Row
'~~> Loop through relevant cells in Col A
For i = 1 To lRow
If IsNumeric(.Range("A" & i).Value2) And _
Len(Trim(.Range("A" & i).Value2)) <> 0 Then
Select Case .Range("A" & i).Value2
Case Is < 1: Range("B" & i).Value = "FLAT"
Case Else: Range("B" & i).Value = "PER"
End Select
End If
Next i
End With
End Sub