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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2011, 15:29   #1
Yalenka
Новичок
Джуниор
 
Регистрация: 29.03.2011
Сообщений: 3
По умолчанию необходимо разбить 1 лист с данными на несколько файлов по критерию из колонки

Добрый день,

У меня есть база данных сотрудников, на 2000 человек, у каждого сотрудника назначен супервизор (около 700 человек) в отдельной колонке.
Задача с помощью экселя 2003 сделать каждому супервизору отдельный файл с его людьми.
пример прикреплен в раре, эксель не крепился..
dummy file - пример базы
ivanov - пример результата
Помогите пожалуйста, мне подсказали что можно макросом быстро расделить, но я еще ими не овладела
заранее спасибо!
Вложения
Тип файла: zip dummy file.zip (3.0 Кб, 18 просмотров)
Тип файла: zip ivanov.zip (1.9 Кб, 15 просмотров)
Yalenka вне форума Ответить с цитированием
Старый 29.03.2011, 15:58   #2
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Здравствуйте
Цитата:
Сообщение от Yalenka Посмотреть сообщение
...У меня есть база данных сотрудников...
Задача с помощью экселя 2003 сделать каждому супервизору отдельный файл с его людьми...
1. База данных у Вас в Excel?
2. У Вас это одноразовая работа или ведётся изо дня в день?
Необходим ответы на вопросы, потому предварительный: Может просто сначала отсортировать в Excel по колонке "Direct Sup Name", а потом уже говорить как разбить вашу "базу" на 700 файлов
До свидания
OlegVE вне форума Ответить с цитированием
Старый 29.03.2011, 16:01   #3
Yalenka
Новичок
Джуниор
 
Регистрация: 29.03.2011
Сообщений: 3
По умолчанию

OlegVe, спасибо за вопросы,
да, база в Эксель.
такая работа делается первый раз сейчас, а потом будет повторяться с периодичностью в 3 месяца. поэтому ищу вариант оптимизации.
а зачем сортировать по имени супервизора?
Yalenka вне форума Ответить с цитированием
Старый 29.03.2011, 16:03   #4
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Цитата:
Сообщение от Yalenka Посмотреть сообщение
а зачем сортировать по имени супервизора?
Для упрощения обработки в цикле (если его использовать). Пробую сейчас по другому, без сортировки.
Неужели нужно 700 файлов!?

Последний раз редактировалось OlegVE; 29.03.2011 в 16:10.
OlegVE вне форума Ответить с цитированием
Старый 29.03.2011, 16:23   #5
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Вот это не подойдет?
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 29.03.2011, 16:24   #6
Yalenka
Новичок
Джуниор
 
Регистрация: 29.03.2011
Сообщений: 3
По умолчанию

звучит страшно, но да, иначе мне придется ручками каждому копи-пастить..
а так я файлы сложу в одной папке и разошлю вместе с коллегой.

ох, все равно бредово выглядит.. надо наверное еще побрейнстрормить...
Yalenka вне форума Ответить с цитированием
Старый 29.03.2011, 16:26   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Освоил для меня новое - массивы как Item словаря.
Хорошая штука.
Вроде всё работает, как надо:

Код:
Option Explicit
Option Compare Text

Sub Otbor()
    Dim a(), oDict As Object, i As Long, temp As String, rr As Range
    Dim x As Byte, kk
    
    With Application
    .DisplayAlerts = False
    .ScreenUpdating = False
        
    Set rr = ThisWorkbook.Sheets(1).[a1:k1]
    
    a = Range("A2:K" & Range("A" & Rows.Count).End(xlUp).Row).Value

    Set oDict = CreateObject("Scripting.Dictionary")
    
    For i = 1 To UBound(a)
        temp = Trim(a(i, 11))
        If Not oDict.Exists(temp) Then
            ReDim b(1 To UBound(a), 1 To 12)
            b(1, 12) = 1
            For x = 1 To 11: b(1, x) = a(i, x): Next
            oDict.Add temp, b
        Else
        b = oDict.Item(temp)
            b(1, 12) = b(1, 12) + 1
            For x = 1 To 11: b(b(1, 12), x) = a(i, x): Next
            oDict.Item(temp) = b
        End If
    Next

    

    For Each kk In oDict.keys
    
    With Workbooks.Add
    rr.Copy .Worksheets(1).[a1]
        .Worksheets(1).Name = kk
        .Worksheets(1).Range("A2:K2").Resize(oDict.Item(kk)(1, 12)) = oDict.Item(kk)
        .SaveAs ThisWorkbook.Path & "\" & kk
        .Close 0
    End With
    
    Next

    .DisplayAlerts = True
    .ScreenUpdating = True
    End With
End Sub
Вложения
Тип файла: zip Dictionary_with_Arr_in_Item.zip (13.3 Кб, 48 просмотров)
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 29.03.2011 в 23:44. Причина: Resize не так сделал... Позже добавил цикл при заполнении массива.
Hugo121 вне форума Ответить с цитированием
Старый 29.03.2011, 17:05   #8
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Yalenka, извините, я на работе. Задача меня заинтересовала. Загляните завтра. Но предварительно ответьте на вопрос исходя из следующего
Цитата:
а так я файлы сложу в одной папке и разошлю вместе с коллегой.
. Какова всё-таки конечная цель? Может можно/нужно рассылать по e-mail, не создавая 700 файлов, а создав, опять-же, 700 e-mail (может можно/нужно сгруппировать для супер-супервизора, визора над суперами)
OlegVE вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
объединение несколько файлов Excel в один лист документа Дмитрий11111111111 Microsoft Office Excel 2 15.02.2010 12:25
Разбить рабочий лист MS Word на 2 страницы Tayfun Общие вопросы Delphi 1 04.01.2010 18:26
Выбор из столбца по критерию и копировать ячейку из этой строки на другой лист Тетя Мотя Microsoft Office Excel 1 17.09.2009 16:46
Помогите плз. Необходимо взять данные из файлов по критерию. Rom1k06 Microsoft Office Excel 5 30.07.2008 12:57