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

かなり長い間ヘッダー範囲を反復するパスをたどりましたが、左に列を挿入するとヘッダー範囲全体が1つ上にシフトするか、空の列が範囲に追加され、次の反復が行われるため、機能しませんでした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 に答える