2016-04-06 3 views
0

Прежде чем объяснять мою текущую проблему, я хотел бы сказать, что у меня очень мало опыта с excel и vba; поэтому моя борьба здесь может показаться глупой, но она гениально.Excel VBA, countif function

У меня есть столбец, где у меня есть диапазон значений от 0 до 6500. Я хочу, чтобы подсчитал количество значений, превышающих 100, 200, 300 ... 6500, и постройте заданное число против 100. 200. 300 и т.д.

на первенствует, я мог бы просто использовать функцию СЧЕТЕСЛИ функции, но я хотел бы действовать на itteration к фагоцитировать большинство значений и, кроме того, что было бы очень трудоемким.

Я думаю о простой петле, которая будет подсчитывать значения для каждой итерации, а затем вызывать результат в определенном столбце, но я не уверен, как это сделать.

Любая помощь или подсказка будет очень желанной.

+0

Не могли бы вы предоставить образец данных и какой результат вы ожидаете получить? Из того, что я понимаю CountIf() в excel, или это vba counterwork WorksheetFunction.CountIf() кажется подходящим инструментом. –

+0

Поскольку это итеративный счет, я ожидал кумулятивную функцию распределения (логарифмическую). – Fenrir

ответ

0

Inopiae имеет большое решение этой - сводной таблицы, сгруппированные по 100, вероятно, будет лучшим способом пойти, но поскольку вы спрашиваете о VBA, вы можете сделать что-то вроде этого:

Sub CreateNumbers() 
'this will populate the worksheet with column 1 being numbers 1 - 65535 
    Dim topNum& 
    topNum = 65535 
    Dim rA(topNum, 0) 

    For i = LBound(rA) To UBound(rA) 
     rA(i, 0) = i 
    Next i 

    ActiveSheet.Range(Cells(1, 1), Cells(topNum + 1, 1)) = rA 

End Sub 

Sub countifIteration() 
'this will output the number based on criteria 
    Dim rA 
    rA = ActiveSheet.UsedRange 
    '& dim as long 
    Dim Cols&, maxNum&, i& 

    'defines maximum number of columns for plotting counts 
    maxNum = Application.WorksheetFunction.Max([a:a]) 
    Cols = maxNum/100 

    ReDim rA2(1, Cols) 
    For i = LBound(rA2, 2) To UBound(rA2, 2) 
     rA2(0, i) = CLng(i & "00") 
     For j = LBound(rA) To UBound(rA) 
      If rA(j, 1) > rA2(0, i) Then rA2(1, i) = rA2(1, i) + 1 
     Next j 
    Next i 

    Range(Cells(1, 3), Cells(2, Cols + 3)) = rA2 

End Sub 
+1

Отлично! Это именно то, что мне нужно, хорошо прокомментированный код, где я мог бы понять язык VBA. – Fenrir

+0

Рад помочь :) – Clyde

0

Вы можете быть в состоянии решить вашу проблему с сводной таблицы, имея значения, сгруппированные по 100.

+0

Я никогда не видел этот вариант на excel, он действительно мог работать. Спасибо за совет! – Fenrir