Что нового

[Excel VBA] Подсчет среднего балла успеваемости школьников.

Belfigor

Модератор
Локальный модератор
Сообщения
3 595
Репутация
938
Собственно девушке задали задачу, ее решение естественно было плавно переведено на меня. Открыл я редактор VBA в экселе, на то чтобы курить учебники увы времени уже не остается. То что нужно это форма в которую можно добавлять\удалять числа и вычислить среднее значение всех этих чисел. Алгоритм я прекрасно представляю, все упирается в синтаксис.

Нашел пример, он прикреплен ниже. Полагаю он бы идеально подошел для изучение необходимого для реализации функционала, но там стоит пароль на просмотр исходника. Помогите кто чем может :smile:
 

axlwor

Скриптер
Сообщения
657
Репутация
147
Re: Помогите с решением задачи в Excel VBA.

28J6
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3 595
Репутация
938
Re: Помогите с решением задачи в Excel VBA.

Если это был VBAProject Password, то мне пишет что он не подходит :(


Добавлено:
Сообщение автоматически объединено:

Помогла программа VBA Password Recovery 10.6.1, тупо снял пароль :smile:
 

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
Re: Помогите с решением задачи в Excel VBA.

То что нужно это форма в которую можно добавлять\удалять числа
Форма Gui или на листе список чисел задать?
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3 595
Репутация
938
Re: Помогите с решением задачи в Excel VBA.

Ну я на листе поставил кнопку, юзер там задает оценки и жмет старт.
Только возникает пока вопрос. Есть команда Range("C2").Select, она активирует ячейку C2, есть ли в VBA аналог нашего &, чтобы я просто поставил в цикл For Next счетчик, и активировал ячейки по средством команды которая по моему мнению должна выглядеть как Range("C"&"i").Select


Добавлено:
Сообщение автоматически объединено:

хахах, все именно так и работает, команда Range("C" & "2").Select подходит, я просто в первый раз забыл кавычки подставить :smile:
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3 595
Репутация
938
Re: Помогите с решением задачи в Excel VBA.

Собственно как я понял это типовая задача для многих ПТУ, так что прикладываю решение в архиве :smile:
 

clown

Новичок
Сообщения
28
Репутация
3
есть в инете 5 уроков по этой теме, очень подробно и понятно описано.
могу ссылкой поделиться
 

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
Ну я на листе поставил кнопку, юзер там задает оценки и жмет старт.
Только возникает пока вопрос. Есть команда Range("C2").Select, она активирует ячейку C2, есть ли в VBA аналог нашего &, чтобы я просто поставил в цикл For Next счетчик, и активировал ячейки по средством команды которая по моему мнению должна выглядеть как Range("C"&"i").Select
Всё значительно интересней. VBA поддердивает в каждом приложении, где он реализован, иерархию объектов.
Метод select и объект Selection - очень медленные, поскольку наследуют кучу методов. Надо применять метод range
http://www.sd-company.su/article/vba/range_selection

Но в твоей задаче еще проще. Главное засунуть содержимое листа в массив, а потом вывести результат обработки. Для того, чтобы часть листа Excel засунуть в массив, надо использовать объект Cells, все листы также имеют названия, написанные на ярлычках, и для того, чтобы считать данные, надо обратится к конкретной ячейке, на конкретном листе. Вот так будет выглядеть считывание данный из первого столбца первого листа

Код:
dim mas(10)  as long
for i=1 to 10
mas(i) = Worksheets("Лист1").cells(i,1).value
next i
То есть все пространство листа - это двумерный массив, где первый индекс - строка, а второй - столбец.

Аналогично

Код:
dim mas(10)  as long
for i=1 to 10
mas(i) = Worksheets(i).cells(i,1).value
next i
Соответственно, загнав все в массив, дальше имеем типовуюб задачу, а после - просто вывести обратно, например в столбец 2.

Код:
dim mas(10)  as long
for i=1 to 10
Worksheets(i).cells(i,2).value = mas(i)
next i

И всё!!! А с буквенными обозначениями столбцлв,учше вообще не заморачиваться.

А если быть совсем занудой...
Есть там встроенная функция
Вычисляет среднее арифметическое значений, заданных в списке аргументов. Помимо чисел в расчете могут участвовать текст и логические значения, такие как ИСТИНА и ЛОЖЬ.

Синтаксис

СРЗНАЧА(значение1; значение2;...)

Значение1, значение2,... — это от 1 до 30 ячеек, интервалов ячеек или значений, для которых вычисляется среднее.


Аргументы должны быть числами, именами, массивами или ссылками.
Массивы и ссылки, содержащие текст, интерпретируются как 0 (ноль). Пустой текст ("") интерпретируется как 0 (ноль). Если при расчете не требуется учитывать текстовые значения, следует использовать функцию СРЗНАЧ.
Аргументы, содержащие значение ИСТИНА, интерпретируются как 1. Аргументы, содержащие значение ЛОЖЬ, интерпретируются как 0 (ноль).
Совет

Вычисляя средние значения ячеек, следует учитывать различие между пустыми ячейками и ячейками, содержащими нулевые значения, особенно если не установлен флажок Нулевые значения на вкладке Вид (команда Параметры, меню Сервис). Пустые ячейки не учитываются, а нулевые ячейки учитываются.
То есть в любую ячейку вставляешь значение

=СРЗНАЧ(B1:I1)

указываешь диапазон и ВСЁ!!! Программу писать не надо!
:IL_AutoIt_1:
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3 595
Репутация
938
Там, оказалось чуть чуть по сложнее, дан желаемый средний балл, и оценки группы надо под него подогнать, ну это я собсно тоже сделал, спасибо за разъяснения :smile:
 

Vlasssov

Осваивающий
Сообщения
428
Репутация
25
Там, оказалось чуть чуть по сложнее, дан желаемый средний балл, и оценки группы надо под него подогнать, ну это я собсно тоже сделал, спасибо за разъяснения
Ну вообщем смысл в том, что сначала загоняешь в массив, потом обрабатываешь, потом выводишь.
 
Верх