有没有办法检查列中的所有单元格是否小于1?如果只有少数单元格,前面已知的单元格数量,我会使用下面的代码。
但是,根据具体情况,A列中的单元格数量会有所不同。我需要知道A列中的任何单元格是否小于1。
如果有一个(或多个)单元格的值小于1,我需要一个单元格(例如A1)来显示NOT OK。如果只有所有单元格的值都大于1,我需要单元格(例如A1)才能显示OK。
如果A列中的所有单元格的值都大于1,我想继续并检查B列是否相同。否则,我想保存并关闭工作簿并继续下一个打开的工作簿...还有vba代码。
有关如何在VBA中编写此内容的任何建议?也许除了If(AND...)
之外还有其他方法吗?
Sub IfAnd()
IF(AND(A5>1,A4>1,A3>1,A2>1),"OK", "NOT OK")
End Sub
答案 0 :(得分:1)
此代码将解决您的所有列并将数据插入每个列的第一行
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
答案 1 :(得分:1)
这是一种没有任何工作表功能的方法。
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
对于大型数据集,这应该更快,更有效。特别是如果从最小到最大排序。
答案 2 :(得分:0)
你在这里:
=IF(MAX(A:A)<1)
答案 3 :(得分:0)
如果不需要VBA,这里有一个应该完成工作的工作表公式,并且还会忽略空白和非数字条目:
此公式必须数组输入:
=IF(ISNUMBER(MATCH(TRUE,IF(ISNUMBER($A:$A),$A:$A)<1,0)),"NOT OK","OK")
如果此公式必须位于A1中,请将范围引用从$ A:$ A更改为$ A $ 2:$ A $ 1000其中1000表示数据的最高可行行数。
array-enter 一个公式 公式进入单元格或公式栏,按住 的&LT;点击&lt; ctrl-shift&gt; 输入&gt; 。如果你这样做了 正确地说,Excel会在公式周围放置大括号 {...} 。