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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2009, 15:56   #1
prostoklassnik
 
Регистрация: 30.10.2009
Сообщений: 6
По умолчанию макрос для обработки результатов тестирования

Привет всем.
Может кто-то встречал макрос по обработке результатов тестирования в Ecxel файлах. В принципе процедура распространенная и наверное должна быть почти стандартная. Файлы тестированных складываются в одну дирректорию - запускается макрос, который открывает их по очереди. Из заголовка открытого листа B5:F5 берутся данные испытуемого, помещаются в новый файл, здесь же на пару строк ниже помещаются результаты теста B45:F48. Макрос отступает на две строки и повторяет цикл. Вроде все просто, а знаний по циклам не хватает. Почему SAS888? Он решал в июле прошлого года аналогичную задачу. Заранее благодарен.
Вложения
Тип файла: rar ol.rar (14.3 Кб, 9 просмотров)
prostoklassnik вне форума Ответить с цитированием
Старый 02.11.2009, 16:01   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Где макрос должен искать папку с тестами?
Прописать путь к папке в макросе, или выдавать диалоговое окно выбора папки с тестами?

Не помешает пример итогового файла (что должно получиться в результате)
EducatedFool вне форума Ответить с цитированием
Старый 03.11.2009, 06:03   #3
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

1. Для частных сообщений используйте ЛС.
2. EducatedFool абсолютно прав. Без ответа на этот вопрос невозможно написать макрос так, как Вам нужно.
3. Предположим, что файл с макросом находится в той же папке, где и файлы для сбора данных. Тогда откройте этот файл и запустите в нем следующий макрос:
Код:
Sub Main()
    Dim myPath As String, myName As String
    Application.ScreenUpdating = False: Application.DisplayAlerts = False: ThisWorkbook.Sheets(1).Cells.Delete
    myPath = ThisWorkbook.Path & Application.PathSeparator: myName = Dir(myPath & "*.xls")
    With ThisWorkbook.Sheets(1)
        Do While myName <> ""
            If myName <> ThisWorkbook.Name Then
                Workbooks.Open Filename:=myPath & myName
                Rows(5).Copy: .Rows(.UsedRange.Row + .UsedRange.Rows.Count + 2).PasteSpecial Paste:=xlPasteValues
                Rows("45:48").Copy: .Rows(.UsedRange.Row + .UsedRange.Rows.Count + 1).PasteSpecial Paste:=xlPasteValues
                ActiveWorkbook.Close
            End If
            myName = Dir
    Loop: End With: Columns("A:F").AutoFit: [A1].Select
End Sub
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 03.11.2009 в 07:29.
SAS888 вне форума Ответить с цитированием
Старый 03.11.2009, 13:52   #4
prostoklassnik
 
Регистрация: 30.10.2009
Сообщений: 6
По умолчанию

SAS888, спасибо ОГРОМНОЕ! Вот что значит Профессионал.
Действительно, исходные файлы (как и файл с макросом) лучше складывать в соответствующие папки (например по названию департамента). Тогда можно будет сохранять результаты в виде обработанного макросом файла не не заморачиваться с путями. Что касается примера итогового файла; я, почему-то предполагал, что для окончательной обработки данных мне будет достаточно того, что я получил. Но при ближайшем рассмотрении выяснилось, что вы правы и гораздо эргономичнее провести обработку одним макросом. Может еще раз поможете? Это было бы просто здорово.

Спасибо
Вложения
Тип файла: rar itog__simple.rar (4.0 Кб, 10 просмотров)
Тип файла: rar olr.rar (14.9 Кб, 13 просмотров)

Последний раз редактировалось prostoklassnik; 04.11.2009 в 07:59.
prostoklassnik вне форума Ответить с цитированием
Старый 05.11.2009, 07:29   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Посмотрите вложение. Откройте файл "itog_simple_2.xls" и запустите макрос "Main". Не уверен, что я из исходных файлов беру те данные, которые Вам требуются. Если не так, то скажите конкретно, из каких ячеек исходных файлов брать данные и в какие столбцы их помещать. И еще. Формул в ячейках нет. Все считает макрос.
Вложения
Тип файла: rar itog.rar (53.8 Кб, 13 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 05.11.2009, 09:55   #6
prostoklassnik
 
Регистрация: 30.10.2009
Сообщений: 6
По умолчанию

Здравствуйте. Все просто замечательно. Спасибо.
Формулы в ячейках и не нужны - это упростит дальнейшую обработку. Мне они были нужны, чтобы упростить заполнение ячеек примера (ну не на калькуляторе же считать). В ячейки пошли именно те данные, которые требуются. Но вот алгоритм написания макроса обнажил небольшую проблемку, которую в принципе я должен был предвидеть. Дело в том, что исходные данные бывают двух типов (четырехшкальные и пятишкальные). Если созданным макросом считать пятишкальный файл - все прекрасно, а вот при обработке четырехшкального (если в макросе подменить [E56:E60].Copy: .Cells(i, "D") === [F56:F60].Copy: на
[E45:E48].Copy: .Cells(i, "D") === [F45:F48].Copy:, то в результате работы макроса в пятой шкале вылазит деление на ноль. Наверное эту проблему можно решить, сделав подредактированный макрос для четырехшкального теста. Или есть способ сделать это элегантнее унивесальным макросом для обеих шкал (например поиском теста Шкала№1,2,3,4,5 в исходнике)? На всякий случай отправляю исходник и симпл для четырехшкального варианта. Еще раз спасибо.
Вложения
Тип файла: rar 345234.rar (18.2 Кб, 12 просмотров)
prostoklassnik вне форума Ответить с цитированием
Старый 05.11.2009, 10:04   #7
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Вопрос: Если мы обрабатываем и 4-х и 5-и шкальные файлы, то как подсчитывать среднее значение? Для 5-и все ясно, а для 4-х, последнее значение будет =0. И, соответственно, если для 4-х шкальных результатов вычислять среднее значение из 5-и (с нулем), то результат будет значительно меньше.
Уточните, что в каком случае делать и как вычислять средний результат по итоговой строке?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 05.11.2009, 10:14   #8
prostoklassnik
 
Регистрация: 30.10.2009
Сообщений: 6
По умолчанию

Если в исходном файле пять шкал мы делим на 5, соответственно при четырехшкальном иходнике делить нужно на 4. Получается макрос должен знать какой исходник он считает (может даже проверкой 0 или не 0 в итоге пятой шкалы) и делить общее среднее значение на нужную цифру.
prostoklassnik вне форума Ответить с цитированием
Старый 05.11.2009, 10:38   #9
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Посмотрите пример во вложении.
Вложения
Тип файла: rar itog_3.rar (39.8 Кб, 17 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 05.11.2009, 12:22   #10
prostoklassnik
 
Регистрация: 30.10.2009
Сообщений: 6
По умолчанию

В процессе тестирования вылез неожиданный баг. Если в папке нахдяться только четырехшкальные исходники (и только тогда), макрос пишет Runtime Error 6 и выкидывает debugger.

Сорри. Никак не могу у администратора выбить право писать ЛС.
prostoklassnik вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программа для тестирования(Delphi) zipo Помощь студентам 3 26.05.2012 17:58
Сводный файл для результатов - помогите плз porco Microsoft Office Excel 0 19.05.2009 15:31
прога для тестирования veyder21 Общие вопросы .NET 5 28.12.2008 15:21
Макрос в Excel для обработки группы файлов ad_sum Microsoft Office Excel 1 29.12.2007 16:56
Help! Немогу написать код для посчета и вывода результатов. Руслан БД в Delphi 2 22.12.2006 13:29