Excel VBA. Если Some Cell имеет 0, введите «TBD» в другую ячейку

Я ищу автоматическое заполнение ячейки одной из трех строк, PASS, FAIL и TBD

Код, который у меня ниже, работает для PASS и FAIL senerios, но не для TBD

В одном столбце (столбец A) у меня есть имя группы файлов. Если имя файла содержит строку «ANT», у меня есть значение отключения, чтобы заполнить FAIL, любого значения менее 9,54

Else, установите для параметра отключения значение 25.

Мне бы действительно понравилось следующее:

Если значение содержит SPT-SPT (где астры являются любыми значениями до или после SPT), у меня есть значение отключения, равное 25

Иначе, если я вижу 0 в столбце H, введите «TBD» в столбце L

Последний код использовал формулу и выглядит следующим образом:

Sub PassFail() 'Specify which sheet (name) of the active workbook we want to work on With Sheets("(5) Coax Cable Sweeps Table") 'Determine the range we want to put values into With .Range("L1:L" & .Range("A" & .Rows.Count).End(xlUp).Row) 'Put the standard worksheet formula into all cells at once by specifying the formula for the 1st cell only 'Note that any quote marks in the actual formula need to be doubled up at this point 'This line does not consider any zeros for DTF measurments taken without a load .Formula = "=IF(H1<IF(ISNUMBER(SEARCH(""ANT"",A1)),9.54,25),""Fail"",""Pass"")" 'The below formula DOES NOT WORK as intended. '.Formula = "=IF(H1=0,""TBD"",""=IF(H1<IF(ISNUMBER(SEARCH(""""ANT"""",A1)),9.54,25),""""Fail"""",""""Pass"""")"")" .Value = .Value End With End With End Sub 

Затем я попытался использовать If, elseIf логику и придумал следующее:

 Sub PassFail_v1() Dim x As Long Application.ScreenUpdating = False With ActiveWorkbook.Sheets(8) For x = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row If InStr(.Cells(x, 1).Value, "ANT") > 0 Then .Cells(x, 12).Value = IIf(.Cells(x, 8).Value < 9.54, "Fail", "Pass") ElseIf InStr(.Cells(x, 1).Value, "*SPT*-*STP*") > 0 Then .Cells(x, 12).Value = IIf(.Cells(x, 8).Value < 25, "Fail", "Pass") ' Else ' .Cells(x, 12).Value = IIf(.Cells(x, 8).Value = 0, "TBD", " ") End If Next x End With Application.ScreenUpdating = True End Sub 

Который все еще не работает. Некоторые ячейки в столбце L оставлены пустыми, другие с 0 в столбце H показывают TBD в столбце L (что приятно), а другие показывают FAILS в 0, если они не должны.

Любой совет?

Поэтому, если я понимаю ваш код и ваш желаемый результат, вы смотрите на столбец A, и если какая-либо часть строки в A (n) содержит «ANT», значение для определения Pass / Fail равно 9.54. Если какая-либо часть A (n) содержит строку « SPT- STP », тогда значение pass / fail равно 25 (btw, использование подстановочных знаков в поиске требует LIKE и вычисляет логическое значение.) Однако, если столбец H содержит 0 , то L (n) должно быть «TBD» независимо от значения в A (n), правильно? Если это так, вам нужны два оператора IF, один из которых оценивает столбец H после оценки столбца A:

 With ActiveWorkbook.Sheets(8) For x = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row If InStr(.Cells(x, 1).Value, "ANT") > 0 Then .Cells(x, 12).Value = IIf(.Cells(x, 8).Value < 9.54, "Fail", "Pass") ElseIf .Cells(x, 1).Value Like "*SPT*-*STP*" Then .Cells(x, 12).Value = IIf(.Cells(x, 8).Value < 25, "Fail", "Pass") End If If .Cells(x, 8).Value = 0 Then ' .Cells(x, 12).Value = "TBD" End If Next x End With 

Добавление: Следует отметить, что если A (n) не содержит ни «ANT», ни какой-либо формы « SPT- STP », L (n) останется пустым. Поэтому, если вы видите, что ячейки в столбце L пусты, посмотрите на столбец A и определите, что вы хотите делать в этих случаях.

Вы добавили вторую часть формулы в кавычки. Поскольку это дополнительно к формуле, знак = и дополнительные кавычки не нужны

 .Formula = "=IF(H1=0,""TBD"",""=IF(H1<IF(ISNUMBER(SEARCH(""""ANT"""",A1)),9.54,25),""""Fail"""",""""Pass"""")"")" 

должно быть

 .Formula = "=IF(H1=0,""TBD"",IF(H1<IF(ISNUMBER(SEARCH(""ANT"",A1)),9.54,25),""Fail"",""Pass""))" 
Давайте будем гением компьютера.