以1为增量编号,从1到N,无需硬编码

时间:2014-08-03 20:32:35

标签: excel vba autofill named-ranges

我也在这里问过它: http://www.mrexcel.com/forum/excel-questions/796167-numbering-increments-1-1-n.html

我正在使用命名单元格,从该位置, 13 位置向右,我想要开始编号,直到它到达最后一个单元格来自同一命名单元格的 2 位置的列。我问,因为我的桌子会改变,并且有一个命名参考对此有好处。

这是我在录制宏并清理其 .Select 后得到的,它仍然具有硬编码的目标范围。

以下是一个说明性示例:

Sub Macro2()
    Range("endofheaders").Offset(0, 13).FormulaR1C1 = "1"
    Range("endofheaders").Offset(0, 13).AutoFill Destination:=Range("DZ6:DZ21"), Type:=xlFillSeries
End Sub

我希望这不会让人感到困惑,但是当我没有考虑到我的源表会改变它的大小时,下一个代码就是我曾经拥有的代码。它到处都有硬编码范围,这就是为什么当我编辑表格时,它停止了工作。

        With Range("EA6:EA" & Range("DN" & Rows.count).End(xlUp).Row)
            .Cells(1, 1).Value = 1
            .DataSeries Rowcol:=xlColumns, Type:=xlLinear, Step:=1, Trend:=False
        End With

提前致谢。

2 个答案:

答案 0 :(得分:0)

可以编写所有I列单元格公式:=IF(INDIRECT("E" & ROW()) <> "", <formula>, "")
所有P柱单元格公式都可以写成:=IF(INDIRECT("E" & ROW()) <> "", ROW() + 1, "")

如果这些需要与您的命名参考相关,则其编写如下:
I-column:

=IF(INDIRECT("R" & ROW() & "C" & COLUMN(EOH) + 1, FALSE)  <> "", <formula>, "")

P-柱:

=IF(INDIRECT("R" & ROW() & "C" & COLUMN(EOH) + 1, FALSE)  <> "", ROW() + 1, "")

其中EOH是您的命名参考。

拖动这两列&#39;公式下1000多行。完成。

答案 1 :(得分:0)

使用命名范围聪明。顺便说一句,试试这个:

编辑1:如果你想坚持自动填充,我已经包含了代码(参见注释行)

Sub Test()
    Dim rng As Range, rngtofill As Range
    Dim lrow As Long, myformula As String

    myformula = "your_formula"

    With Sheet8 '~~> Change to your actual sheet
        Set rng = .Range("endofheaders")
        lrow = .Range(Split(rng.Offset(0, 2).Address, "$")(1) _
            & .Rows.Count).End(xlUp).Row
        Debug.Print lrow
        Set rngtofill = .Range(rng.Offset(0, 13).Address, _
            Split(rng.Offset(0, 13).Address, "$")(1) & lrow)
        Debug.Print rngtofill.Address
        rngtofill.Offset(0, -7).FormulaR1C1 = myformula
        rngtofill.Formula = "=ROW(A1)"
        rngtofill.Value = rngtofill.Value
        'rngtofill.Resize(1, 1).FormulaR1C1 = "1"
        'rngtofill.Resize(1, 1).AutoFill rngtofill, xlFillSeries
    End With
End Sub

我在编号方面做了另一种方法 Debug.Print的额外行只是检查我是否得到了正确的值 如果您想使用自动填充,则取决于您 我在代码中对它进行了评论。 HTH。