Excel VBA如果10行符合特定条件,则返回true或false

情况:如果手术室符合某些标准,我会为手术室做报告,并给他们使用许可。 其中一个标准就是每分钟大约有一百万份可以stream进/stream出房间。 用于测量的计数器输出可以在Excel中打开的数据表。 机器每分钟计数一次,就会在数据表中添加一个新行,显示其计数的部分。

为了给手术室使用许可,柜台必须连续放置10分钟几乎完全相同的100万(由10.000个可允许的部分)。

我需要什么:我需要一个可以比较前10行数据的代码(从行开始:3)。 如果它们满足条件(偏移量为10.000),则填充这些行的单元格vbGreen。 如果它们不匹配,则转到下一行(行:4)并比较接下来的10行。 如果它们匹配填充那些行vbGreen。 如果他们不匹配移动到下一行(行:5),依此类推。

如果没有匹配,则填写cellA1 vbRed。

示例表: 0.3微米(计数)行是我们想要比较的行。 该表的第一行是excel中的第三行。 在单元格C1中,我应该可以input这个所需的值(现在假设为100万)。 如前所述,单元格A1应该在没有匹配的情况下变成vbRed。

Time Stamp | Location 2 | Location 2 | Location 2 | Location 2 | Location 2 -----------| 0.3 micron | 0.3 micron | 0.5 micron | 0.5 micron | Temerature -----------| (counts) | (p/ft^3) | (counts) | (p/ft^3) | (F) ___________|____________|____________|____________|____________|____________ 7/6/2016 | 1555000 | 186600000.0| 800000 | 96000000.0 | 75.2 ___________|____________|____________|____________|____________|____________ 7/6/2016 | 800000 | 96000000.0 | 400000 | 48000000.0 | 75.2 ___________|____________|____________|____________|____________|____________ 7/6/2016 | 1555000 | 186600000.0| 800000 | 96000000.0 | 75.6 ___________|____________|____________|____________|____________|____________ 7/6/2016 | 1010000 | 121200000.0| 800000 | 96000000.0 | 75.2 ___________|____________|____________|____________|____________|____________ 7/6/2016 | 1009000 | 121080000.0| 800000 | 96000000.0 | 75.2 ___________|____________|____________|____________|____________|____________ 7/6/2016 | 1003000 | 120360000.0| 800000 | 96000000.0 | 75.2 ___________|____________|____________|____________|____________|____________ 7/6/2016 | 991000 | 118920000.0| 800000 | 96000000.0 | 75.6 ___________|____________|____________|____________|____________|____________ 7/6/2016 | 1008000 | 120960000.0| 800000 | 96000000.0 | 75.2 ___________|____________|____________|____________|____________|____________ 7/6/2016 | 1009000 | 121080000.0| 800000 | 96000000.0 | 75.2 ___________|____________|____________|____________|____________|____________ 7/6/2016 | 1010000 | 121200000.0| 800000 | 96000000.0 | 75.2 ___________|____________|____________|____________|____________|____________ 7/6/2016 | 1004000 | 120480000.0| 800000 | 96000000.0 | 75.2 ___________|____________|____________|____________|____________|____________ 7/6/2016 | 1000000 | 120000000.0| 800000 | 96000000.0 | 75.2 ___________|____________|____________|____________|____________|____________ 7/6/2016 | 1002000 | 120240000.0| 800000 | 96000000.0 | 75.2 ___________|____________|____________|____________|____________|____________ 7/6/2016 | 1014000 | 121680000.0| 800000 | 96000000.0 | 75.6 ___________|____________|____________|____________|____________|____________ 

续:我不知道从哪里开始,或者如何调用这样的function。 这个网站教会了我很多,但我无法find和创造这样的事情。

我愿意接受任何build议。

你可以AutoFilter() ,如下所示(请参阅注释以根据实际需要调整代码):

 Sub main() Dim area As Range Dim ppm As Double Dim found As Boolean With Worksheets("Rooms") '<--| change "Rooms" to your actual worksheet name ppm = .Range("C1").Value With .Range("F2", .Cells(.Rows.count, 1).End(xlUp)) '<--| assuming data are in columns A to F and start at row 3 -.> headres in row 2 .AutoFilter field:=2, Criteria1:=">=" & ppm * 0.9, Operator:=xlAnd, Criteria2:="<=" & ppm * 1.1 If Application.WorksheetFunction.Subtotal(103, .Cells) > 1 Then For Each area In .Resize(.Rows.count - 1).Offset(1).SpecialCells(xlCellTypeVisible).Areas If area.Rows.count > 9 Then area.Interior.Color = vbGreen found = True Exit For End If Next End If End With .AutoFilterMode = False .Range("A1").Interior.Color = IIf(found, vbGreen, vbRed) End With End Sub 

你可以用循环遍历行(第2行到最后一行减10)来做到这一点。 在循环中,会有一个嵌套循环遍历接下来的9行,并检查条件是否满足。 不符合条件时使用伪继续语句。 让着色代码在嵌套循环之后进行,所以只有满足标准才能执行。

至于没有匹配的红色单元,一个简单的布尔标志将会做。

代码大纲:

 Sub doThis() dim found as boolean found = false dim i as long, j as long, lastline as long lastline = mySheet.Range(relevantRange).End(xlUp).row for i = 2 to lastline - 10 for j = i to 10 if not (cells(i, relevantColumn) + 10001 > cells(j, relevantColumn) _ and cells(i, relevantColumn) - 10001 < cells(j, relevantColumn)) then GoTo continue end if next range(relevantColumn & i & ":" & relevantColumn & i + 9).Interior.ColorIndex = vbGreen found = true exit sub continue: next if not found then 'coloring code end if End Sub 

我没有testing这个,因为我没有适当的数据。 发表评论,如果你需要帮助。