容量の小さなExcelファイルを作成するにはどうすれば良いですか?
WinActorバージョン:6.3.2
ノード/ライブラリ名:Excel操作(最終行取得 その1)
プロパティ、ファイル名:扱者ファイル名(変数一覧にて絶対パス指定)
プロパティ、シート名:顧客別残高シート名(変数一覧にてシート名を指定)
プロパティ、最終行:最終行(変数一覧にてシート名を指定)
プロパティ、開始行:値⇒1
プロパティ、検索列:値⇒A
プロパティ、検索文字列:値⇒
プロパティ、検索方法:完全一致
(挿入画像もご参照ください。)
複数の扱者コードのレコードを含んだ元Excelファイルから、扱者コードでレコードを抜き出し、単一扱者コードのレコードのみが含まれるExcelファイルを、元Excelファイルに含まれる扱者コードの数分作成しようとしています。
ところが、今回WinActorにより作成された抜き出しExcelファイルの容量が、今までの手作業によるものの約1,000倍になりました。
今までの手作業
ファイル容量:約78KB
Excelファイル作成(抜き出し)方法:元ファイルの該当行をコピーし、新規抜き出しファイルに行挿入
今回WinActorにより作成
ファイル容量:約78MB
Excelファイル作成(抜き出し)方法:元ファイルを抜き出し対象扱者コードでフィルタリングした後に、データが入っている列をコピーし、新規抜き出しファイルに列挿入。
また、抜き出しExcelファイルの内容的には問題なくできるところまで行ったが、作成抜き出しExcelファイルの容量が異常に大きいことに気付いたため、今回のノード「Excel操作(最終行取得 その1)」追加を行った。
(当初は、扱者コードが変わるまで、行のコピー追加を行い、次の扱者コードの行になったら、作成抜き出しExcelファイルを保存するようなフローにしましたが、実行時間が長かかった為、今のやり方に変更しました。従前のやり方で作成したファイルの容量は確認していません。また、従前のWinActorも残っていません。)
※レコードは扱者コード順に並んでいる
その後、今回WinActorにより作成したファイルを、「【ライブラリ公開】Excel操作(対象行削除)」を参照し、空白行削除を試みましたが、スクリプトの変更方法がまずいのか、添付画像の状態(マウスカーソルが青丸の中に白十字)が30分以上続いたためジョブをキャンセルしました。
元ライブラリとして「Excel操作(最終行取得 その1)」を使用し、下記の、
1.既存スクリプトの抜粋を追加スクリプトで置換
2.既存スクリプトの抜粋の直下に、追加スクリプトを追加
の2通りの変更を試しましたが、いづれも結果は同じでした。
既存スクリプトの抜粋
'シート数を設定する
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