自动填充中断一条记录 [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 的人使用该公式。 你是对的。您的示例更适合更广泛的重用。我可以改变我的,但我们的答案之间唯一真正的区别是ForFor Each 并且我的示例在遇到空白单元格时会跳过枚举......我什至不确定OP想要/需要。 留下你的,让 OP 选择,让未来的读者在变化中找到价值。谁获得信任并不重要,因为我们都同时做到了。此外,将来会有人需要您以稍微不同的方式所做的事情,就像 OP 在其他地方修改了其他人的答案一样。荣誉.. 虽然,我会修改 LastRow,但由于原因,您的答案仍然不同且有效。使用 For Each 和 Offset,并跳过任何空白(不错的添加)

以上是关于自动填充中断一条记录 [Excel-VBA]的主要内容,如果未能解决你的问题,请参考以下文章

帆软表格填一个值,其他表格自动填充该值

如何通过以前的记录值自动填充字段?

ms 根据先前记录的日期访问自动填充日期字段

Emacs:防止自动填充模式在乳胶 \text... 内联命令中断行

excel内容自动填充到word

在excel表格中怎么设置双击之后填自动填充颜色?