0

我是这里的一个极端新手,可能是一个非常基本的问题,所以请多多包涵。

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

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

任何帮助,将不胜感激!

谢谢!

4

1 回答 1

0

只要您的工作表如单元格所示开始,这将起作用A1

我沿着迭代标题范围的路径走了很长一段时间,但无法使其工作,因为向左插入一列会将整个标题范围移动到一个以上或在范围中添加一个空列,然后进行下一次迭代ofFor Each将使用新插入的空白列...

我不喜欢你必须如何使用计数器来使用colCntr - 1循环内部的业务,但如果你仔细阅读并设想Range偏移量,这将是有意义的(最重要的是,获得预期的结果!)

长话短说,使用计数器和向后迭代只需要大约一半的代码。:) 可能有一种不那么“循环”的方式来做到这一点,但我被难住了:

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
于 2012-08-16T20:08:19.287 回答