如何创建宏来复制整个列但更改单个行号?

时间:2017-07-05 17:38:08

标签: excel excel-vba vba

我继承了一个设计糟糕的工作簿,我试图让它工作得更好,而不是从头开始。 我遇到的最后一个问题是我在列中有一个公式,我需要复制到下一列,但更改公式中引用的行号。最简单的方法是更改​​工作簿的格式,但这会导致用户起义。

=IF((CommaSeparatedListContains(RTM!$I$8,ROW()-2))=TRUE,"X","")

上面的代码是我需要复制的,但是我需要更改它以便它看I9而不是I8。 RTM是单元格所在工作表的名称,而CommaSeparatedListContains是一个宏,如果引用的单元格在逗号分隔列表中具有值(ROW() - 2),则该宏将返回true。 基本上我需要一个宏来向工作表添加一个新列,其工作表与其他工作表一样,这样不知道如何使用Excel的最终用户只需单击一个按钮并添加一列即可。 例如,该代码在单元格A1中,我需要将其移动到B1,保持I相同但增加行号。如果我删除两个$符号,它会将其更改为J8,如果我有$ I8它会保留I8,如果我有$ I $ 8则会保留I8。

1 个答案:

答案 0 :(得分:0)

感谢您重新肯定我的理解。我将根据您的字符串提供一些代码:

Dim LC as Long, i as Integer

Columns(9).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Cells(1,10).Value="" 'Add your header

LC = Cells(1, Columns.Count).End(xlToLeft).Column
i = LC-1 'See description below code

Range("J2:J100").Formula="=IF((CommaSeparatedListContains(RTM!$I$" & i & ",ROW()-2))=TRUE,""X"","""")"

对于i,您希望确保减去正确的数字...给出I8作为您要引用的单元格的示例,并假设第I列是工作表的最后一列,然后是第9列,第8行,是您要引用的单元格。因此,变量i = last column - 1,在本例中。

在这种情况下,该列始终添加到列I的右侧,即表中假定的最后一列。

另一个假设是你使用第2到第100行作为你拥有公式的范围......所以,范围(" J2:J100")。公式将受到影响您公式的实际范围。