如何写一个“如果(和”列的单元格数量未知的代码?

有没有办法检查列中的所有单元格是否都小于1? 如果只有几个单元格,而前面已知的单元格的数量,我会使用下面的代码。

但是,从一个案件到另一个案件,列A中的单元格数量会有所不同。 我需要知道列A中的任何单元格是否小于1。

如果有一个(或更多)单元格的值小于1,我需要一个单元格(例如A1)来显示NOT OK。 如果只有所有单元格的值大于1,我需要单元格(例如A1)来显示OK。

如果列A中的所有单元格都具有大于1的值,我想要继续并检查列B的相同的事情。 否则,我想保存并closures工作簿,并继续下一个打开的工作簿…也与VBA代码。

任何关于如何在VBA中编写的build议? 也许除了If(AND...)之外还有其他的方法吗?

 Sub IfAnd() IF(AND(A5>1,A4>1,A3>1,A2>1),"OK", "NOT OK") End Sub 

这段代码将解决所有的列,并将数据插入到每列的第一行

 Sub Problems() Dim CurCol, LastRow, LastCol as Long LastCol = Cells(2, Columns.Count).End(xlToLeft).Column For CurCol = 1 to LastCol LastRow = Cells(Rows.Count, CurCol).End(xlUp).Row If WorksheetFunction.Min(Range(Cells(2, CurCol), Cells(LastRow, CurCol))) < 1 Then Cells(1, CurCol).Value = "NOT OK" Else Cells(1, CurCol).Value = "OK" End If Next CurCol End Sub 

这是一个没有任何工作表function的方法。

 Sub test() Dim ws As Worksheet Dim ce As Range Dim sr, lr, lc As Integer 'worksheet you are working with Set ws = ThisWorkbook.Sheets(1) 'column you are searching Set ce = ws.Cells(ws.Rows.Count, 1) 'start row set to 2 so row 1 will contain output Let sr = 2 'search only the last row Let lr = ce.End(xlUp).Row Let lc = ws.Cells(sr, ws.Columns.Count).End(xlToLeft).Column For c = 1 To lc For r = sr To lr If ws.Cells(r, c).Value < 1 Then ws.Cells(1, c).Value = "NOT OK" GoTo NotOK End If Next r ws.Cells(1, c).Value = "OK" NotOK: Set ce = ws.Cells(ws.Rows.Count, c+1) Let lr = ce.End(xlUp).Row Next c End Sub 

这对大数据集应该更快,更高效。 特别是如果它从最小到最大sorting。

这个给你:

 =IF(MAX(A:A)<1) 

如果不需要VBA,下面是一个应该完成这个工作的工作表公式,也将忽略空白和非数字项:

这个公式必须是数组input的

 =IF(ISNUMBER(MATCH(TRUE,IF(ISNUMBER($A:$A),$A:$A)<1,0)),"NOT OK","OK") 

如果此公式必须位于A1中,请将区域引用从$ A:$ A更改为$ A $ 2:$ A $ 1000,其中1000表示数据的最高可能行数。


为了数组input公式,在将公式input到单元格或公式栏后,按住<ctrl-shift>,同时按<enter>键 。 如果你这样做是正确的,Excel将把括号{…}放在公式的周围。