Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Оптимизация разнесения данных по ячейкам / 8 сообщений из 8, страница 1 из 1
14.12.2007, 18:47:37
    #35011574
Оптимизация разнесения данных по ячейкам
Добрый день!

Есть лист в Excel со строчками в таком формате:
Номер листа - Номер колонки - Номер строки - Данное

Задача: предложить наилучший (по времени работы) способ разнести все данные по указанным для них листам, колонкам и строчкам.
При этом сохранить имеющийся формат других листов, куда падают данные.
Данных может быть много, порядка 50 000 ячеек.

Может, кто-нибудь уже решал подобное и есть готовый макрос или утилитка какая?
...
Рейтинг: 0 / 0
14.12.2007, 20:39:56
    #35011706
Taranaga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация разнесения данных по ячейкам
Ну... гдето так...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Sub InsertData()
SourData = "Лист с данными" 'Здесь вписываем название листа с данными
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
k =  2 
While Sheets(SourData).Cells(k,  1 ) <> ""
    S = Sheets(SourData).Cells(k,  1 )
    C = Sheets(SourData).Cells(k,  2 )
    R = Sheets(SourData).Cells(k,  3 )
    D = Sheets(SourData).Cells(k,  4 )
    Sheets(S).Cells(R, C) = D
    k = k +  1 
Wend
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
...
Рейтинг: 0 / 0
14.12.2007, 20:43:48
    #35011709
Taranaga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация разнесения данных по ячейкам
Хотя оптимизация здесь - непричем, ибо оптимизировать вроде как - нечего...
...
Рейтинг: 0 / 0
14.12.2007, 21:27:20
    #35011750
vbapro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация разнесения данных по ячейкам
TaranagaХотя оптимизация здесь - непричем, ибо оптимизировать вроде как - нечего...Дейтвительно, все варианты будут именно "где-то так" :), только можно немного оптимизировать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Sub InsertData()
' типизированные переменные работают быстрее
Dim k As Long
Dim S As String
Dim C As Long
Dim R As Long
Dim D As String

    SourData = "Лист с данными" 'Здесь вписываем название листа с данными
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
        
        With Sheets(SourData) 'эта конструкция тоже прибавит скорости
            k =  2 
            While .Cells(k,  1 ) <> ""
                S = .Cells(k,  1 )
                C = .Cells(k,  2 )
                R = .Cells(k,  3 )
                D = .Cells(k,  4 )
                Sheets(S).Cells(R, C) = D
                k = k +  1 
            Wend
        End With
        
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
Следующим шагом ускорения может быть предварительная сортировка по названиям листов и введение переменной листа, чтоб обращаться не Sheets(S), а к переменной, которая будет меняться при смене названия листа.
...
Рейтинг: 0 / 0
14.12.2007, 22:30:41
    #35011810
Taranaga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация разнесения данных по ячейкам
vbaproСледующим шагом ускорения может быть предварительная сортировка по названиям листов и введение переменной листа, чтоб обращаться не Sheets(S), а к переменной, которая будет меняться при смене названия листа.:) Ага, а следующим - предварительная сортировка по номерам строк и столбцов, поиск непрерывных последовательностей и вставка данных поблочно.
А потом, после очередной оптимизации, программа уже научится приносить Павлу пиво или, на худой конец, чай.
...
Рейтинг: 0 / 0
15.12.2007, 00:36:56
    #35011912
vbapro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация разнесения данных по ячейкам
Taranaga vbaproСледующим шагом ускорения может быть предварительная сортировка по названиям листов и введение переменной листа, чтоб обращаться не Sheets(S), а к переменной, которая будет меняться при смене названия листа.:) Ага, а следующим - предварительная сортировка по номерам строк и столбцов, поиск непрерывных последовательностей и вставка данных поблочно.
А потом, после очередной оптимизации, программа уже научится приносить Павлу пиво или, на худой конец, чай.
...
Рейтинг: 0 / 0
15.12.2007, 12:38:12
    #35012145
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация разнесения данных по ячейкам
Быстрее будет формулами, если есть возможность замостить формулами все листы
...
Рейтинг: 0 / 0
16.12.2007, 20:09:40
    #35013259
Оптимизация разнесения данных по ячейкам
Ага... Большое спасибо за проверку гипотезы, значит, чудес все-таки не бывает и хорошие алгоритмы еще никто не отменял.
С формулами идея интересная, проверю возможность.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Оптимизация разнесения данных по ячейкам / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]