Excel VBA。 如果某些单元格的值为0,请在另一个单元格中input“TBD”

我期待自动填充三个string之一,通过,失败和待定

下面的代码适用于PASS和FAIL senerios,但不适用于TBD

在一列(列A)中,我有一堆文件的名字。 如果文件名包含string“ANT”,我有一个跳闸值,填充一个FAIL,任何小于9.54的值

否则,将跳闸值设置为25。

我实际上喜欢的是以下内容:

如果该值包含SPT-SPT (其中astrics是SPT之前或之后的任何值),则将跳闸值设置为25

否则,如果我看到列H中的0,则在列L中input“TBD”

最新的代码使用了一个公式,如下所示:

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,else if逻辑,并想出了以下几点:

 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中的某些单元格保留空白,其他H列中的0表示列L中的TBD(这很好),其他列表中显示FAILS为0时,他们不应该。

有什么build议?

所以如果我理解你的代码和你想要的结果,你正在查看列A,如果A(n)中的任何部分string包含“ANT”,则确定通过/失败的值是9.54。 如果A(n)的任何部分包含string“ SPTSTP ”,那么通过/失败值是25(顺便说一下,在search中使用通配符需要LIKE并评估为布尔值)。但是,如果列H包含0那么L(n)应该是“TBD”而不pipeA(n)中的值是否正确? 如果是这样的话,你需要两个IF语句,一个评估A列之后的列H:

 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”或某种forms的“ SPTSTP ”,则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""))"