Страницы: 1
RSS
Последовательное извлечение данных с определенного диапазона с определенных страниц в одну
 
Голову сломала пытаясь написать такой код.
Последовательное извлечение данных с определенного диапазона с определенных страниц по столбцам в одной странице по соответствующим строкам.

Есть 6 преподавателей у каждого по 8 уроков. Всего 48 уроков.
каждый урок помещен на странице с названиями начинающиеся на "Предмет"
с каждого урока нужно извлечь данные такие как ("Название урока", "Время начала урока", "Дата начала") и поместить по порядку по столцам в строке соответстующего преподавателя.

Преподаватели по строкам. То есть должно получится 6 строк
Уроки по столбцам. То есть должно получится 8 столбцов.
И так выходит таблица 6x8

Для лучшего понимания сделала упрощенный пример с задачей, которая кажется практически "головоломкой года"
Помогите пожалуйста у кого есть идеи как решить.
 
вашу задачу можно решить с помощью формул.
ограничение может быть,если формул очень много понадобится(например,несколько тысяч)
 
Цитата
с каждого урока нужно извлечь данные
Цитата
и поместить по порядку по столцам в строке соответстующего преподавателя.
А где на листах с уроками фамилии преподавателей?
 
Каратаев спасибо за помощь. Это казалось совсем нерешаемым, а тут все так просто.
Единственное есть опасение, что если вдруг кто нибудь как то удалит формулу (такое иногда к сожалению происходит у нас) то возможно все придется вписывать заново.

Значит макрос здесь не вариант как я поняла?
пыталась вот так
Код
Private Sub Details()
Dim j&
Dim r&

With Sheets("График")
    For i = 2 To 9
        If .Cells(3, i).Value <> "" Then
        .Cells(3, i).ClearComments
        .Cells(3, i).Value = t
        .Cells(3, i).AddComment (s)
        End If
    Next i
End With

For j = 1 To Sheets.Count
    Select Case Sheets(j).Name
        Case "Предмет1", "Предмет2", "Предмет3", "Предмет4", "Предмет5", "Предмет6", "Предмет7", "Предмет8"

        With Worksheets(j)
            r = .Range("B2").Text & " (" & .Range("C1").Text & ") - " & .Range("L1").Text & " - (" & .Range("C3").Text & "-" & .Range("E3").Text & ") "
            t = .Range("C1").Value
        End With

    End Select
Next
End Sub

Изменено: bekzus - 04.03.2015 22:59:30
 
вообще,макросы нужно использовать,если в самом excel нельзя сделать или если неудобно .
если вам нужно именно макросом,то можно и макросом попытаться сделать.

можете защитить лист от  случайных изменений :Рецензирование -Защитить лист. в этом случае пользователь не сможет удалить данные из ячеек.
чтобы формулы не отвлекали(в строке формул),можно скрывать формулы,если поставить защиту листа:выделите ячейки -кликните правой кнопкой -формат ячеек - закладка Защита -флажок Скрыть формулы(формулы скроются после установки защиты)
Изменено: Karataev - 04.03.2015 22:59:44
 
Вы даже не представляете сколько проблем мне создали эти защиты листов, книг и их скрытие  и как все мои остальные собранные из разных ресурсов и написанные  с помощью Hugo, Юрий, Максим Зеленский, The Prist макросы переставали работать.

Я знаю все можно сделать с защитой если все правильно сделать, но там слишком много надо делать. Так что приходится без защиты.
 
Так макросом снимаете защиту, делаете дело, ставите назад защиту.
По этой задаче - я не вполне понял что именно нужно сделать, и какая связь преподавателей с этими листами-предметами.
Но алгоритм думаю может быть такой - перебираем листы и собираем в словарь данные (например здесь ключ Игорь|1, значение Грамматика - 12:00 - 02.02.2015 и т.д.), далее по ключам выгружаем собранное. Простой понятный код.
Изменено: Hugo - 04.03.2015 22:11:21
 
Hugo спасибо за помощь! Как все просто для Вас:) Буду изучать словарь.
 
Ну т.к. я задачу не понял - может быть иначе и проще будет делать, но с словарём тоже не сложно.
Если мы знаем какого преподавателя очередной лист, и в какой столбец его будем копировать - то у нас есть ключ, и есть данные (если строк много - можно собирать в массив или коллекцию), или делаем иначе - по ключу сохраняем координаты где лежат данные, т.е. в дааном случае достаточно запомнить в словаре имя листа.
Далее циклом по листу графика (или списку преподавателей и столбцов) по ключу получаем данные.

Но в этой задаче я не вижу как связаны преподаватели с данными.
Изменено: Hugo - 04.03.2015 22:34:15
 
Листы идут в таком же порядке:
Предмет1, Предмет2, Предмет3, Предмет4, Предмет5, Предмет6, Предмет7, Предмет8  Предмет1Б, Предмет2Б, Предмет3Б, Предмет4Б, Предмет5Б, Предмет6Б, Предмет7Б, Предмет8Б и тд
Изменено: bekzus - 04.03.2015 23:00:20
 
Но какая связь этих листов с Игорем и Бекзатом?
 
Я этот же вопрос задал в 20:30 пост #3, но ответа так и не последовало
 
Цитата
Но какая связь этих листов с Игорем и Бекзатом?
         Имя учителя (1)                    (2)              (3)                     (8)
(1)      У Игоря 8 предметов:     Предмет1,   Предмет2 ,.....,  Предмет8
(2)      У Бекзата 8 предметов: Предмет1Б, Предмет2Б,....., Предмет8Б

Листы в книге расположены по порядку: Предмет1,   Предмет2 ,.....,  Предмет8, Предмет1Б, Предмет2Б,....., Предмет8Б, и тд
Надо с Предмет1 взять данные, допустим, с ячейки "А1" и поместить в странице "График" в соответствующей строке (1) Игоря - соответствующей колонке (2) для Предмет1, затем взять данные со страницы Предмет2 и на странице "График" в той же строке, только уже во (3) колонке и так до 8 Предмета.

Потом то же самое проделать с Бекзатом. Взять у нее данные со страницы Предмет1Б с ячейки "А1" и поместить в ячейку Предмет1Б на странице График во (2) строке, во (2) колонке. Вот так и дальше.

Игорь         Бекзат        Нафиса      Джон          Асель        Сердар
- - - - - - - - - - - - - - - -   - - - - - - - -   - - - - - - - -   - - - - - - - -  - - - - - - - -
это нужно разбить на 6 кусков по 8 элементов и расположить в 6 рядов
вот так:
Игорь      - - - - - - - -
Бекзат    - - - - - - - -
Нафиса  - - - - - - - -
Джон      - - - - - - - -
Асель     - - - - - - - -
Сердар  - - - - - - - -
Цитата
Я этот же вопрос задал в 20:30 пост #3, но ответа так и не последовало
Кузмич я что-то даже не заметила как Вы написали. Вчера ночью было совсем не по себе. Извиняюсь.
 
У вас получается 48 листов и каждом по одной строчке,
м.б. лучше сделать 6 листов с именем преподавателя в названии и там восемь строк по предметам?
 
Ну тогда думаю словарь и не нужен.
Значит где-то есть список соответствия препод - предмет.
Идём циклом по списку преподов в графике - в нём цикл по предметам препода в списке соответствия - берём данные из соотв. листов и пишем в очередной столбец. Всё.
 
Цитата
и пишем в очередной столбец. Всё.

Ну Все так все :) Будем пробовать. Спасибо за совет!
 
Думаю список должен быть вида (например два столбца):

Игорь | предмет1
Игорь | предмет2
Бекзат | предмет1Б
Бекзат | предмет2Б

и так все возможные предметы строго на своих позициях по порядку.
Тогда внутренний цикл по этому списку - проверка имени - если совпало увеличиваем счётчик столбца предметов - проверяем наличие листа предмета - заполняем если есть лист.
Страницы: 1
Наверх