0

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

DB 回答した質問
回答とコメントは、会員登録(無料)で閲覧できるようになります。