Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.12.2011, 20:23   #1
roxy7
Пользователь
 
Регистрация: 20.10.2011
Сообщений: 53
По умолчанию Недостаток в "Расчет средней оценки"

Преподаватель сказал, что в этом модуле есть недостаток. Помогите его найти и исправить.
Код:
Public Sub SrBal(c1 As Single, c2 As Single, c3 As Single) 
  Dim i As Integer
  Sheets("Результаты").Activate
  For i = 2 To Application.WorksheetFunction.CountA(ActiveSheet.Columns(1))
      c1 = c1 + Cells(i, 3)
      c2 = c2 + Cells(i, 4)
      c3 = c3 + Cells(i, 5)
  Next i
  i = i - 2
  c1 = c1 / i
  c2 = c2 / i
  c3 = c3 / i
End Sub
Обработчик нажатия на кнопку «Расчет средней оценки»:
Код:
Private Sub CommandButton1_Click()
    Dim c1 As Single, c2 As Single, c3 As Single
    Call Module1.SrBal(c1, c2, c3)
    TextBox3.Text = Format(c1, "###.##")
    TextBox4.Text = Format(c2, "###.##")
    TextBox5.Text = Format(c3, "###.##")
End Sub
roxy7 вне форума Ответить с цитированием
Старый 09.12.2011, 21:07   #2
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

Код:
Sheets("Результаты").Activate ' это заменить обращением к листу

c1 = c1 + Cells(i, 3).Value ' вместо c1 = c1 + Cells(i, 3)

i = i - 2 ' <-- наверно, это самый главный
Тишина – самый громкий звук

Последний раз редактировалось nerv; 09.12.2011 в 21:10.
nerv вне форума Ответить с цитированием
Старый 10.12.2011, 04:06   #3
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Код:
For i = 2 To Application.WorksheetFunction.CountA(ActiveSheet.Columns(1)) + 1
Но я бы сделал так:
Код:
Public Sub SrBal(c1 As Single, c2 As Single, c3 As Single)
    Sheets("Результаты").Activate
    c1 = Application.Average(Columns(3).SpecialCells(2, 1))
    c2 = Application.Average(Columns(4).SpecialCells(2, 1))
    c3 = Application.Average(Columns(5).SpecialCells(2, 1))
End Sub
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728

Последний раз редактировалось kuklp; 10.12.2011 в 04:56.
kuklp вне форума Ответить с цитированием
Старый 12.12.2011, 13:21   #4
roxy7
Пользователь
 
Регистрация: 20.10.2011
Сообщений: 53
По умолчанию

Спасибо большое вам, nerv и kuklp!
roxy7 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести название соответствующей карты вида "шестерка бубен", "дама червей","туз треф" и т.п. воваава Помощь студентам 3 01.12.2011 12:50
...Упорядочить этот список в порядке убывания средней оценки... Anny Kyort Паскаль, Turbo Pascal, PascalABC.NET 4 29.11.2011 19:37
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04