如何编写一个“If(和”代码,列中包含未知数量的单元格?

时间:2014-11-28 15:59:53

标签: excel vba excel-vba

有没有办法检查列中的所有单元格是否小于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

4 个答案:

答案 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会在公式周围放置大括号 {...}