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

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

我正在使用一个命名单元格 ,从这个位置向右13个位置,我想要开始编号,直到它到达同一命名单元格的2个位置的列中的最后一个单元格。 我问,因为我的表会改变,并有一个命名的参考是有利的。

这是我录制一个macros后清理它。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 

提前致谢。

巧妙地使用命名的范围。 顺便说一句,试试这个:

编辑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。

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

如果这些需要相对于你的命名参考,他们会写成如下:
我列:

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

p柱:

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

EOH是你的命名参考。

将这两列的公式向下拖动1000行以上。 完成。