2017-05-12 3 views
1

固定列EからSまでのデータテーブルと固定されていない行を含むブックがあります。毎週この表を「要約」という別のワークブックにコピーします。私はテーブルのいくつかの計算を行う必要がありますが、私は最初に列Pのデータを削除し、残りの部分を左にシフトする必要があります。しかし、私は現在の週の列Pを削除して前の週を無視したいだけです。これは私がすでに前の週の列Pを削除したためです。私は現在、手動で行っています。私は週当たり20のデータテーブルを持っているので、私はプロセスの大部分を自動化する必要があるので、時間がかかります。 。列Pを削除した後に必要な計算プロセスのコードを作成しました。ワークシートに貼り付けられたデータの最後のテーブルを見つけて、前のデータに影響を与えずに列Pを削除するにはどうすればよいですか?テーブルの列を削除し、残りの部分をExcelに以前のテーブルに影響を与えずに左にシフトする方法

これは私が使用した計算コードです。おそらく、私は列Pを削除するコードを作成し、この計算コードを実行する前に他のものを左にシフトする必要があります。

Dim ws As WorksheetDim y As Workbook 
Dim rng As Range 
Dim i As Integer, r As Long, j As Long 


Set y = ThisWorkbook 


For Each ws In y.Worksheets 
    For Each rng In ws.UsedRange.SpecialCells(xlCellTypeConstants, 3).Areas 
     If rng.Rows.Count > 1 And rng.Columns.Count = 14 Then 
      j = 2 
      r = rng.Cells(rng.Rows.Count, 1).Row + 1 
      ws.Cells(r, rng.Columns(1).Column).Value = "total expenses" 
      For i = rng.Columns(2).Column To rng.Columns(2).Column + 12 
        ws.Cells(r, i).Formula = "=SUM(" & rng.Columns(j).Address & ")" 
        j = j + 1 
      Next i 
     End If 
    Next rng 
Next 

これは、現在の週テーブルの列P(99-0)を削除する必要があるワークシートに貼り付けた後の表の例です。 Example of the table

+0

これはあまり明確ではありません。週はどのように決められていますか?列Pを削除する行の数は? – jivko

+0

質問を編集しました。この例に基づいて、私は2つのテーブルを持っています、上記のテーブルは先週のデータですが、下のテーブルは現在のデータです。私は全体の列Pを削除し、前の週と同じサイズになるように残りの部分をシフトする必要があります – mmaz

答えて

0

は、あなたのデータレイアウトによると、あなたは列Sをキャプチャし、それに応じて、列Pに移動する最初の必要があります。これを行う必要があります:

With ws 
    .Range(.Range("S1").End(xlDown), .Range("S999999").End(xlUp)).Offset(,-3).Delete Shift:=xlToLeft 
End With 
+0

は、このコマンドを使用する場合は、私は毎回テーブルの範囲を宣言する必要がありますか? – mmaz

+0

@ mmaz計算を続行する前に、これを実行して各wsの列Pを削除することができます。私はこの操作のために 'ws 'を別にする必要はありません。 –

+0

私はコードを試してみましたが、エラーは出ませんでしたが、まだすべての列があり、削除されていません。 – mmaz

0

貼り付ける前に列Pを削除するだけですか?サンプルデータがなければ、あなたの求めるものを伝えるのは難しいです。

Columns("P:P").Select 
Selection.Delete Shift:=xlToLeft 
+0

こんにちは@DavidPedack、私は提案を使用して修正しようとしましたが、動作していないようです。私はこれを試してみた xy.Worksheets ws In xy.Worksheets ws.UsedRange.SpecialCells(xlCellTypeConstants、3).Areas rng.Rows.Count> 1かつrng.Columns.Count = 15 Then 列(「P:P」) Selection.Deleteシフト選択:= xlToLeft エンド 次RNG 次 – mmaz

0

範囲内のインデックスで列を削除できます。

Range.CurrentRegion.Columns(12).Delete Shift:=xlToLeft 

上記の範囲は、テーブルを貼り付けた場所です。 12は列インデックスです。範囲E:S列Pは12です。

+0

これは私のスニペットコードです。ここで、xはソースブック、yは宛先ブックです。 ( "E"&Rows.Count).End(xlUp).Offset(3)。 x.Worksheets( "Air")。範囲( "A14")CurrentRegion.Copy y.Worksheets( "Aired" .PasteSpecial xlPasteValues y.Worksheets( "Aired")。Range.CurrentRegion.Columns(12).Delete Shift:= xlToLeft ただし、エラーが発生しました。実行時エラー '450':引数の数が正しくないか、またはプロパティの割り当てが無効です – mmaz

関連する問題