3

C/C++ の経験はありますが、 と は初めてVBAですExcel
私が持っているものは次のとおりです。

Range("A7:L7").Select
Selection.Copy
Range("R18").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=True
    'One column copied

A6:L6問題は、セル範囲全体 (から までのすべて)を通過したいということですA41:41

For ループを調べてみましたが、範囲を選択するときにインデックスがどのように機能するか正確にはわかりません。これまでに書いたものは次のとおりです。

pasteLocation = 6
For i = 6 To 41
   Range("A" & i:"L" & i).Select

    Selection.Copy
    Range("R" & pasteLocation).Select '+12 every time to this counter

    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True

    pasteLocation = pasteLocation + 12 'want to move down by 12 every time

Next i

「コンパイル エラー: 予期される: リスト セパレーターまたは )」が表示されるため、明らかに私は何か間違ったことをしています。

VBAインデックス作成の仕組みと私が間違っていることを誰かが説明できますか?

4

3 に答える 3

3

タイプミスがあります:

Range("A" & i:"L" & i).Select

する必要があります

Range("A" & i & ":L" & i).Select
于 2013-10-05T17:46:13.527 に答える
1

Heinzi は答えを持っています。

コードを少し整理することもできます。デフォルトの引数について言及する必要はありません。また、 を使用するとWith読みやすくなるかもしれません。ほとんどのオブジェクトを class まで修飾するのが好きExcelです。おそらく少しやり過ぎですが、確かに害はありません。

Option Explicit

Sub slightlyTidier()

Dim pasteLocation As Integer
pasteLocation = 6

Dim i As Integer
For i = 6 To 41

    With Excel.ActiveSheet
        .Range("A" & i & ":L" & i).Copy

        '+12 every time to this counter
        .Range("R" & pasteLocation).PasteSpecial Paste:=xlPasteAll, Transpose:=True
    End With

        'want to move down by 12 every time
    pasteLocation = pasteLocation + 12
Next i

End Sub
于 2013-10-05T18:10:43.057 に答える