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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2012, 19:13   #1
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию Немного нестандартное добавление данных

Добрый день, уважаемые форумчане!
Еженедельно поступают данные (в примере лист 1). Записи (данные) по четырем разным клиентам за одну дату идут одна под другой. Структура таблицы именно такая (выгрузка). Эти данные необходимо перебросить (добавить) в накопительный файл со структурой таблицы как в примере на листе 2. То есть, дата должна быть один раз, а данные по клиенту (суммы) заносится каждые в свой столбец. Причем, тут клиента 3 (три столбца). Четвертого не надо учитывать, просто пропускать. Обращаю внимание, что заголовки столбцов менять нельзя. Вот такая свистопляска. Чего-то я видно перегрелся...)))))))))
Но все равно, заранее спасибо!!!
Вложения
Тип файла: rar пример.rar (7.9 Кб, 25 просмотров)
strannick вне форума Ответить с цитированием
Старый 06.07.2012, 22:38   #2
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Код:
Sub ertert()
Dim x, arr(), y(), i&, j&
arr = [{"Петя","Гриша","Вася"}]
With Sheets("Лист1")
    x = .Range("C1:F" & .Cells(Rows.Count, 3).End(xlUp).Row).Value
End With
With CreateObject("Scripting.Dictionary")
    .CompareMode = 1
    For i = 2 To UBound(x)
        If Not .Exists(x(i, 2)) Then
            For j = 1 To UBound(arr)
                If InStr(x(i, 2), arr(j)) Then .Item(x(i, 2)) = j + 1: Exit For
            Next
        End If
    Next i

    ReDim y(1 To UBound(x), 1 To UBound(arr) + 1): j = 0
    For i = 2 To UBound(x)
        If x(i, 1) <> x(i - 1, 1) Then j = j + 1: y(j, 1) = x(i, 1)
        If .Exists(x(i, 2)) Then y(j, .Item(x(i, 2))) = x(i, 4)
    Next i
End With

Sheets("Лист2").Cells(Rows.Count, 1).End(xlUp)(2, 1).Resize(j, UBound(y, 2)).Value = y()
End Sub
nilem вне форума Ответить с цитированием
Старый 07.07.2012, 11:04   #3
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию

Спасибо огромное!!! Все перекидывается как надо.
strannick вне форума Ответить с цитированием
Старый 19.07.2012, 12:22   #4
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию

Возник еще один вопросик. Если необходимо раскидывать не все данных из источника, а только 5 последних строк, это надо так?

x = .Range("C1:F" & .Cells(Rows.Count-5, 3).End(xlUp).Row).Value

У меня что-то не сработало. Наверное, не так.
strannick вне форума Ответить с цитированием
Старый 19.07.2012, 12:45   #5
ShAM66
Форумчанин
 
Регистрация: 24.02.2012
Сообщений: 160
По умолчанию

Наверное, так:
Код:
x = .Range("C" & .Cells(Rows.Count, 3).End(xlUp).Row - 5 & ":F" & .Cells(Rows.Count, 3).End(xlUp).Row).Value

Последний раз редактировалось ShAM66; 19.07.2012 в 12:50.
ShAM66 вне форума Ответить с цитированием
Старый 20.07.2012, 10:31   #6
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию

Да, точно. Так работает. Спасибо.
strannick вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Немного сложный импорт данных из xls файла Pavarotti Microsoft Office Excel 1 17.06.2012 16:56
Нестандартное изображние Abuhamed JavaScript, Ajax 4 08.03.2012 23:31
база данных. добавление и удаление данных midiss Общие вопросы Delphi 3 09.12.2011 13:07
Нестандартное включение ПК Bat{CMD}_Men Операционные системы общие вопросы 1 24.08.2009 17:04
Нестандартное PopupMenu Crivel Помощь студентам 6 12.08.2008 19:32