我的代码有一个循环,用于查找数据透视表中给定列的值是否为该行的最小值/最大值。需要注意的是,某些行具有重复的特征条目,因此我具有一组If ElseIf条件,以跳过这些条目的复制过程。代码如下:
For i = 0 To 339
wfr = wfr + CStr(i + 5)
Sheets("ET Pivot").Select
If Sheets("ET Pivot").Range(wfr).Value = 7 Then
GoTo LoopExit
ElseIf Sheets("ET Pivot").Range(wfr).Value = 9 Then
GoTo LoopExit
ElseIf Sheets("ET Pivot").Range(wfr).Value = 99999.99 Then
GoTo LoopExit
ElseIf Sheets("ET Pivot").Range(wfr).Value = 1 Then
GoTo LoopExit
End If
If Sheets("ET Pivot").Range(wfr).Value = Sheets("ET Pivot").Range("AB" + CStr(i + 5)).Value Then
Sheets("ET Pivot").Select
Sheets("ET Pivot").Rows(i + 5 & ":" & i + 5).Select
Selection.Copy
Sheets("ET Outliers").Select
Sheets("ET Outliers").Range("A" + CStr(ic)).Select
ActiveSheet.Paste
Application.CutCopyMode = False
ic = ic + 1
ElseIf Sheets("ET Pivot").Range(wfr).Value = Sheets("ET Pivot").Range("AC" + CStr(i + 5)).Value Then
Sheets("ET Pivot").Select
Sheets("ET Pivot").Rows(i + 5 & ":" & i + 5).Select
Selection.Copy
Sheets("ET Outliers").Select
Sheets("ET Outliers").Range("A" + CStr(ic)).Select
ActiveSheet.Paste
ic = ic + 1
End If
LoopExit:
wfr = wfrc
Next i
前四个If语句是跳过条件。条件9、99999.99和1按计划工作。由于某些原因,7条件不会触发If语句。我确保单元格值实际上是7,并且没有四舍五入,我已经更改了条件的顺序,并且我先添加了一个虚拟条件,但无济于事。我不确定为什么这种特殊情况不起作用。
答案 0 :(得分:0)
好的,所以这里有一些要解压的东西。这是我更改的内容:
.Select
的依赖。结合了您的if
语句-这使代码更易于阅读和编辑
a。对于第一批if
,这意味着我们可以摆脱您的LoopExit
,因为它已不再有用
b。对于第二组if
,它让我们取出了大量重复代码
将访问值的方式从连接字符串更改为使用.Cells(row,col)
a。此更改使我摆脱了wfr
,而仅用"A"
在循环中调整了i
的值,因为您一直在说i + 5
paste
方法更改为Range().copy destination:=Range()
希望这会有所帮助!
Dim i As Long
Dim ic As Long
Dim current As Double
For i = 5 To 334
current = Sheets("ET Pivot").Cells(i, "A").Value2
If current <> 1 And current <> 7 And current <> 9 And current <> 99999.99 Then
If current = Sheets("ET Pivot").Cells(i, "AB").Value2 Or current = Sheets("ET Pivot").Cells(i, "AC").Value2 Then
Sheets("ET Pivot").Rows(i & ":" & i).copy _
Destination:=Sheets("ET Outliers").Cells(ic, "A")
ic = ic + 1
End If
End If
Next i
答案 1 :(得分:0)
所以我感谢@Jaberwocky解决了它。
我没有按照他的建议将其转换为整数,而是四舍五入到小数点后三位并检查它是否等于7。这种差异的原因是转换为整数将无意中从6.51过滤掉最大/最小值到7.5,可能在数据集中的其他位置。
即使显示30个小数位时也没有显示出偏差,看来我试图过滤掉的“ 7”数字实际上并不是整数7。
感谢大家的投入。