Проверьте это решение. Прочитайте комментарии в коде, если что-то не понятно - спросите в комментариях.
Первое замечание - я не совсем понял, как бы вы хотели использовать процентиль таким образом:
Я хочу процентиль для запуска из строк от 16 до 79 в отдельности
, но я думаю, что вы сможете исправить аргументы функции.
Sub create_columns_test2()
Dim WS As Worksheet
' give variables proper names - I've used colNo instead of x for column number (see Note 1 in post)
Dim colNo As Long
Dim rowNo As Long
' Don't need this at all
' Dim array(???) As Variant?
' 'What do I set my array as? why variant?
' Dim myVar as Double?
' 'What does double mean
' be careful with using ActiveWorkbook / Sheet (see Note 2 in post)
For Each WS In ActiveWorkbook.Worksheets
With WS
If .Cells.Find("20th Percentile") Is Nothing And _
.Cells.Find("80th Percentile") Is Nothing Then
' using .UsedRange.Columns.Count is very tricky and may
' return incorrect data
colNo = .Cells(1, Columns.Count).End(xlToLeft).Column
' Set column headers - Ok
.Cells(16, colNo + 2).Value = "20th Percentile"
.Cells(16, colNo + 3).Value = "80th Percentile"
'I want the percentile to run from rows 16 to 79 individually
For rowNo = 17 To 79
'from column C to the column before the matching column I've just created
' this part takes data from column C:
.Cells(rowNo, colNo + 2).Value = Application.WorksheetFunction.Percentile(Range(.Cells(rowNo, 3), .Cells(rowNo, colNo)), 0.2)
.Cells(rowNo, colNo + 3).Value = Application.WorksheetFunction.Percentile(Range(.Cells(rowNo, 3), .Cells(rowNo, colNo)), 0.8)
Next
End If
End With
' Don't need separate loop - can do it after each iteration
WS.Range("N:Q").EntireColumn.AutoFit
Next WS
End Sub
Примечание 1
См. Соглашения об именах . Есть также некоторые другие соглашения об именах в сети, которые похожи на «для vba» и предлагают использовать префикс, основанный на имени типа, но лично я против этого. Но в целом это также означает одну простую вещь - когда вы вернетесь к своему коду через месяц - вы не сразу вспомните, что означает эта переменная x
или y
, но вы точно будете знать, что colNo
или rowNo
используются для.
Примечание 2
Проверьте этот пост и решите, действительно ли вы хотите использовать ActiveWorkbook
здесь, потому что рабочая книга, где размещен код, не всегда активный.