我是一个极端的新手,这可能是一个非常基本的问题,所以请耐心等待。
我有一个看起来像这样的工作表:
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
任何帮助将不胜感激!
谢谢!
答案 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