2017-05-12 26 views
1

元のワークシートを変更せずに特定の条件に一致するデータをあるワークシートから別のワークシートにコピーします。元のワークシートを変更せずに、あるワークシートから別のワークシートにデータをコピーします。

ワークシート「見通し」から最後の行を探して、必要な条件を選択して、他のワークシート「結果」にコピーしますが、どちらのワークシートも同じに見えます。

フィルタ基準を満たさない行は、元のワークシート「見通し」から削除されます。

元のワークシートを変更しないでください。また、特定の列をキャプチャしているので、「結果」ワークシートに必要のない列が隠れてしまいます。

Sub ProspectList() 

    Dim r As Range 

    Dim ws As Worksheet 

    Set ws = ActiveSheet 

    ws.Range("A1").AutoFilter 


    LastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row 
    LastCol = ActiveSheet.Cells(1, Columns.Count).End(xlUp).Column 

    With Sheets("Prospect List").Range([A2], [A2].SpecialCells(xlCellTypeLastCell)) 
     ws.Range("A1").AutoFilter field:=13, Criteria1:="Pipeline" 
     [B:B].EntireColumn.Hidden = True 
     .Copy 
     [C:C].EntireColumn.Hidden = True 
     .Copy 
     [E:E].EntireColumn.Hidden = True 
     .Copy 
     [H:H].EntireColumn.Hidden = True 
     .Copy 
     [I:I].EntireColumn.Hidden = True 
     .Copy 
     [K:K].EntireColumn.Hidden = True 
     .Copy 
     [L:L].EntireColumn.Hidden = True 
     .Copy 
     [B:B].EntireColumn.Hidden = False 
     [C:C].EntireColumn.Hidden = False 
     [E:E].EntireColumn.Hidden = False 
     [H:H].EntireColumn.Hidden = False 
     [I:I].EntireColumn.Hidden = False 
     [K:K].EntireColumn.Hidden = False 
     [L:L].EntireColumn.Hidden = False 
    End With 

    With Sheets("Results") 
     If .Cells(Sheets(1).Rows.Count, 1).End(xlUp) = "" Then 'it's a clean sheet 
      .Cells(Sheets(1).Rows.Count, 1).End(xlUp).PasteSpecial Paste:=xlPasteValues 
     Else 
      .Cells(Sheets(1).Rows.Count, 1).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues 
     End If 
    End With 
    Application.CutCopyMode = False 

End Sub 
+2

が問題である何、それはエラーを投げている?アクティブ化期待どおりに働いていない? – CallumDA

+2

これは、意図したとおりに動作しないことはほとんどありません: 'ActiveSheet.Cells(1、Columns.Count).End(xlUp).Column'。私はあなたが 'xlToLeft'を使うべきだと思います。 – CallumDA

+0

'Prospects'シートで範囲を指定します。上ですでに指摘したLastColumnを指定する際にエラーがありますが、その変数は使用しません。次に、そのシートの列を非表示にします。これらの列を '結果'シートに表示しないようにするには、なぜ「見通し」で非表示にするのですか?コードスニペットには 'Copy'コマンドがありません。したがって、あなたが「結果」シートに貼り付けるものは明らかではありません。しかし、後者の特定の列を省略する場合は、元のシートのデータではなく、「貼り付け」の後に隠すか削除する必要があります。 – Variatus

答えて

0

まず、タイトルが混乱しています。ワークシート「見通し」のデータをフィルタリングし、可視データをコピーして「結果」ワークシートに移動しますか? 2番目:「Dim r As Range」ですが、コードで使用しないでください。 3番目:「LastRow」と「LastCol」を暗くしないでください。コード内で使用しないでください。 Forth:特定の列を非表示にして隠す前に、「列A」をフィルタリングしてから「列Mをフィルタリングする」のはなぜですか? 5番目:あなたの "LastCol"コードが間違っています 6:明白な理由で列を非表示にして非表示にします。 Seventh:コード付きでは意味がありません。何もコピーせず、「結果」シートではなく「sheet1」に貼り付けることで、「sheet1」をテストしています。どのワークシートが「シート(1)」ですか? 「見通し」ワークシートのデータをフィルタリングして、可視データを選択して.SpecialCells(xlCellTypeV‌​isible).Copyを使用して「結果」ワークシートに貼り付けることをお勧めします。

0

これは私がやったことです。

サブProspectList()ワークシート ロング

として暗いLASTROW

設定WS = ActiveSheet

「最後の行を見つけて、新しいシートに完全にシートをコピー LASTROW = ActiveSheet.Cellsとして

薄暗いWS ( "A1:M" & LastRow).Copy Destination:= Sheets( "Results")。範囲( "A1(M)"、 "A1" ") '新しい「結果」シートをアクティブに設定します
枚のワークシート( "結果")。

'filter by criteria and hide columns not needed 
With Sheets("Results") 
    ws.Range("A1").AutoFilter Field:=13, Criteria1:="Pipeline" 

    [B:B].EntireColumn.Hidden = True 
    [C:C].EntireColumn.Hidden = True 
    [E:E].EntireColumn.Hidden = True 
    [H:H].EntireColumn.Hidden = True 
    [I:I].EntireColumn.Hidden = True 
    [K:K].EntireColumn.Hidden = True 
    [L:L].EntireColumn.Hidden = True 
    [M:M].EntireColumn.Hidden = True 
End With 

Application.CutCopyMode = False 

End Subの

関連する問題