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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2009, 09:25   #1
Антон Олегович
Пользователь
 
Регистрация: 28.07.2009
Сообщений: 17
По умолчанию Хитрый подсчёт среднего балла

Можно ли воплотить в жизнь такой алгоритм:
В папке находиться большое количество файлов %name%.xls (примерно 1000), нужно подсчитать среднее значение по одному столбцу в каждом файле, и перенести эти значения в общий файл,с названием каждого файла, по которому производился подсчёт.

Спасибо.
Антон Олегович вне форума Ответить с цитированием
Старый 06.08.2009, 10:04   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Если известны имена листов в этих файлах, из которых нужно брать данные, и если известен столбец с данными для подсчета, а также, известно, что максимальное количество строк в столбце может быть не более какого-то значения (это для скорости), то все можно сделать не открывая файлов.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 06.08.2009, 10:23   #3
Антон Олегович
Пользователь
 
Регистрация: 28.07.2009
Сообщений: 17
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Если известны имена листов в этих файлах, из которых нужно брать данные, и если известен столбец с данными для подсчета, а также, известно, что максимальное количество строк в столбце может быть не более какого-то значения (это для скорости), то все можно сделать не открывая файлов.
1. Имена файлов известны,вид у них такой: 00_000000_00
2.Столбец N
3.Максимальное количество строк 400
Антон Олегович вне форума Ответить с цитированием
Старый 06.08.2009, 11:15   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

А имена листов в этих файлах?
Обрабатывать все xls файлы, или файлы с другими расширениями, или все файлы, имеющие вид 00_000000_00?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 06.08.2009, 11:34   #5
Антон Олегович
Пользователь
 
Регистрация: 28.07.2009
Сообщений: 17
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
А имена листов в этих файлах?
Обрабатывать все xls файлы, или файлы с другими расширениями, или все файлы, имеющие вид 00_000000_00?
Файлы с расширением xls,а вд названия у них 00_000000_00, название листа у всех Выполнение заданий.Вот один из файлов12_101001_1.rar
Антон Олегович вне форума Ответить с цитированием
Старый 06.08.2009, 12:16   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Попробуйте на пустом листе выполнить макрос:
Код:
Sub Main()
    Dim myPath As String, myName As String, avr As Double, i As Long, j As Long
    Application.ScreenUpdating = False
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Укажите рабочую папку"
        .Show
        If .SelectedItems.Count = 0 Then Exit Sub
        myPath = .SelectedItems(1) & "\"
    End With
    myName = Dir(myPath & "*.xls"): j = 1
    Do While myName <> ""
        With Sheets(2).[A7:A400]
            Sheets(2).Cells.ClearContents
            .Formula = "='" & myPath & "[" & myName & "]Выполнение заданий'!$N$7:$N$400"
            .Value = .Value
        End With
        For i = Sheets(2).Cells(Rows.Count, 1).End(xlUp).Row To 7 Step -1
            If Sheets(2).Cells(i, 1) = 0 Then Sheets(2).Rows(i).Delete
        Next
        Cells(j, 1) = myName: Cells(j, 2) = Application.Average(Sheets(2).UsedRange): j = j + 1
        Sheets(2).Cells.ClearContents
        myName = Dir
    Loop
End Sub
Скажу сразу, работоспособность не проверял. Проверьте сами.
В процессе работы макрос использует второй лист для временного размещения данных. Поэтому, во-первых, запускать макрос нужно при неактивном втором листе, во вторых, второй лист должен обязательно присутствовать и быть пустым. Если нужно, можно макросом создавать временный лист, с последующим удалением.

P.S. Макрос обрабатывает все файлы в указанной папке с расширением ".xls". Если нужно, можно наложить маску с шаблоном на имена файлов и обрабатывать только те, которые имеют вид ##_######_##.xls
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 06.08.2009 в 12:19.
SAS888 вне форума Ответить с цитированием
Старый 06.08.2009, 13:20   #7
Антон Олегович
Пользователь
 
Регистрация: 28.07.2009
Сообщений: 17
Хорошо

Всё работает, спасибо большое
Антон Олегович вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск среднего арифметического в массиве Джед Общие вопросы C/C++ 15 12.06.2009 16:32
Хитрый сдвиг массива xakzona Паскаль, Turbo Pascal, PascalABC.NET 1 07.05.2009 21:49
Вычисление среднего во временном ряде alexk Microsoft Office Excel 5 18.06.2008 14:41
Fast Report, несколько хитрый отчет Jenya Компоненты Delphi 1 29.04.2008 20:32
Нахождение среднего арифметического AliVe Паскаль, Turbo Pascal, PascalABC.NET 1 12.04.2007 00:25