以下のようなデータを含むシートがあります。
現在、Excelには合計36のタスクがあり、各タスクには4つの列があります。最初のタスク.ieTask1の名前は、常にL列から開始されます。36のタスクが144の列に記述されています。次に、行ごとに調べて、TNStart開始日<T(N + 1)開始日かどうかを確認する必要があります。そうすると、その行が不良行として選択されます。簡単に言うと、タスク番号が1から36に増える場合、開始日はそれぞれ昇順である必要があります。それが失敗した場合は、行を不良データとしてマークする必要があります。
ファッショナブルな方法でこれを行うためにここで私を助けてくれませんか?
Option Explicit
Dim objExcel1
Dim strPathExcel1
Dim objSheet1,objSheet2
Dim IntRow1,IntRow2
Dim ColStart
Set objExcel1 = CreateObject("Excel.Application")'Object for Condition Dump
strPathExcel1 = "D:\AravoVB\Copy of Original Scripts\CopyofGEWingtoWing_latest_dump_21112012.xls"
objExcel1.Workbooks.Open strPathExcel1
Set objSheet1 = objExcel1.ActiveWorkbook.Worksheets(1)
Set objSheet2 = objExcel1.ActiveWorkbook.Worksheets("Bad Data")
objExcel1.ScreenUpdating = False
objExcel1.Calculation = -4135 'xlCalculationManual
IntRow2=2
IntRow1=4
Do Until IntRow1 > objSheet1.UsedRange.Rows.Count
ColStart = objExcel1.Application.WorksheetFunction.Match("Parent Business Process ID", objSheet1.Rows(3), 0) + 1
Do Until ColStart > objSheet1.UsedRange.Columns.Count And objSheet1.Cells(IntRow1,ColStart) = ""
If objSheet1.Cells(IntRow1,ColStart + 1) > objSheet1.Cells(IntRow1,ColStart + 5) and objsheet1.cells(IntRow,ColStart + 5) <> "" Then
objSheet1.Range(objSheet1.Cells(IntRow1,1),objSheet1.Cells(IntRow1,objSheet1.UsedRange.Columns.Count)).Copy
objSheet2.Range(objSheet2.Cells(IntRow2,1),objSheet2.Cells(IntRow2,objSheet1.UsedRange.Columns.Count)).PasteSpecial
IntRow2=IntRow2+1
Exit Do
End If
ColStart=ColStart+4
Loop
IntRow1=IntRow1+1
Loop
objExcel1.ScreenUpdating = True
objExcel1.Calculation = -4105 'xlCalculationAutomatic
パフォーマンスが悪い
私のシートは2000行で、不正なデータ選択基準は144列になっています。現在、出力は25分後に表示されるため、全体的なパフォーマンスが向上します。したがって、より高速なものにすることで、皆さんに助けを求めています。
悪い行を別のシートに対処しているときにも可能ですか?また、悪い列を赤でマークします