自动填充中断一条记录 [Excel-VBA]
Posted
技术标签:
【中文标题】自动填充中断一条记录 [Excel-VBA]【英文标题】:Autofill breaks with one record [Excel-VBA] 【发布时间】:2014-12-11 20:15:30 【问题描述】:我的记录从 B8 单元格开始,我需要在 A 列中对它们进行计数,从单元格 A8 开始。
我使用了这个问题“autofill down according to adjacent column”的答案,但是当记录计数为 0 或 1 时我该如何处理?当有 1 条记录时,它会出错。似乎自动填充无法自动填充一个单元格。
我有一些条件测试零和一,但有没有更简洁的方法呢?
LastRow = Cells(Rows.Count, 2).End(xlUp).Row 'Find last row
If LastRow >= 8 Then 'If recordcount is 1 or greater
Range("A8").FormulaR1C1 = "1" 'First number is "1"
If Not LastRow = 8 Then 'If not recordcount exactly 1
'Enumerate the remaining records with Autofill
Range("A8").AutoFill Destination:=Range("A8:A" & LastRow), Type:=xlLinearTrend
End If
End If
【问题讨论】:
【参考方案1】:这有两种经过测试的方法来完成您正在尝试做的事情。第一种方法是您已经在使用的方法,删除阻止它工作的元素。第二种是另一种检查方法,因为它可能会为您提供未来项目的想法,该项目具有类似的要求,但不需要使用自动填充。
测试
Sub AutoFiller()
Dim LastRow As Long
LastRow = Cells(Rows.Count, "B").End(xlUp).row 'Find last row
Sheets("Sheet1").Cells(8, 1) = 1 'First number is "1"
Range("A8").AutoFill Destination:=Range("A8:A" & LastRow), Type:=xlLinearTrend
End Sub
使用 LOOP 代替自动填充:
Sub VBAAutoFill()
Dim LastRow As Long
Dim count As Long
LastRow = Cells(Rows.Count, 2).End(xlUp).Row
count = 1
For lRow = 8 to LastRow
Sheets("Sheet1").Cells(lRow, 1) = count
count = count + 1
Next lRow
end Sub
EXCEL FUNCTION:计算所有条目,如果您只想知道总共有多少..
COUNTA(B8:B10000)
编辑笔记:详细说明笔记中的过程,纠正错别字。原始编辑添加了解决方案。
【讨论】:
【参考方案2】:My records start in cell B8, and I need to count them in Column A, starting in cell A8.
我的意思是,您实际上是在枚举行。这应该有助于解决您的错误问题,如果它不是您想要的 A
列中的内容,您应该不难做出调整:
Public Sub GetRangeCount()
Dim bRange As Range
Set bRange = Range(Range("B8"), Range("B1048575").End(xlUp))
Dim i As Integer
i = 0
For Each c In bRange
If c.Value <> "" Then
i = i + 1
c.Offset(0, -1).Value = i
End If
Next
End Sub
【讨论】:
那行得通。为 B 的最后一行硬编码 1048575 可能是一个坏主意,以防使用稍旧版本的 Excel 的人使用该公式。 你是对的。您的示例更适合更广泛的重用。我可以改变我的,但我们的答案之间唯一真正的区别是For
与For Each
并且我的示例在遇到空白单元格时会跳过枚举......我什至不确定OP想要/需要。
留下你的,让 OP 选择,让未来的读者在变化中找到价值。谁获得信任并不重要,因为我们都同时做到了。此外,将来会有人需要您以稍微不同的方式所做的事情,就像 OP 在其他地方修改了其他人的答案一样。荣誉.. 虽然,我会修改 LastRow,但由于原因,您的答案仍然不同且有效。使用 For Each 和 Offset,并跳过任何空白(不错的添加)以上是关于自动填充中断一条记录 [Excel-VBA]的主要内容,如果未能解决你的问题,请参考以下文章