実際のコードは、昨日までは正常に動作していましたが、今日はワークシートに2300行以上のデータが含まれていた場合、コードが最初に削除されます残りの300行を私に与えました。VBA:コードレビュー - フィールド削除の問題
私が使用K
の値コード
Sub Delete_blank()
With ActiveSheet
If .Autofiltermode = False Then Cells.Select
Selection.AutoFilter
ActiveSheet.Range ("$A$2:$C$") & lastrow.AutoFilter Field:=1, Criterial:="="
ActiveSheet.Range ("$A$2:$C$") & lastrow.AutoFilter Field:=2, Criterial:="="
ActiveSheet.Range ("$A$2:$C$") & lastrow.AutoFilter Field:=3, Criterial:="="
Range ("A2:K2000").Select
Selection.EntireRow.Delete
ActiveSheet.ShowAllData
.AutoFilterMode = False
End With
End Sub
'INPUT : Sheet, the worksheet we'll search to find the last row
'OUTPUT : Long, the last occupied row
'SPECIAL CASE: if Sheet is empty, return 1
Public Function LastOccupiedRowNum(Sheet As Worksheet) As Long
Dim lng As Long
If Application.WorksheetFunction.CountA(Sheet.Cells) <> 0 Then
With Sheet
lng = .Cells.Find(What:="*", _
After:=.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
End With
Else
lng = 1
End If
LastOccupiedRowNum = lng
End Function
を変更する以外に、このシナリオを置き換えるためにどんな解決策があり、問題はこのライン
Range ("A2:K2000".Select)
である知っていますこのマクロコードを作成するためのマクロ関数を記録しました。
解決を手助けしてください。
ありがとうございました。
あなたはこれをやろうとしていますか? 'Range(" A2:K2000 ")を選択してください。 – braX
出力シートの最後の行を見つけるコードはすでにあります。入力シートの最後の行を見つけるのに似たようなものを使ってみませんか? –
また 'If .Autofiltermode = False Then Cells.Select'が1行にあるので、それ以降の行は何が起きてもトリガーします。それはあなたが意図したものですか?あるいは、ブロック全体が 'If'ステートメントであると思われますか?また、 'lastrow'はどのように宣言されていますか? – BruceWayne