Первый вопрос в истории.
Я пишу макрос в Excel 2016, чтобы усреднить результаты опроса. У меня около 130 результатов, от 0% до 100%. Я считаю, что могу получить доступ к ячейкам на листе, но вместо того, чтобы сложить все результаты вместе, вместо этого они учитываются.
Например, при 130 записях я должен получить 130 различных процентных результатов, добавленных вместе к разделить на 130, чтобы получить средний результат.
На самом деле я получаю значение 68 (все 0% не увеличивают счетчик). Я спрашиваю, как извлечь значение из ячейки, когда оно представлено в процентах. Это текстовое поле или форматированное число? Я не смог получить четкий ответ от изучения книги в Excel.
Я также не хочу изменять значение данных, так как новые записи все время добавляются из другой книги с поддержкой макросов что я помог создать.
В результате я получаю K5, K6 и K7 68, 131 и 101. Я знаю, что средняя функция, вероятно, не то, что я хочу от этого, но это единственная попытка среднее число, которое я нашел, не имеет ошибки. Я пытался создать пользовательскую функцию, но в ней либо говорилось о попытке деления на 0, либо об ошибках переполнения.
Я хотел бы получить большое число, которое представляет собой все результаты теста, сложенные вместе, а затем разделенные на 131, чтобы получить значение, где 101.
Я новичок в VBA, только пару недель, и я уверен, что в этом коде есть некоторые плохие практики. Я надеюсь, что вы можете указать мне в правильном направлении. Спасибо за чтение.
Вот код, который я написал:
' Sets i = 1
i = 1
'Start of Do While Loop
Do
' If cell contains Test 1 and is not Empty
If Cells(i, 7).Value2 = "Test 1" And Not IsEmpty(Cells(i, 7).Value2) Then
If total_Test1 = 0 And count_Test1 = 0 Then
' Get Test Score from two cells to the right and set it equal to total.
total_Test1 = ActiveSheet.Cells(i, 9).Value2
' Set count equal to 1.
count_Test1 = 1
End If
' Get Test Score from two cells to the right and add to previous total.
total_Test1 = total_Test1 + ActiveSheet.Cells(i, 9).Value2
' Increment count.
count_Test1 = count_Test1 + 1
End If
' Increment i.
i = i + 1
' Run the loop for 10000 rows.
Loop Until i > 10000
' Cell K5 is set equal to the total.
Cells(5, 11).Value = total_Test1
' Cel K6 is set equal to the count.
Cells(6, 11).Value = count_Test1
' Create Range1 as a range.
Dim Range1 As Range
' Set range1 equal to K5 to K6.
Set Range1 = Range("K5:K6")
' Uses the Average function of excel to get average value of range.
Cells(7, 11).Value = Application.average(Range1)```