Подсчитать и перенести на новый лист VBA - PullRequest
0 голосов
/ 04 мая 2018

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

Sub countstudents()
Range("V2") = Application.WorksheetFunction.CountIf(Range("H2:H18288"), "1")
Range("V7") = Application.WorksheetFunction.CountIf(Range("H2:H18288"), "22")
Range("V8") = Application.WorksheetFunction.CountIf(Range("H2:H18288"), "23")
Range("V9") = Application.WorksheetFunction.CountIf(Range("H2:H18288"), "24")
Range("V10") = Application.WorksheetFunction.CountIf(Range("H2:H18288"), "25")
Range("V11") = Application.WorksheetFunction.CountIf(Range("H2:H18288"), "26")
Range("V12") = Application.WorksheetFunction.CountIf(Range("H2:H18288"), "28")
Range("V13") = Application.WorksheetFunction.CountIf(Range("H2:H18288"), "29")
Range("V14") = Application.WorksheetFunction.CountIf(Range("H2:H18288"), "31")
Range("V15") = Application.WorksheetFunction.CountIf(Range("H2:H18288"), "32")
Range("V16") = Application.WorksheetFunction.CountIf(Range("H2:H18288"), "33")
Range("V17") = Application.WorksheetFunction.CountIf(Range("H2:H18288"), "34")
Range("V18") = Application.WorksheetFunction.CountIf(Range("H2:H18288"), "35")
Range("V19") = Application.WorksheetFunction.CountIf(Range("H2:H18288"), "36")
Range("V20") = Application.WorksheetFunction.CountIf(Range("H2:H18288"), "41")
Range("V21") = Application.WorksheetFunction.CountIf(Range("H2:H18288"), "81")
Range("V22") = Application.WorksheetFunction.CountIf(Range("H2:H18288"), "121")
Range("V23") = Application.WorksheetFunction.CountIf(Range("H2:H18288"), "122")
Range("V24") = Application.WorksheetFunction.CountIf(Range("H2:H18288"), "163")
Range("V25") = Application.WorksheetFunction.CountIf(Range("H2:H18288"), "164")
Range("V26") = Application.WorksheetFunction.CountIf(Range("H2:H18288"), "183")
Range("V27") = Application.WorksheetFunction.CountIf(Range("H2:H18288"), "184")
Range("V28") = Application.WorksheetFunction.CountIf(Range("H2:H18288"), "185")
Range("V29") = Application.WorksheetFunction.CountIf(Range("H2:H18288"), "")

1 Ответ

0 голосов
/ 04 мая 2018

Это должно сработать:

Сначала мы создадим 2d массив, содержащий все ваши номера строк из формулы диапазона и критерии для вашего Countif()

Мы перебираем этот массив, чтобы заполнить ячейки листа. Важно отметить, что имеет смысл явно ссылаться на рабочую книгу и рабочую таблицу, в которую это необходимо вставить. Так например Workbooks("book1.xlsx").worksheets("sheet1").Range() =

Sub countstudents()
Dim i as long
Dim j as long
dim k as long
Dim arr(1 to 24, 1 to 2) as string
    arr(1, 1) = 2
    arr(1, 2) = 1
    arr(24, 1) = 29
    arr(24, 2) = ""
    For i is 2 to 23
      For j is 1 to 2
         If j = 1 then 
            arr1(i,j) = 5 + i 'starts at 7 and goes till 28
         Else 
            arr1(i,j) = 20 + i 'starts at 22 and goes till 43
         End if
      next j
    next i 

For k = 1 to ubound(arr)
    Range("v"&arr(k,1)) = application.worksheetfunction.countif(Range("H2:H18288"), arr(k,2))
next k
end sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...