在每行之前插入一列并复制标题

时间:2012-08-16 15:17:36

标签: excel vba excel-vba

我是一个极端的新手,这可能是一个非常基本的问题,所以请耐心等待。

我有一个看起来像这样的工作表:

product ID  desc    color   length  width
2           a       black   5   
3           b               4       7
4           c       brown   8       9
5           d       red             7
6           e                       4
7           f       pink    6       1

我正在尝试编写一个宏,它会在每个属性之前插入一个列(例如desc,color等),然后用它后面的列的标题填充该列。

结果应该是这样的:

product ID       desc       color         length        width
2           desc a    color black  length 5       width 
3           desc b    color        length 4       width 7
4           desc c    color brown  length 8       width 9
5           desc d    color red    length         width 7
6           desc e    color        length         width 4
7           desc f    color pink   length 6       width 1

任何帮助将不胜感激!

谢谢!

1 个答案:

答案 0 :(得分:0)

只要您的工作表按照单元格A1中显示的那样开始,这将有效。

我沿着迭代标题范围的路径已经很长时间并且无法使其工作,因为向左插入一列会将整个标题范围移动一个或将空列添加到范围中,并且For Each的下一次迭代将使用新插入的空白列...

我不喜欢使用计数器如何在循环中使用colCntr - 1业务,但如果您仔细阅读并设想Range偏移量,那么它将是有意义的(并且最重要的是,获得理想的结果!)

长话短说,使用计数器和向后迭代工作的代码大约是一半。 :)可能会有一个更少的" loopy"这样做的方式,但我很难过:

Sub SpecialColumnFormatting()
Dim rng As Range, rngCol As Range
Dim lastCol As Integer, colCntr As Integer
Dim lastRow As Long

'get last row and column
lastRow = Range("A1").End(xlDown).Row
lastCol = Range("A1").End(xlToRight).Column

'grab last col #
colCntr = lastCol

'have to loop backwards
Do Until colCntr = 1

    'insert a column to left
    Range("A1").Offset(0, colCntr - 1).EntireColumn.Insert (xlShiftToRight)

    'you may have to pick this one apart a bit to see what I'm doing
    Set rngCol = Range(Range("A1").Offset(1, colCntr - 1), Range("A1").Offset(lastRow - 1, colCntr - 1))

    For Each rng In rngCol

        rng = Range("A1").Offset(0, colCntr).Text

    Next rng

'decrement
colCntr = colCntr - 1
Loop

End Sub