レポートを自動化するマクロを作成しようとしています。問題は、ソース データが不要なデータを持ち込み、レポート自体がテーブル全体に基づいて多くの計算を実行することです。テーブルに基づいて何百もの計算が実行されるため、レポートの各数式に包含パラメーターを追加すると、非常に時間がかかります。
レポートを手動で更新する場合は、フィルターを使用してデータを除外し、関連データを削除することで、この問題を簡単に回避できます。ただし、ファイルを自動化しようとしているので、ボタンをクリックするだけで更新でき、20 ~ 30 分も費やす必要はありません。
したがって、私がやりたいこと、しかしこれまでうまくいかなかったことは、列に特定の文字列が含まれているすべての行を VBA で削除することです。
これは、データを更新し、テキストを列に変換を使用して日付列を修正し、データのセクションを削除し、KPI のシートの数式を計算し、それを今週の日付として保存する、より大きなマクロの一部です。
他のレポートを更新するためのマクロをすでにいくつか作成しているので、他のすべての手順は自動化できますが、これでは困惑してしまいました。Google-Fu でもだめでした。
答え1
このサブは、変数で定義された値がある場合にシートの行全体を削除します。文字列変数によって定義された列にあるコラム
Sub deleterows()
Dim a As Application
Dim wkb As Workbook
Dim wks As Worksheet
Dim DataRange As Range
Set a = Application
Set wkb = ThisWorkbook
Set wks = wkb.ActiveSheet
wks.Application.ScreenUpdating = False
thecolumn = 2 'this have to be changed to the desired column
thestring = "some text" ' this have to be changed too
reviewing = True
visitrow = 1
While reviewing = True
visitrow = visitrow + 1
If wks.Cells(visitrow, 1) = "" Then
reviewing = False
End If
celldata = wks.Cells(visitrow, thecolumn)
If IsNumeric(celldata) = True Then
celldata = Trim(Str(celldata))
End If
If celldata = thestring Then
wks.Rows(visitrow).Delete
visitrow = visitrow - 1
End If
Wend
wks.Application.ScreenUpdating = True
Message = MsgBox("Finished!", vbOKOnly)
End Sub