我有两个相同的Excel工作表,列相同,但值不同。我按照第5列对它们进行了排序。此列中的值是字母数字。虽然大多数值相等,但是一张表中的某些值不在另一张表中。在我的代码中,当我将TPGPRIOR工作表的单元格范围更改为(i,1)时,脚本将工作并删除工作表中的每一行。这是有道理的,因为列是不同的类别,永远不会相等。但是,当我将该范围更改为(i,5)以便比较同一类别中的两个时,脚本什么都不做。最终的目标是让两个工作表在第5列中包含相同的值。我的代码是否有任何可以解决此问题的编辑?
Dim objTPG, objTPG_PRIOR
Set objXL = CreateObject("Excel.Application")
objXL.Visible = True
objXL.DisplayAlerts = False
Set objEXPO = objXL.Application.Workbooks.Open(FinalExposure)
Const xlAscending = 1
Const xlYes = 1
Set objEXPOSHEET = objEXPO.Worksheets(1)
Set objRange = objEXPOSHEET.UsedRange
Set objRange2 = objEXPOSHEET.Range("I2:I9999")
objRange.Sort objRange2, xlAscending,,,,,, xlYes
Set objTPGPRIOR = objXL.Application.Workbooks.Open(FilePath & "TPG Prior.csv")
'REMEMBER TO MAKE SHEETS RUN IN BACKGROUND
Set objTPGPRIORSHEET = objTPGPRIOR.Worksheets(1)
Set objRange = objTPGPRIORSHEET.UsedRange
Set objRange2 = objTPGPRIORSHEET.Range("E2:E9999")
objRange.Sort objRange2, xlAscending,,,,,, xlYes
Set objTPG = objXL.Application.Workbooks.Open(FilePath & "TPG.csv")
Set objTPGSHEET = objTPG.Worksheets(1)
Set objRange = objTPGSHEET.UsedRange
Set objRange2 = objTPGSHEET.Range("E2:E9999")
objRange.Sort objRange2, xlAscending,,,,,, xlYes
i = 2
Do Until objTPG.Worksheets(1).Cells(i,1).Value = ""
If objTPG.Worksheets(1).Cells(i,5).Value <> objTPGPRIOR.Worksheets(1).Cells(i,5).Value
Then
Set objRange = objTPG.Worksheets(1).Cells(i,1).EntireRow
objRange.Delete
i = i - 1
End If
i = i + i
Loop
答案 0 :(得分:0)
好的,你可以考虑一些事情。第一个很简单,你写了
i = i + i
现在,您可能需要i = i + 1
,因为我认为您希望2, 3, 4, 5, ...
不是2, 4, 8, 16, ...
。
要考虑的第二件事是,您只是从objTPG表中删除一行。这意味着当它遇到一个不匹配的行时,它将继续从objTPG中删除并检查objTPGPRIOR中的同一行,直到找到匹配或删除下面的所有内容。这可能是你想要的行为,但我想我会指出它以防万一。
答案 1 :(得分:0)
我稍微改写了你的代码......
正如AndASM指出的那样,你可能想要i = i +/- 1
而不是i = i + i
试试以下
Dim objRange as Range
Dim I as Long
For I = 2 To objTPGPRIOR.Worksheets(1).Range("E" & objTPGPRIOR.Worksheets(1).Rows.Count).End(xlUp).Row
Set objRange = objTPG.Worksheets(1).Cells(I, 5)
Do Until objRange.Value = objTPGPRIOR.Worksheets(1).Cells(I, 5).Value
objRange.EntireRow.Delete
Set objRange = objTPG.Worksheets(1).Cells(I, 5)
If objTPG.Worksheets(1).Cells(objTPG.Worksheets(1).UsedRange.Rows.Count, 5).End(xlUp).Row < I Then
Exit Do
End If
Loop
Next
这将继续删除行,直到同一行列中的单元格与其他工作表匹配...如果此值不存在,则可能会删除所有行。我添加了一点检查,以确保这不会导致无限循环。
如果你的肯定存在这些值,那么它应该可以正常工作......如果你想要一个替代脚本,首先检查下面的行中是否存在值,只需给我留言,我就会扯掉一些东西: )