2016-09-13 19 views
0

私は、不要なデータの行を削除し、複数の基準に基づいて行うデータの行を保持することによって、ワークシートをクリーンアップするためのVBAヘルプを探しています。VBAヘルプ。複数の条件に基づいて行を削除

列Aに「小計:」、列Cに数値を含む行をすべて保持して、その条件に一致しない他の行をすべて削除したいと考えています。

Before Cleanup

Desired Result Requested

+0

を、あなたは 'すべて削除しますか列Cが数値を持たない行を削除し、列Aが「小計:」に等しくない行をすべて削除します(つまり、列A **には「小計:」、列には「小計」を含む列のみが残されます) C)、あるいは 'job code descのあるすべての行それらの隣にある数値の文字列と、文字列「小計」(すなわち、あなたは "小計:" **または**列Cの数値**を含む行が残されます)? – YowE3K

+0

希望の結果がこれになります。 ![After](https://drive.google.com/file/d/0B8FsW0sImRM3UGkydEdiSFZ3Njg/view?usp=sharing) – lPaclMan

答えて

1

私は仕事を得ることができるはずの機能を書きました。

サブ関数から関数を呼び出し、テストする列番号(「A」は1)、テストする値(空白は「」)、ワークシート名テストしたい最後の引数はブール値で、trueの場合は条件の値の一致時に削除されます。それ以外の場合は削除されません。ですから、あなたの上に要求された何をすべきか

Function DeleteCol(iCol As Integer, strCriteria As String, strWSName As String, bPositive As Boolean) 

    Dim iLastCol As Integer 
    Dim wsUsed As Worksheet 

    Set wsUsed = ThisWorkbook.Worksheets(strWSName) 
    iLastRow = wsUsed.Cells(Rows.Count, iCol).End(xlUp).Row 
    For i = iLastRow To 1 Step -1 
    With wsUsed.Cells(i, iCol) 
     If bPositive Then 
     If .Value = strCriteria Then .EntireRow.Delete 
     Else 
     If .Value <> strCriteria Then .EntireRow.Delete 
     End If 
    End With 
    Next i 

End Function 

を行うことができます:

Sub Delete() 
Call DeleteCol(1, "Subtotal:", "CoolSheetName", False) 
Call DeleteCol(3, "", "CoolSheetName", True) 
End Sub 
0

を次の(コメント)コード試してみたいことがあります。

Option Explicit 

Sub main() 
    With Worksheets("MySheetName") '<--| change "MySheetName" to your actual sheet name 
     With Intersect(.UsedRange, .Columns("A:C")) 
      .AutoFilter Field:=1, Criteria1:="<>Subtotal" '<--| filter column "A" cells not containing "Subtotal" 
      If Application.WorksheetFunction.Subtotal(103, .Resize(, 1)) > 1 Then .Offset(1).Resize(.rows.Count - 1).SpecialCells(xlCellTypeVisible).EntireRow.Delete '<--| delete any filtered cell row 
      .AutoFilter '<--| show all data back 
      With .Offset(1, 2).Resize(.rows.Count - 1, 1) '<--| consider column "C" cell from header row (excluded) down 
       DeleteRows .Cells, xlCellTypeConstants, xlTextValues '<--| delete any "constant text" cell row 
       DeleteRows .Cells, xlCellTypeFormulas, xlTextValues '<--| delete any "formula text" cell row 
       DeleteRows .Cells, xlCellTypeBlanks, xlTextValues '<--| delete any "blank" cell row 
      End With 
     End With 
    End With 
End Sub 

Sub DeleteRows(rng As Range, cellType As XlCellType, cellsValue As XlSpecialCellsValue) 
    Dim f As Range 

    Set f = rng.SpecialCells(cellType, cellsValue) 
    If Not f Is Nothing Then f.EntireRow.Delete 
End Sub 
+0

これらを実行することを楽しみにしています。すべての素晴らしい返信をありがとう。 – lPaclMan

+0

私はあなたが投稿した_desired results_を見ました:あなたのスペック_ "列Aが等しくないすべての行を削除"小計: "" _は成立しません! – user3598756

関連する問題