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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.07.2013, 18:52   #1
Kek
Пользователь
 
Регистрация: 20.06.2011
Сообщений: 54
По умолчанию оптимизировать макрос

В макросах не силён. Сделал просто повторение действий руками, но очень много лишнего. Точнее повторяющегося.
Подскажите, как избавиться от повторяющихся элементов.
работает: откр 20-80.xls и запускаем a_exp_00
Вложения
Тип файла: rar 20_80.rar (266.7 Кб, 17 просмотров)
Kek вне форума Ответить с цитированием
Старый 07.07.2013, 20:04   #2
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Так:
Код:
Public Sub www()
    Dim i&, s$
    On Error Resume Next ' если файла или листа не найдет
    For i = 1 To 15
        s = "r" & Format(i, "00")
        With GetObject(ThisWorkbook.Path & "\" & s & ".xls")
            .Sheets(1).UsedRange.Copy Sheets(s).[a1]: .Close 0
        End With
    Next
End Sub
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728

Последний раз редактировалось kuklp; 07.07.2013 в 20:15.
kuklp вне форума Ответить с цитированием
Старый 07.07.2013, 20:33   #3
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Сергей - а ВПРЫ?
Я вот думаю, что эти листы, копирование и ВПРы вообще не нужны - взяли файл, посчитали кодом повторы и общее количество, забили на первый лист...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 07.07.2013, 20:39   #4
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Гы) Игорь, я до них не дочитал
Цитата:
Сообщение от Kek Посмотреть сообщение
Подскажите, как избавиться от повторяющихся элементов.
Просто подсказал. Надеюсь, автор дополнит нужным.
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 07.07.2013, 20:59   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

ИМХО достаточно, но судить конечно не мне
Код:
Sub tt()
    Dim FSO
    Dim TheFolder, TheFiles, AFile

    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set TheFolder = FSO.GetFolder(ThisWorkbook.Path & "\")    'Каталог
    Set TheFiles = TheFolder.Files
    For Each AFile In TheFiles
        If UCase(FSO.GetExtensionName(AFile.Path)) = "XLS" And _
           AFile.Name <> ThisWorkbook.Name Then
            work AFile
        End If
    Next

End Sub

Sub work(n)
    Dim nm$, r As Range, a(), el, cnt1&, cnt2&, t$
    With Application
        .EnableEvents = False
        .ScreenUpdating = False
        nm = Split(n.Name, ".xls")(0)
        Set r = ThisWorkbook.Sheets(1).Rows(3).Find(nm, , xlValues, xlWhole)
        If Not r Is Nothing Then
            With CreateObject("scripting.dictionary")
                .comparemode = 1
                a = Range(r.Offset(1), r.End(xlDown)).Value
                For Each el In a: .Item(CStr(el)) = 0&: Next
                Set wb = GetObject(n)
                a = wb.Sheets(1).UsedRange.Value
                wb.Close 0
                For i = 1 To UBound(a)
                    If .exists(Trim(a(i, 1))) Then cnt1 = cnt1 + 1
                    t = Trim(a(i, 16))
                    If Len(t) Then
                        If IsNumeric(t) Then cnt2 = cnt2 + 1
                    End If
                Next
            End With
            r.Offset(1, 16) = cnt1
            r.Offset(5, 16) = cnt2
        End If

        .EnableEvents = True
        .ScreenUpdating = True
    End With
End Sub
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 10.07.2013, 10:53   #6
Kek
Пользователь
 
Регистрация: 20.06.2011
Сообщений: 54
По умолчанию

Огромное спасибо, то что нужно.
Сейчас тестирую.
Kek вне форума Ответить с цитированием
Старый 10.07.2013, 11:05   #7
Kek
Пользователь
 
Регистрация: 20.06.2011
Сообщений: 54
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
ИМХО достаточно, но судить конечно не мне
Код:
Sub tt()
    Dim FSO
    Dim TheFolder, TheFiles, AFile

    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set TheFolder = FSO.GetFolder(ThisWorkbook.Path & "\")    'Каталог
    Set TheFiles = TheFolder.Files
    For Each AFile In TheFiles
        If UCase(FSO.GetExtensionName(AFile.Path)) = "XLS" And _
           AFile.Name <> ThisWorkbook.Name Then
            work AFile
        End If
    Next

End Sub

Sub work(n)
    Dim nm$, r As Range, a(), el, cnt1&, cnt2&, t$
    With Application
        .EnableEvents = False
        .ScreenUpdating = False
        nm = Split(n.Name, ".xls")(0)
        Set r = ThisWorkbook.Sheets(1).Rows(3).Find(nm, , xlValues, xlWhole)
        If Not r Is Nothing Then
            With CreateObject("scripting.dictionary")
                .comparemode = 1
                a = Range(r.Offset(1), r.End(xlDown)).Value
                For Each el In a: .Item(CStr(el)) = 0&: Next
                Set wb = GetObject(n)
                a = wb.Sheets(1).UsedRange.Value
                wb.Close 0
                For i = 1 To UBound(a)
                    If .exists(Trim(a(i, 1))) Then cnt1 = cnt1 + 1
                    t = Trim(a(i, 16))
                    If Len(t) Then
                        If IsNumeric(t) Then cnt2 = cnt2 + 1
                    End If
                Next
            End With
            r.Offset(1, 16) = cnt1
            r.Offset(5, 16) = cnt2
        End If

        .EnableEvents = True
        .ScreenUpdating = True
    End With
End Sub
я не затронул вопрос, если дата меняется, то и данные изменяются в таблице "процент совпадения отсканированного товара с бестселлерами". а данные за предыдущий день 0.
что добавить, чтобы данные оставались за предыдущие дни?

Последний раз редактировалось Kek; 10.07.2013 в 11:47.
Kek вне форума Ответить с цитированием
Старый 31.07.2013, 13:29   #8
Kek
Пользователь
 
Регистрация: 20.06.2011
Сообщений: 54
По умолчанию

макрос отрабатывает отлично. сейчас разбираюсь, как вытягивать данные из папок по датам.
но остался вопрос по копированию обнолённых данных:
испробовал несколько вариантов, но ни один и них не подошёл.
в книге 20-80 после обновления данных копировались эти данные в таблицу по дате, которая находится ниже. по сути это будет обновлять каждый день.

Последний раз редактировалось Kek; 31.07.2013 в 13:31.
Kek вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
оптимизировать макрос Kek Microsoft Office Excel 2 29.06.2013 17:54
Возможно ли оптимизировать макрос Vadim39 Microsoft Office Word 9 21.05.2013 09:35
Помогите оптимизировать макрос kipish_lp Microsoft Office Excel 20 27.07.2010 10:48
Макрос вставки файлов в листы-Необходимо изменить ниже приведённый макрос as-is Microsoft Office Excel 4 25.02.2010 07:51
Оптимизировать код. Манжосов Денис :) Общие вопросы Delphi 1 20.10.2008 19:06