ワークシートがあります。セルの値に基づいて行を削除する必要があります。
チェックするセルは列Aにあります。
セルに「-」が含まれている場合..行を削除
これを行う方法が見つかりません..ブックを開き、すべてのコンテンツを別のブックにコピーしてから、行と列全体を削除しますが、セルの値に基づいて削除する必要がある特定の行があります。
ここで助けが必要です。
アップデート
私が持っているデータのサンプル
これを行う最も簡単な方法は、フィルターを使用することです。
列Aの「-」がないセルをフィルタリングしてコピー/貼り付けするか、(私のより好ましい方法)「-」が含まれるすべてのセルをフィルタリングしてからすべてを選択して削除することができます-1回フィルタを削除すると、必要なものが残ります。
お役に立てれば。
スクリーンショットは非常に役に立ちました-次のコードがその仕事をします(データがA1から始まる列Aにあると仮定します):
Sub RemoveRows()
Dim i As Long
i = 1
Do While i <= ThisWorkbook.ActiveSheet.Range("A1").CurrentRegion.Rows.Count
If InStr(1, ThisWorkbook.ActiveSheet.Cells(i, 1).Text, "-", vbTextCompare) > 0 Then
ThisWorkbook.ActiveSheet.Cells(i, 1).EntireRow.Delete
Else
i = i + 1
End If
Loop
End Sub
サンプルファイルは共有されます:https ://www.dropbox.com/s/2vhq6vw7ov7ssya/RemoweDashRows.xlsm
次のような数式を新しい列にコピーできます...
=IF(ISNUMBER(FIND("-",A1)),1,0)
...次に、その列で並べ替え、値が1であるすべての行を強調表示して、それらを削除します。
特定のセル値に基づいて行を削除する場合。10000行を含むファイルと、値がNULLのフィールドがあるとします。そして、そのnull値に基づいて、これらのすべての行とレコードを削除します。
ここにいくつかの簡単なヒントがあります。最初に[置換の検索]ダイアログを開き、[置換]タブで、NULL値を含むすべてのセルを空白にします。次に、F5キーを押して[空白]オプションを選択し、アクティブなシートを右クリックして[削除]を選択し、[行全体]のオプションを選択します。
含まれている単語NULLのセル値に基づいて、これらの行をすべて削除します。
ファイルが大きすぎない場合は、-が含まれている列でいつでも並べ替えることができます。すべてまとめたら、強調表示して削除します。次に、必要なものに並べ替えます。
範囲内の各セルをループし、InStr
関数を使用して、セルに文字列が含まれているかどうかを確認できます。ハイフン。
Sub DeleteRowsWithHyphen()
Dim rng As Range
For Each rng In Range("A2:A10") 'Range of values to loop through
If InStr(1, rng.Value, "-") > 0 Then 'InStr returns an integer of the position, if above 0 - It contains the string
rng.Delete
End If
Next rng
End Sub
これは、関数のベースとなるオートフィルターマクロです。
Selection.AutoFilter
ActiveSheet.Range("$A$1:$A$10").AutoFilter Field:=1, Criteria1:="=*-*", Operator:=xlAnd
Selection.AutoFilter
このオートフィルター関数を使用して、一致する行を削除します。
Public Sub FindDelete(sCol As String, vSearch As Variant)
'Simple find and Delete
Dim lLastRow As Integer
Dim rng As Range
Dim rngDelete As Range
Range(sCol & 1).Select
[2:2].Insert
Range(sCol & 2) = "temp"
With ActiveSheet
.usedrange
lLastRow = .Cells.SpecialCells(xlCellTypeLastCell).Row
Set rng = Range(sCol & 2, Cells(lLastRow, sCol))
rng.AutoFilter Field:=1, Criteria1:=vSearch, Operator:=xlAnd
Set rngDelete = rng.SpecialCells(xlCellTypeVisible)
rng.AutoFilter
rngDelete.EntireRow.Delete
.usedrange
End With
End Sub
次のように呼びます:
call FindDelete "A", "=*-*"
それは私に多くの仕事を節約しました。幸運を!