简体   繁体   中英

VBA- Printing in For loop

I'm trying to find and remove outliers from many columns of data, but it doesn't clear the cells that contain the outliers when I run the code. I tried just printing "colLength" within the first For loop, and that did nothing either. Advice on where I went wrong or how I might be able to fix it?

Sub Outliers()

Dim calc As Worksheet
Set calc = ThisWorkbook.Sheets("Sheet2")

Dim num As Double
Dim x As Integer
Dim y As Integer
Dim colLength As Integer

'Variables for upper fence, lower fence, first quartile, third quartile, and interquartile range
Dim upper As Double
Dim lower As Double
Dim q1 As Double
Dim q3 As Double
Dim interquartRange As Double

For y = 1 To y = 49

'Find last row of the column
colLength = calc.Cells(Rows.count, y).End(xlUp).Row

'Calculate first and third quartiles
q1 = Application.WorksheetFunction.Quartile(Range(Cells(2, y), Cells(colLength, y)), 1)
q3 = Application.WorksheetFunction.Quartile(Range(Cells(2, y), Cells(colLength, y)), 3)

interquartRange = q3 - q1

'Calculate upper and lower fences
upper = q3 + (1.5 * interquartRange)
lower = q1 - (1.5 * interquartRange)

For x = 2 To x = colLength
    num = calc.Cells(x, y)

    'Remove outliers
    If num > upper Or num < lower Then
        Range(calc.Cells(x, y)).ClearContents
    End If
Next x

Next y

End Sub

For y = 1 To y = 49 should be For y = 1 To 49 . Similarly For x = 2 To x = colLength should be For x = 2 To colLength

Try this in a new module and you will see and understand the difference ;)

Dim Y As Long

Sub SampleA()
    For Y = 1 To Y = 49
        Debug.Print Y
    Next Y
End Sub

Sub SampleB()
    For Y = 1 To 49
        Debug.Print Y
    Next Y
End Sub

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM