我有一段代码在给定的单元格之后添加一定数量的单元格(向下)(在下面的示例中名为cell_22c)。 (每节添加11个单元格 - nbDR是节的数量)。在插入每11个单元格之后,我希望我的代码命名单元格“cell_22c_j”,其中j将是“for”循环中的数字,也取决于nbDR。我已经研究了Names功能并尝试使用录制的宏,但我没有设法引用现有的单元格!代码:
Dim nbDR as integer
Dim i as integer
Dim j as integer
For j = 1 to nbDR
For i = 1 To 11
Range("cell_22c")(7).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Next i
ActiveWorkbook.Worksheets("Overview").Names.Add Name:="cell_22c_" & j, _
RefersToR1C1:="=Overview!R45C38"
next j
它应插入11行,然后在该部分中命名一个单元格。再插入11个并在新部分中命名一个单元格等。
我相信我的代码很好,除了RefersTo部分,显然,这是我需要帮助的部分(我认为)。非常感谢任何帮助!
答案 0 :(得分:2)
这是你在尝试什么?我已经对代码进行了评论,但如果您有任何问题请告诉我
Sub Sample()
Dim nbDR As Long, i As Long, j As Long
Dim rw As Long, col As Long
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Overview")
'~~> Change this to whatever you want
nbDR = 5
With ws
'~~> Get the current row and coloumn of the named range
rw = .Range("cell_22c").Row
col = .Range("cell_22c").Column
For j = 1 To nbDR
For i = 1 To 11
'~~> Insert 1 cell below
.Range("cell_22c").Offset(1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Next i
ws.Names.Add Name:="cell_22c_" & j, _
RefersToR1C1:="=" & ws.Name & "!R" & rw + 11 & "C" & col
'~~> the below is only for testing purpose
'Range("cell_22c_" & j).Value = "cell_22c_" & j
Next j
End With
End Sub
修改:如果范围(“cell_22c”)有多个行/列,则相应地更改rw/col
的值,例如
rw = .Range("cell_22c").Row + .Range("cell_22c").Rows
然后
.Range("cell_22c").Offset(1)
变为
.Range("cell_22c").Offset(rw+1)
同样,如果需要,也可以处理col
。
答案 1 :(得分:2)
有些理解你的代码试图完成的内容受到项目超级秘密性质的阻碍,但我相信它基本上可以归结为以下内容。
Dim nbDR As Long, j As Long
With ActiveWorkbook.Worksheets("Overview")
.Range("cell_22c")(7).Resize(11 * nbDR, 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
For j = 1 To nbDR
.Range("cell_22c")(7 + j * 11).Name = "cell_22c_" & j
Next j
End With
无需循环插入行。只需一次插入所有这些,然后循环并以尽可能最短的方式分配名称。