【ライブラリ公開】Excel操作(対象行削除)
本シナリオは、以下の質問の回答として記載したスクリプトをライブラリ化したものです。
参考:
Excelで5シートの10列×n行を1シートに高速に連結したい
Excel 指定の値を含む行の削除方法
ライブラリ名:
Excel操作(対象行削除)
ライブラリの注釈:
■機能概要
指定したシートの該当行を削除します。
※操作対象のファイルを相対パスで指定する場合、
開いているシナリオのフォルダが起点となります。
※A1形式の列指定のみ対応
■設定項目
[ファイル名]:操作対象のファイルを絶対パスか相対パスで指定してください。
[シート名] :操作対象のシート名を指定してください。
空の場合はアクティブなシートが選択されます。
[開始行] :検索の開始行を指定してください。
[検索列] :検索を行う列を指定してください。
例)A
[検索文字列]:検索を行う文字列を指定してください。
※検索文字列を空白とした場合、空白行を削除します。
[検索方法] :"完全一致"、"部分一致"から選択します。
ライブラリのスクリプト:
使用した基ライブラリは「Excel操作(最終行取得 その1)」。
最終行の取得状況に応じて、基とするライブラリは変更すると良い。
参考:
まとめ 最終行の取得を比較_その1~その4
変更箇所:
'シート数を設定する
SetUMSVariable $最終行$, lRowB
↓
' ====空白行を削除する====================================================
rnum = !開始行!
scol = !検索列!
word = !検索文字列!
sfla = !検索方法|完全一致,部分一致!
cellAddress = scol&rnum
Set cell = Nothing
On Error Resume Next
xlsApp.ScreenUpdating = False
Set cell = worksheet.Range(cellAddress)
If cell Is Nothing Then
Err.Raise 1, "", "指定されたセルが見つかりません。"
End If
If word = "" Then
For i = lRowB To rnum Step -1
cellAddress = scol&i
'Rangeに検索列の値が空白なら削除対象行として格納
If IsEmpty(worksheet.Range(cellAddress)) Then
worksheet.Rows(i).EntireRow.Delete
End If
Next
Else
If sfla = "完全一致" Then
If word = "0" Then
For i = lRowB To rnum Step -1
cellAddress = scol&i
'Rangeに検索列の値が設定値を含むなら削除
If worksheet.Range(cellAddress).value = "0" Then
worksheet.Rows(i).EntireRow.Delete
End If
Next
Else
For i = lRowB To rnum Step -1
cellAddress = scol&i
'Rangeに検索列の値が設定値を含むなら削除
If worksheet.Range(cellAddress).value = word Then
worksheet.Rows(i).EntireRow.Delete
End If
Next
End If
Else
For i = lRowB To rnum Step -1
cellAddress = scol&i
'Rangeに検索列の値が設定値を含むなら削除
If InStr(worksheet.Range(cellAddress), word)<>0 Then
worksheet.Rows(i).EntireRow.Delete
End If
Next
End If
End If
xlsApp.ScreenUpdating = True
On Error Goto 0
Set cell = Nothing
参考まで。
以下追記:
指摘があり値が0の場合の処理修正を行いました。