2017-11-14 3 views
-1

の上に貼り付け、その後 forループを使用して設定します。たぶん100%確信していないここで使用するより適切なループがあります。条件が満たされた後、小計をコピーするループを取得するのに問題があります。以下のコードを参照してください:、と私はそれぞれの小計をコピーし、各データの上に貼り付けるしようとしているデータVBA

For I = 1000 To 2 Step -1 ' adjust 1000 to the row number of the last element 
If Cells(I, 7).Font.Bold Then 
    Cells(I + 1, 1).Copy 
    Selection.End(xlUp).Select 
    Selection.Offset(1, -7).Select 
    ActiveSheet.Paste 
    Application.CutCopyMode = False 
End If 
Next 

私は、実際の小計をコピーされて実行するマクロを取得することはできませんどのような、それもそれを選択したセルをコピーしません。あなたがループを得るために何をしようとしているのかを、下の写真を見てみる必要がある場合。

enter image description here

+0

あなたが興味を持っている場合、これは、プログラミングなしで行うことができます。左側のサイドバーのレベル2ボタンをクリックするだけです(3レベルの小計を表示します)。これにより、シートは小計行のみに折りたたまれます。次に、必要な場所に物を選択してコピーして貼り付けます。 – dotNET

+1

関連:https://stackoverflow.com/questions/47241731/add-row-after-each-subtotal-excel-vba – pnuts

答えて

0

Cells(I + 1, 1).Copy正しくセルの内容をコピーしているが、それは実際にセルを選択されていません。次に、選択したセルから始まる選択範囲を移動して宛先を設定しようとしていますが、最初にselectionの開始点がループによって設定されていません。それを変更する

一つの方法は、ペーストする時間になるまで.selectを使用しないことです。 .selectは非常に効率が悪く、最小化する必要があるため、これはさらに効率的です。

For I = 1000 To 2 Step -1 ' adjust 1000 to the row number of the last element 
If Cells(I, 7).Font.Bold Then 
    Cells(I + 1, 7).Copy 
    Cells(I + 1, 7).End(xlUp).Offset(1, -6).Select 
    ActiveSheet.Paste 
    Application.CutCopyMode = False 
End If 
Next 
+0

私は最後に、「アプリケーション定義またはオブジェクト定義のエラーを」得た(xlUp).Offset –

+0

私はコードスニペットを更新しました。列1のセルをコピーしてからオフセット-7の列をコピーするエラーが発生しましたが、これはもちろんスプレッドシートの外にあり、見たエラーが生成されます。これはエラーを回避するはずですが、私はあなたが望むセルを正確にコピーしているかどうかはわかりません。セル(I + 1、7)とオフセット(1、-6)を調整して、探している結果を得ます。 – cstricklan

+0

すごくうれしかった!セル(I、7)の値= "総計"の場合、スキップする方法はありますか? if文の中に別のものを入れなければならないのでしょうか? –

関連する問題