【发布时间】:2016-05-28 16:46:06
【问题描述】:
我有一个 Sub 可以进行一些简单的格式化,然后我需要它来评估和计算一列是否包含“1”或不包含任何内容,以及该列是否有一个为数字的标题。
Do...Until 循环的第一次迭代完全按照它应该的方式运行。但是,如果我再次尝试运行它,它会将活动单元格一直抛出到工作表 (XFD) 中的最右边一列。我总共需要循环遍历大约 114,000 行。
请看下面的代码,只有第一个循环;这需要嵌套在另一个循环中以循环遍历所有行:
Sub TotalBookCountsProcess()
Dim ws As Excel.Worksheet
Dim numberedBooks As Integer 'Total Number of physical books
Dim virtualBooks As Integer 'Total Number of virtual books
Dim firstBookCol As Integer 'First Column with a book number
Dim ispeecCol As Integer 'ISPEC Column
Dim lastWorksheetCol As Integer 'Last Column in the worksheet after adding total book count columns
Dim loopColOffset As Integer 'Offset column amounts for new row reset after loop
Dim lastItem As String 'Last item number in last row of the worksheet
ActiveCell.End(xlDown).Select
lastItem = ActiveCell.Value
ActiveCell.End(xlUp).End(xlToRight).Select
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = "Total Numbered Books"
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = "Total CS Books"
lastWorksheetCol = ActiveCell.Column
Columns.AutoFit
numberedBooks = 0
virtualBooks = 0
Cells.Range("1:1").Find("ISPEC").Select
ispecCol = ActiveCell.Column
firstBookCol = ispecCol + 1
ActiveCell.Offset(1, 1).Select
loopColOffset = ((lastWorksheetCol - firstBookCol) * -1)
Do Until ActiveCell.End(xlUp).Value = "Total Numbered Books"
If ActiveCell.Value = 1 And IsNumeric(ActiveCell.End(xlUp).Value) = True Then
numberedBooks = numberedBooks + 1
ActiveCell.Offset(0, 1).Select
ElseIf ActiveCell.Value = 1 And IsNumeric(ActiveCell.End(xlUp).Value) = False Then
virtualBooks = virtualBooks + 1
ActiveCell.Offset(0, 1).Select
Else
ActiveCell.Offset(0, 1).Select
End If
Loop
ActiveCell.Value = numberedBooks
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = virtualBooks
ActiveCell.Offset(1, loopColOffset).Select
End Sub
非常感谢任何见解。
【问题讨论】:
-
可以附上工作表的截图吗?有更好的选择来实现您正在尝试的内容,而不是遍历所有单元格。
-
您不需要 VBA 来执行此操作。这可以通过单元格内公式来完成。
-
假设数据从“A1”开始,尝试将
ActiveCell.Worksheet.Range("A1").Select作为第一行。 -
Gary,此宏将在从访问宏导出文件后运行,因此它已经在单元格 A1 中打开。此外,无论启动时活动单元格是什么,当前代码此时都能正常运行。除非我错过了什么。
标签: vba excel iteration do-loops