Excel VBA在Used Range之外写入数据

我一直在处理代码,以计算Excel电子表格中与完整pipe道相对的完整pipe道的百分比,代码如下:

Sub PercentCompletePipes() Dim k As Range Dim Counter As Integer Dim Green As Integer Dim Red As Integer Red = 0 Green = 0 Counter = 0 xTitleId = "Percentage Completed Inverts" MsgBox "This macro defines the percentage of pipes with completed inverts. It ignores all PRIVATE pipes." MsgBox "WARNING: This macro only works with COMPLETED invert excel sheets. Please select the row that you would like to display the data in, and highlight it yellow." For Each k In ActiveSheet.UsedRange.Rows If Counter >= 4 Then If ActiveSheet.Cells(k.Row, 1).Interior.ColorIndex = 4 Then Green = Green + 1 ElseIf ActiveSheet.Cells(k.Row, 1).Interior.ColorIndex = 3 Then Red = Red + 1 ElseIf ActiveSheet.Cells(k.Row, 1).Interior.ColorIndex = 6 Then ActiveSheet.Cells(k.Row, 1).Value = "COMPLETED PIPES:" ActiveSheet.Cells(k.Row, 4).Value = Green ActiveSheet.Cells(k.Row + 1, 1).Value = "INCOMPLETE PIPES:" ActiveSheet.Cells(k.Row + 1, 4).Value = Red ActiveSheet.Cells(k.Row + 2, 1).Value = "PERCENTAGE COMPLETE:" ActiveSheet.Cells(k.Row + 2, 4).Value = (Green / (Red + Green)) * 100 ActiveSheet.Cells(k.Row + 2, 5).Value = "%" ActiveSheet.Cells(k.Row + 3, 1).Value = "NOTE: These values do not account for PRIVATE pipes." End If End If Counter = Counter + 1 Next k End Sub 

正如你所看到的,这个代码将做我之前提到的,尽pipe只是在find最后一行数据之后的单元格,并将其突出显示为黄色。 因为我有数百张纸来做这件事,所以这是非常乏味的,而我宁愿让它find这个电池本身。 但是,这个空白单元格在Excel的UsedRange之外,因此我以前的尝试使这个可能失败了,因为代码看起来没有超出使用的范围。 下面是我正在尝试实现的工作表的图片,您可以看到,为了使代码正常工作,我已将使用范围外的单元格突出显示。 我的excel文件。 此外,我不能简单地让代码寻找第一个“空白”(白色,空白)行来放入数据,因为2行开头是格式分隔符,并保持空白。 任何帮助表示赞赏,让我知道如果你有任何问题。 谢谢!

我喜欢用来select目标的最后一个使用行的第一行的模式是.Range("A" & .Rows.Count).End(xlUp).Offset(1) 。 Flephal指出,这取决于最后使用的行中的第一个数据单元。

在这里输入图像说明

 Sub DemoPercentCompletePipes() PercentCompletePipes ActiveSheet End Sub Sub PercentCompletePipes(ws As Worksheet) Dim cell As Range Dim Counter As Integer, Green As Integer, Red As Integer xTitleId = "Percentage Completed Inverts" MsgBox "This macro defines the percentage of pipes with completed inverts. It ignores all PRIVATE pipes." MsgBox "WARNING: This macro only works with COMPLETED invert excel sheets. Please select the row that you would like to display the data in, and highlight it yellow." With ws 'Define target range starting at "A4" and extending to the last used cell in column A With .Range("A4", .Range("A" & .Rows.Count).End(xlUp)) For Each cell In .Cells If cell.Interior.ColorIndex = 4 Then Green = Green + 1 ElseIf cell.Interior.ColorIndex = 3 Then Red = Red + 1 End If Next End With 'Target the next empty row in Column A With .Range("A" & .Rows.Count).End(xlUp).Offset(1).EntireRow .Cells(1, 1).Value = "COMPLETED PIPES:" .Cells(1, 4).Value = Green .Cells(2, 1).Value = "INCOMPLETE PIPES:" .Cells(2, 4).Value = Red .Cells(3, 1).Value = "PERCENTAGE COMPLETE:" .Cells(3, 4).Value = (Green / (Red + Green)) * 100 .Cells(3, 5).Value = "%" .Cells(4, 1).Value = "NOTE: These values do not account for PRIVATE pipes." End With End With End Sub 

使用在线OCR提取数据

考虑以下:

 Sub Foo1() Dim ws As Worksheet: Set ws = ActiveSheet Dim Rng As Range: Set Rng = Application.Intersect(ws.Range("A:A"), ws.UsedRange) Set Rng = Application.WorksheetFunction.Index(Rng, Rng.Count).Offset(1, 0) Rng.Select End Sub 

在UsedRange内查找列“A”中的最后一个单元,然后偏移1行。