2017-06-30 20 views
0

ブックの最初のシートに大量のデータセットをフィルタリングしてから、メインデータの最初の列にあるそれぞれの一意の名前ごとに別のワークシートを作成しますセット。私は与えられた名前に設定された主なデータをフィルタリングした後、私は特定のフィルタの列を小計しようとしていますVBAを使用して小計をExcelで新しいワークシートにコピー

例えば、(のは列Cとしましょう):

Sub CreateSheets() 

    Dim wsCurrent As Worksheet 
    Dim wsNew As Worksheet 
    Dim iLeft As Integer 
    Dim length As Long 

    Set wsCurrent = ActiveSheet 
    Application.ScreenUpdating = False 

    'Copy list of all players and remove duplicates 
    Range("A2", Range("A2").End(xlDown)).Copy Range("AY1") 
    Range("AY1").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes 

    'Iterator 
    iLeft = Range("AY1").CurrentRegion.Rows.Count - 1 

    'For each player 
    Do While iLeft > 13 
     Set wsNew = Worksheets.Add 
     With wsCurrent.Range("A2").CurrentRegion 
      'Player name from copied list 
      .AutoFilter Field:=1, Criteria1:=wsCurrent.Range("AY1").Offset(iLeft).Value 

      'Hits 
      .AutoFilter Field:=3, Criteria1:="1" 
      length = .Range("C" & Rows.Count).End(xlUp).Row 
      wsNew.Range("A1") = "=SUBTOTAL(9," & wsCurrent.Name & "!C2:C" & length & ")" 

      'Turn off filters 
      '.AutoFilter 
     End With 
     'Name player sheet and move onto next 
     wsNew.Name = wsCurrent.Range("AY1").Offset(iLeft).Value 
     iLeft = iLeft - 1 
    Loop 

    'Clear player names in copied region 
    wsCurrent.Range("AY1").CurrentRegion.Clear 
    Application.ScreenUpdating = True 

End Sub 

ここでの主な問題は、小計があることです関数呼び出しは、もはや参照シートをメインシート上で見つけることができません。どんな助けでも大歓迎です。

編集:

次に、以下に正しい小計を示します。

length = .Range("C" & Rows.Count).End(xlUp).Row 
wsNew.Range("A1") = "=SUBTOTAL(9," & wsCurrent.Name & "!C2:C" & length & ")" 
wsNew.Range("A1").Value = wsNew.Range("A1").Value 

最後の行は、フィルタが削除されたときに、目に見える細胞残骸の元の和(代わりに、フィルタを用いて表示されているセルの和をとるのが今除去される)ことを保証します。

答えて

1

小計の計算式で元のシート名を参照してみましたか?

wsNew.Range("A1") = "=SUBTOTAL(9," & wsCurrent.Name & "!C2:C" & length & ")" 

は、私はそれを正しく参照する必要があり9, " & wsCurrent.Name & "!C2:C9,C2:Cを置き換えます。

+0

これを実行すると、値を更新してExcelからファイルエクスプローラを開くように求められますか?これが何のためのものなのか? – rahlf23

+0

コードをそのままそのままコピーしましたか?私が最初に書いたときに二重引用符とアンパサンドは含まれていなかったので、 'SUBTOTAL(9、wsCurrent.Name!C2:C"&length& ")"のように見えました。私が最初に投稿したのと同じようにコピーして、もう一度やり直してください。まだ失敗した場合は、実行中のものを投稿できますか? – Busse

+0

データベースのシート名にスペースが含まれているため、それで、私はその問題を解決しました。唯一のもう一つは、新しいシートの範囲参照(セルをクリックしたとき)は次のようなものです:= SUBTOTAL(9、Sheet1!C1:C2)範囲が間違っています – rahlf23

関連する問題