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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2013, 07:44   #1
WiZzarD94
Пользователь
 
Регистрация: 13.12.2012
Сообщений: 17
По умолчанию visial basic

Написать макрос выбора из списка тех студентов, у которых совпадают фамилии, и подсчета их среднего балла. Результирующие данные поместить в отдельную таблицу на листе 3. Отсортировать ее по названию факультета и ФИО студентов.

Задание вот, код вот
но нампилятор ругается на эту строчку
.DataBodyRange.Formula = "=AVERAGE([@[Математика]:[Изложение]])"
Почему?


Код:
Sub SameSurnameStudents()
    Application.ScreenUpdating = False
    With Application.ThisWorkbook.Worksheets
        .Item(1).Copy After:=.Item(.Count) 'Переносим данные на новый лист.
        On Error Resume Next
        Application.DisplayAlerts = False
        .Item("Лист 3").Delete 'Если уже есть лист "Лист 3" - удаляем во избежание путаницы.
        Application.DisplayAlerts = True
        On Error GoTo 0
        With .Item(.Count)
            .Name = "Лист 3" 'Новый лист назовем "Лист 3".
            With .ListObjects.Add(xlSrcRange, .UsedRange, , xlYes)
                .TableStyle = vbNullString
                .Sort.SortFields.Add .ListColumns("Факультет").Range 'Сортировка по факультету
                .Sort.SortFields.Add .ListColumns("ФИО студента").Range 'и ФИО студента.
                .Sort.Apply
                With .ListColumns.Add       'Добавляем в таблицу столбец "Средний балл"
                    .Name = "Средний балл"  'и формулу расчета среднего балла.
                    .DataBodyRange.Formula = "=AVERAGE([@[Математика]:[Изложение]])"
                End With
                With .ListColumns.Add       'Добавляем в таблицу столбец "Фамилия", формулой
                    .Name = "Фамилия"       'получаем фамилии из ФИО студентов и с помощью
                    With .DataBodyRange     'условного форматирования красим уникальные.
                        .Formula = "=LEFT([@[ФИО студента]],SEARCH("" "",[@[ФИО студента]]))"
                        .FormatConditions.AddUniqueValues
                        .FormatConditions(1).Interior.Color = vbRed 'Уникальные в красный цвет.
                    End With
                End With
                'Автофильтром отбираем покрашенные красным фамилии - позже удаляем их.
                .Range.AutoFilter .ListColumns("Фамилия").Index, vbRed, xlFilterCellColor
                .DataBodyRange.SpecialCells(xlCellTypeVisible).EntireRow.Select
                .ListColumns("Фамилия").Delete 'Больше нам столбец "Фамилия" не нужен.
                .Unlist
            End With
            Selection.Delete 'Удаляем уникальные фамилии.
            .Cells(1).Select
        End With
    End With
    Application.ScreenUpdating = True
End Sub

Последний раз редактировалось Serge_Bliznykov; 04.10.2013 в 10:03.
WiZzarD94 вне форума Ответить с цитированием
Старый 04.10.2013, 09:49   #2
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

приложите файл чтоли?


Код:
.DataBodyRange.Formula = "=AVERAGE([@[Математика]:[Изложение]])"
А если явно указать столбцы?

Код:
.DataBodyRange.Formula = "=AVERAGE(D:E)"
(D:E) или что у вас там...
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!

Последний раз редактировалось SaLoKiN; 04.10.2013 в 10:03.
SaLoKiN вне форума Ответить с цитированием
Старый 04.10.2013, 11:53   #3
WiZzarD94
Пользователь
 
Регистрация: 13.12.2012
Сообщений: 17
По умолчанию

Архив WinRAR.rar
вот, сейчас попробую. вотт что делать надо.
1) Активизировать окно диалога, с помощью которого пользователь задает количество строк в таблице.
2) Сформировать на листе 3 пустую таблицу со структурой, совпадающей со структурой исходной таблицы. Добавить в нее столбец «Средний балл».
3) Выполнить цикл поиска необходимых данных по исходной таблице. Результирующие данные помещаются в таблицу на листе 3.
4) После проверки всей таблицы отсортировать результирующую таблицу по названию факультета и ФИО студента.
WiZzarD94 вне форума Ответить с цитированием
Старый 04.10.2013, 11:58   #4
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

Цитата:
Активизировать окно диалога, с помощью которого пользователь задает количество строк в таблице.
Это важно? метод .Range("A" & .Rows.Count).End(xlUp).Row не катит?
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!
SaLoKiN вне форума Ответить с цитированием
Старый 04.10.2013, 12:08   #5
WiZzarD94
Пользователь
 
Регистрация: 13.12.2012
Сообщений: 17
По умолчанию

Может быть,не слишком понимаю
WiZzarD94 вне форума Ответить с цитированием
Старый 04.10.2013, 12:09   #6
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

для чего нужно вводить кол-во строк?
Есть функция которая определяет последнюю запись в столбце и возвращает это кол-во

Цитата:
1) Активизировать окно диалога, с помощью которого пользователь задает количество строк в таблице.
2) Сформировать на листе 3 пустую таблицу со структурой, совпадающей со структурой исходной таблицы. Добавить в нее столбец «Средний балл».
3) Выполнить цикл поиска необходимых данных по исходной таблице. Результирующие данные помещаются в таблицу на листе 3.
4) После проверки всей таблицы отсортировать результирующую таблицу по названию факультета и ФИО студента.
это так задание на лабу выглядит?
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!
SaLoKiN вне форума Ответить с цитированием
Старый 04.10.2013, 12:15   #7
WiZzarD94
Пользователь
 
Регистрация: 13.12.2012
Сообщений: 17
По умолчанию

да, вот такое задание на лабу.

Код:

.DataBodyRange.Formula = "=AVERAGE(D:E)"

Кстате, это помогло на ошибку теперь выдает здесь
.Formula = "=LEFT([@[ФИО студента]],SEARCH("" "",[@[ФИО студента]]))"
WiZzarD94 вне форума Ответить с цитированием
Старый 04.10.2013, 12:19   #8
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

Код:
  .DataBodyRange.Formula = "=AVERAGE([@[Математика]:[Изложение]])"
у меня нет ошибок тут,что за ошибка у вас вылетает?

Цитата:
да, вот такое задание на лабу.
Преподу может не понравиться ваш метод решения задачи

Цитата:
2) Сформировать на листе 3 пустую таблицу со структурой, совпадающей со структурой исходной таблицы. Добавить в нее столбец «Средний балл».
т.е. нужно копировать только шапку и докинуть столбец ср. знач.Потом проверяя исходную табл. докидывать неуникальные строки на лист3 и потом сортировать...
У вас малость все иначе, так что можно переделать сейчас)
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!

Последний раз редактировалось SaLoKiN; 04.10.2013 в 12:26.
SaLoKiN вне форума Ответить с цитированием
Старый 04.10.2013, 12:25   #9
WiZzarD94
Пользователь
 
Регистрация: 13.12.2012
Сообщений: 17
По умолчанию

application difinit or object defenit error
WiZzarD94 вне форума Ответить с цитированием
Старый 04.10.2013, 12:44   #10
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

а ексель у вас 2007 или старее,так?
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!
SaLoKiN вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
basic NOVITEK2012 Фриланс 6 02.05.2012 13:09
Q Basic Татьяна Павина Помощь студентам 1 16.07.2011 18:13
Visial basic elly Помощь студентам 2 18.04.2011 10:16
Из Basic в C++ Mu$T@nG Помощь студентам 2 15.07.2010 19:14