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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 12.09.2013, 11:25   #11
Lemon Tree
Пользователь
 
Регистрация: 11.09.2013
Сообщений: 15
По умолчанию

Спасибо ещё раз ))
по сути,все поля,не только эти 9 всегда одни и те же во всех присылаемых файлах.
Я могу собрать в один файл все файлы,в которых есть только одна услуга и в один все файлы,в которых есть остальные услуги. Т.е., получится всего 2 файла,но больших по объёму. А потом уже сверить их по адресам,суммировать начисления,долг и оплату, и отсутствующую услугу закинуть в основной большой файл
Если Вы всё понимаете, значит Вам не обо всём говорят
Lemon Tree вне форума
Старый 12.09.2013, 11:39   #12
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Я по этим девяти говорил/спрашивал о том, что они всегда в начале и на этих местах?
Т.е. можно это не проверять/искать и брать эти данные из этих позиций? Интересует правда только адрес, раз LS/SG/SNG не нужны. Ну и соответственно тогда собирать данные можно начинать с 10-го столбца, аналогично выгружать с 10-го.
Если будет 2 файла - тогда нет необходимости в диалоге их выбора, не сложно открыть вручную. Но это уже детали, которые можно поменять позже, это не затрагивает основной алгоритм сборки данных.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума
Старый 12.09.2013, 11:49   #13
Lemon Tree
Пользователь
 
Регистрация: 11.09.2013
Сообщений: 15
По умолчанию

да,эти поля всегда на одном и том же месте
но иногда бывают пропущены квартиры в файлах,допустим, одна УК даёт все квартиры,независимо живут в них или нет, а вторая УК даёт без таких квартир
Если Вы всё понимаете, значит Вам не обо всём говорят
Lemon Tree вне форума
Старый 12.09.2013, 12:45   #14
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Предварительно так.
Но нужно сперва синхронизировать номер ROOM'а - если в одном списке 0, то и в другом нужен 0. Или портить код, навешивая проверки и преобразования...
Ещё можно позже добавить индикацию строк, куда добавлены значения.
Так же можно подумать, как добавить те квартиры, которых нет в сводном файле - сейчас такие молча игнорируются. Хотя в словаре данные есть.

Код в стандартный модуль сборной книги (файл выложить не могу, это сами или попросите кого-нибудь), активируете книгу, из которой тянете данные, по Alt+F8 выполняете код sborka():


Код:
Option Explicit

Sub sborka()
    Dim a(), i&, ii&, tAdr$, t$

    If ActiveWorkbook.Name = ThisWorkbook.Name Then MsgBox "Не та книга активна!", vbCritical: Exit Sub

    With CreateObject("Scripting.Dictionary")
        .comparemode = 1
        a = ActiveSheet.[a1].CurrentRegion.Value
        For i = 2 To UBound(a)
            tAdr = a(i, 1) & "|" & a(i, 2) & "|" & a(i, 3) & "|" & a(i, 4) & "|" & a(i, 5) & "|" & a(i, 6)
            For ii = 10 To UBound(a, 2)
                t = tAdr & "|" & a(1, ii)
                .Item(t) = .Item(t) + a(i, ii)
            Next
        Next

        a = ThisWorkbook.Sheets(1).[a1].CurrentRegion.Value
        For i = 2 To UBound(a)
            tAdr = a(i, 1) & "|" & a(i, 2) & "|" & a(i, 3) & "|" & a(i, 4) & "|" & a(i, 5) & "|" & a(i, 6)
            For ii = 10 To UBound(a, 2)
                t = tAdr & "|" & a(1, ii)
                a(i, ii) = a(i, ii) + .Item(t)
            Next
        Next

        With ThisWorkbook.Sheets(1)
            .Columns(7).NumberFormat = "@"    'это думаю косяк примера, но лишним не будет :)
            .[a1].CurrentRegion.Value = a
        End With
    End With

    MsgBox "Данные собраны!"
End Sub
И смотрите, не запустите 2 раза - соберёт вдвойне! Поэтому в конце MsgBox "Данные собраны!".
Кстати, если где-то есть информация, различающая файлы - можно подумать, как это запоминать, чтоб лишний раз случайно не суммировать.
Хотя конечно это лишние тормоза... И лишняя работа.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума
Старый 12.09.2013, 13:28   #15
Lemon Tree
Пользователь
 
Регистрация: 11.09.2013
Сообщений: 15
По умолчанию

спасибо, как Вы быстро! )) но у меня не получилось, ошибка - не та книга активна, хотя пробовала в обоих файлах
Если Вы всё понимаете, значит Вам не обо всём говорят
Lemon Tree вне форума
Старый 12.09.2013, 13:29   #16
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ещё раз:
"Код в стандартный модуль сборной книги, активируете книгу, из которой тянете данные, по Alt+F8 выполняете код sborka()"

И не нужно код класть во все книги - только в одну сборную! А то сами запутаетесь, который выполнять, наделаете брака...

Вообще в коде вместо
"Не та книга активна!"
нужно бы писать
"Активируйте лист, из которого собираете данные!".
Так будет правильнее и понятнее, т.к. возможен вариант, что хоть и будет активна нужная книга, но на ненужном листе - и ничего по факту не соберётся, или выпадет в ошибку.
Можно в код добавить и проверку на такой случай, хотя на практике таких запусков не должно быть

Код:
    If ActiveSheet.[a1].Value <> "NUMBER" Then MsgBox "Явно не тот лист активен!", vbCritical: Exit Sub
Но это тоже не даёт полной гарантии...
Можно вообще сперва всю первую строку проверить на наличие характерных полей(после проверки что файл не сводный) - но всё равно тут ответственность юзера. Запускать на нужном листе, и только один раз.

P.S. Кстати я бы делал по такой схеме - есть отдельно сводный файл, и папка для свежих исходных файлов.
Набралось сколько-то исходных - не важно сколько - открыли сводный, запустили код - он перебрал/открыл все файлы в папке (можно её выбирать в диалоге, но на практике незачем), импортировал всё что нашёл, файлы перенёс в другую папку "отработанных" файлов.
Так будет просто, быстро и надёжно - повторно подтянется в том случае, если повторно закинете файлы. Но можно вести лог импортированных файлов и не допускать таких ситуаций, если имена файлов всегда разные.
Это в случае если данные всегда на определённом листе (хотя можно перебрать все листы, пока не найдётся [a1].Value = "NUMBER").
Озадачьте своих ИТ - пусть дорабатывают...
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 12.09.2013 в 14:20.
Hugo121 вне форума
Старый 12.09.2013, 17:51   #17
Lemon Tree
Пользователь
 
Регистрация: 11.09.2013
Сообщений: 15
По умолчанию

спасибо ))
ИТ-это я,остальные ещё хуже
на самом деле хотела себе облегчить жизнь,но т.к.,не работала в VBA, то не имею представления,как это сделать. Придётся заняться самообразованием ))
Если Вы всё понимаете, значит Вам не обо всём говорят
Lemon Tree вне форума
Старый 12.09.2013, 17:54   #18
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Тогда тем более Вам нужно вникнуть и далее усовершенствовать процесс самой - будете чувствовать себя уверенной, что при изменении исходных данных сможете сразу подправить макрос.
Но Вы конечно спрашивайте что непонятно, не бросим
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 12.09.2013 в 17:57.
Hugo121 вне форума
Старый 12.09.2013, 17:57   #19
Lemon Tree
Пользователь
 
Регистрация: 11.09.2013
Сообщений: 15
По умолчанию

спасибо в очередной раз буду пробовать
Если Вы всё понимаете, значит Вам не обо всём говорят
Lemon Tree вне форума
Старый 12.09.2013, 18:14   #20
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ещё раз повторю - код рабочий, но сперва нужно обеспечить соответствие адресов в примере: там в одном room нет, в другом room №0.
Как там в рабочих файлах - Вам виднее. Как вариант - можно заменой по диапазону убрать все нули (ячейка целиком).
Ну или нагружать код этой обработкой - собирать ключ с проверкой: если поле пустое, то ставим 0, иначе значение поля.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Слияние тхт файлов recycler Visual C++ 0 04.06.2012 19:57
Pascal слияние файлов death65 Помощь студентам 3 12.12.2010 15:41
Слияние файлов pasha26 Microsoft Office Excel 4 23.12.2009 08:15
Слияние двух файлов в один hen Общие вопросы C/C++ 1 07.10.2009 22:59
Слияние двух текстовых файлов nataly_ukr Общие вопросы Delphi 5 26.12.2007 16:45