Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Состыковать строчки из 2 таблиц по первому столбцв - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Состыковать строчки из 2 таблиц по первому столбцв (Формулы/Formulas)
Состыковать строчки из 2 таблиц по первому столбцв
katrinazima Дата: Пятница, 11.07.2014, 14:21 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
[size=6][font=Arial][color=black]Имеется 2 таблицы, которые нужно стыковать раз в месяц по одному столбцу. В каждой из таблиц нужно убрать двойники по коду сбыт комп(первые столбцы в таблицах), просуммировав ячейки с объемами, добавив колонку количество лицевых счетов.А затем состыковать по этим ячейкам, так что совпавшие по коду строчки были напротив друг друга, а не совпавшие из обоих таблиц просто остались в своей половине. Для примера кусочек, на 1 и 2 листах имеющиеся таблицы, на 3 что должно примерно получится. Можно ли такие операции осуществить с помощью встроенных функций? или еще как то? %)
К сообщению приложен файл: 2547050.xls (88.5 Kb)
 
Ответить
Сообщение[size=6][font=Arial][color=black]Имеется 2 таблицы, которые нужно стыковать раз в месяц по одному столбцу. В каждой из таблиц нужно убрать двойники по коду сбыт комп(первые столбцы в таблицах), просуммировав ячейки с объемами, добавив колонку количество лицевых счетов.А затем состыковать по этим ячейкам, так что совпавшие по коду строчки были напротив друг друга, а не совпавшие из обоих таблиц просто остались в своей половине. Для примера кусочек, на 1 и 2 листах имеющиеся таблицы, на 3 что должно примерно получится. Можно ли такие операции осуществить с помощью встроенных функций? или еще как то? %)

Автор - katrinazima
Дата добавления - 11.07.2014 в 14:21
Baykal Дата: Пятница, 11.07.2014, 15:15 | Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
katrinazima я бы делал так:

Судя по тому что я понял, в ЛИСТЕ1 в дублирующих колонках разница только в сумме! Поэтому тут, я сначала сделал бы в ЛИСТЕ1, в конце таблицы: напротив строки "A2=ЕСЛИ(A2=A3;U2+U3;U2)"!

После, скопировав в ЛИСТ3 первый столбец удалил бы дубликаты и подставил при помощи ВПР все значения, включая новый столбец, как сумму одинаковых значений!

После этого при помощи той же функции ВПР подставил бы значения из 2 листа, опираясь на значения из 1 столбца в ЛИСТ3!


Сообщение отредактировал Baykal - Пятница, 11.07.2014, 16:03
 
Ответить
Сообщениеkatrinazima я бы делал так:

Судя по тому что я понял, в ЛИСТЕ1 в дублирующих колонках разница только в сумме! Поэтому тут, я сначала сделал бы в ЛИСТЕ1, в конце таблицы: напротив строки "A2=ЕСЛИ(A2=A3;U2+U3;U2)"!

После, скопировав в ЛИСТ3 первый столбец удалил бы дубликаты и подставил при помощи ВПР все значения, включая новый столбец, как сумму одинаковых значений!

После этого при помощи той же функции ВПР подставил бы значения из 2 листа, опираясь на значения из 1 столбца в ЛИСТ3!

Автор - Baykal
Дата добавления - 11.07.2014 в 15:15
katrinazima Дата: Понедельник, 14.07.2014, 08:28 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Baykal, лицевых счетов с совпадающим кодом может быть и 15, и 8 и так не получится "A2=ЕСЛИ(A2=A3;U2+U3;U2)"! . Всего лицевых счетов порядка 18000, у меня даже комп (на работе ) при растягивании формулы ВПР иногда висит даже , ее приходится применять дважды, чтобы вытащить нехватающие из 2 листа(в нем тоже могут быть лицевые которых нет в первом) в третьем. Я до этого примерно так и делала, только суммировала в Visual FoxPro, это очень долго и легко накосячить. Подумала, что может у Excel есть возможности сделать, как то по другому. Спасибо за ответ! :)
 
Ответить
СообщениеBaykal, лицевых счетов с совпадающим кодом может быть и 15, и 8 и так не получится "A2=ЕСЛИ(A2=A3;U2+U3;U2)"! . Всего лицевых счетов порядка 18000, у меня даже комп (на работе ) при растягивании формулы ВПР иногда висит даже , ее приходится применять дважды, чтобы вытащить нехватающие из 2 листа(в нем тоже могут быть лицевые которых нет в первом) в третьем. Я до этого примерно так и делала, только суммировала в Visual FoxPro, это очень долго и легко накосячить. Подумала, что может у Excel есть возможности сделать, как то по другому. Спасибо за ответ! :)

Автор - katrinazima
Дата добавления - 14.07.2014 в 08:28
katrinazima Дата: Среда, 16.07.2014, 10:14 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Попытаюсь разбить задачу на части, т.к. не понятно видимо. У меня есть 2 таблицы, в первых столбцах есть так называемый код сбыт компании(это то по чему они совпадают). Мне нужно с листа2 добавить строчки по этому коду в лист1. С помощью форума я смогла сделать вот так:
[vba]
Код
Sub sverka()
     Dim y(), z(), aa(), i&, t&

     With CreateObject("Scripting.Dictionary"): .comparemode = 1
         y = [Лист2!A1].CurrentRegion.Value
         For i = 2 To UBound(y): .Item(y(i, 1)) = i: Next
         z = [Лист1!A1].CurrentRegion.Columns(1).Value
         aa = [Лист2!A1].CurrentRegion.Columns(2).Resize(, 24).Value
         For i = 2 To UBound(z)
             If .exists(z(i, 1)) Then
                 t = .Item(z(i, 1))
                 aa(i, 1) = y(t, 2)
                 aa(i, 2) = y(t, 3)
                 aa(i, 3) = y(t, 4)
                 aa(i, 4) = y(t, 5)
                 aa(i, 5) = y(t, 6)
                 aa(i, 6) = y(t, 7)
                 aa(i, 7) = y(t, 8)
                 aa(i, 8) = y(t, 9)
                 aa(i, 9) = y(t, 10)
                 aa(i, 10) = y(t, 11)
                 aa(i, 11) = y(t, 12)
                 aa(i, 12) = y(t, 13)
                 aa(i, 13) = y(t, 14)
                 aa(i, 14) = y(t, 15)
                 aa(i, 15) = y(t, 16)
                 aa(i, 16) = y(t, 17)
                 aa(i, 17) = y(t, 18)
                 aa(i, 19) = y(t, 20)
                 aa(i, 20) = y(t, 21)
                 aa(i, 21) = y(t, 22)
                 aa(i, 22) = y(t, 23)
                 aa(i, 23) = y(t, 24)
             Else
                 aa(i, 1) = "нет данных": aa(i, 2) = "нет данных": aa(i, 3) = "нет данных": aa(i, 4) = "нет данных": aa(i, 5) = "нет данных": aa(i, 6) = "нет данных": aa(i, 7) = "нет данных": aa(i, 8) = "нет данных": aa(i, 9) = "нет данных": aa(i, 10) = "нет данных": aa(i, 11) = "нет данных": aa(i, 12) = "нет данных": aa(i, 13) = "нет данных": aa(i, 14) = "нет данных": aa(i, 15) = "нет данных": aa(i, 16) = "нет данных": aa(i, 17) = "нет данных": aa(i, 18) = "нет данных": aa(i, 19) = "нет данных": aa(i, 20) = "нет данных": aa(i, 21) = "нет данных": aa(i, 22) = "нет данных": aa(i, 23) = "нет данных": aa(i, 24) = "нет данных"
             End If
         Next
         [Лист1!A1].CurrentRegion.Columns(25).Resize(, 24).Value = aa
     End With
End Sub
[/vba]

НО, с листа 2 нужно еще добавить в лист1 те строчки с кодами сбыт компании, которых нет на листе1. И это еще не все. До перетаскивания данных, на обоих листах нужно убрать двойные коды(та же первая колонка, и их бывает разное количество, но не больше 100 точно), просуммировав колонку объем. Это нужно чтобы сравнить объемы потребления по одному и тому же коду.
К сообщению приложен файл: 1229640.xls (89.5 Kb)
 
Ответить
СообщениеПопытаюсь разбить задачу на части, т.к. не понятно видимо. У меня есть 2 таблицы, в первых столбцах есть так называемый код сбыт компании(это то по чему они совпадают). Мне нужно с листа2 добавить строчки по этому коду в лист1. С помощью форума я смогла сделать вот так:
[vba]
Код
Sub sverka()
     Dim y(), z(), aa(), i&, t&

     With CreateObject("Scripting.Dictionary"): .comparemode = 1
         y = [Лист2!A1].CurrentRegion.Value
         For i = 2 To UBound(y): .Item(y(i, 1)) = i: Next
         z = [Лист1!A1].CurrentRegion.Columns(1).Value
         aa = [Лист2!A1].CurrentRegion.Columns(2).Resize(, 24).Value
         For i = 2 To UBound(z)
             If .exists(z(i, 1)) Then
                 t = .Item(z(i, 1))
                 aa(i, 1) = y(t, 2)
                 aa(i, 2) = y(t, 3)
                 aa(i, 3) = y(t, 4)
                 aa(i, 4) = y(t, 5)
                 aa(i, 5) = y(t, 6)
                 aa(i, 6) = y(t, 7)
                 aa(i, 7) = y(t, 8)
                 aa(i, 8) = y(t, 9)
                 aa(i, 9) = y(t, 10)
                 aa(i, 10) = y(t, 11)
                 aa(i, 11) = y(t, 12)
                 aa(i, 12) = y(t, 13)
                 aa(i, 13) = y(t, 14)
                 aa(i, 14) = y(t, 15)
                 aa(i, 15) = y(t, 16)
                 aa(i, 16) = y(t, 17)
                 aa(i, 17) = y(t, 18)
                 aa(i, 19) = y(t, 20)
                 aa(i, 20) = y(t, 21)
                 aa(i, 21) = y(t, 22)
                 aa(i, 22) = y(t, 23)
                 aa(i, 23) = y(t, 24)
             Else
                 aa(i, 1) = "нет данных": aa(i, 2) = "нет данных": aa(i, 3) = "нет данных": aa(i, 4) = "нет данных": aa(i, 5) = "нет данных": aa(i, 6) = "нет данных": aa(i, 7) = "нет данных": aa(i, 8) = "нет данных": aa(i, 9) = "нет данных": aa(i, 10) = "нет данных": aa(i, 11) = "нет данных": aa(i, 12) = "нет данных": aa(i, 13) = "нет данных": aa(i, 14) = "нет данных": aa(i, 15) = "нет данных": aa(i, 16) = "нет данных": aa(i, 17) = "нет данных": aa(i, 18) = "нет данных": aa(i, 19) = "нет данных": aa(i, 20) = "нет данных": aa(i, 21) = "нет данных": aa(i, 22) = "нет данных": aa(i, 23) = "нет данных": aa(i, 24) = "нет данных"
             End If
         Next
         [Лист1!A1].CurrentRegion.Columns(25).Resize(, 24).Value = aa
     End With
End Sub
[/vba]

НО, с листа 2 нужно еще добавить в лист1 те строчки с кодами сбыт компании, которых нет на листе1. И это еще не все. До перетаскивания данных, на обоих листах нужно убрать двойные коды(та же первая колонка, и их бывает разное количество, но не больше 100 точно), просуммировав колонку объем. Это нужно чтобы сравнить объемы потребления по одному и тому же коду.

Автор - katrinazima
Дата добавления - 16.07.2014 в 10:14
katrinazima Дата: Среда, 16.07.2014, 10:32 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
В колонку "Объем (в т.ч. неуч. потери)(РГЭС)" вставляет с листа2 не то что нужно, наверно из-за того что не убраны двойные коды в листах. Не разбираюсь вообще
 
Ответить
СообщениеВ колонку "Объем (в т.ч. неуч. потери)(РГЭС)" вставляет с листа2 не то что нужно, наверно из-за того что не убраны двойные коды в листах. Не разбираюсь вообще

Автор - katrinazima
Дата добавления - 16.07.2014 в 10:32
katrinazima Дата: Среда, 16.07.2014, 11:46 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Попробую 1 часть задачи описать. На листе "с двойниками" -исходные данные. Нужно, чтобы в итогом виде в первой колонке код не повторялся, т.е. если А1=А2=...Аn, то ячейки столбца "Объем (в т.ч. неуч. потери)(РГЭС)" S1+S2+...Sn, а остальные ячейки в строчке можно взять с любой строчки из перечня n(хотя желательно, где больше объем). В итоге должно получится 1 строчка(вместо n строчек) с одним кодом, суммарным объемом(в ячейке S), добавить колонку Кол-во ЛС(z), указать в ней число n(а если строчка одна, то 1) и всеми остальными данными. В прилагаемом файле выделены изменения
Очень надеюсь на Вашу помощь
К сообщению приложен файл: _Microsoft_Exce.xls (52.0 Kb)
 
Ответить
СообщениеПопробую 1 часть задачи описать. На листе "с двойниками" -исходные данные. Нужно, чтобы в итогом виде в первой колонке код не повторялся, т.е. если А1=А2=...Аn, то ячейки столбца "Объем (в т.ч. неуч. потери)(РГЭС)" S1+S2+...Sn, а остальные ячейки в строчке можно взять с любой строчки из перечня n(хотя желательно, где больше объем). В итоге должно получится 1 строчка(вместо n строчек) с одним кодом, суммарным объемом(в ячейке S), добавить колонку Кол-во ЛС(z), указать в ней число n(а если строчка одна, то 1) и всеми остальными данными. В прилагаемом файле выделены изменения
Очень надеюсь на Вашу помощь

Автор - katrinazima
Дата добавления - 16.07.2014 в 11:46
Pelena Дата: Среда, 16.07.2014, 21:09 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 19185
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
Посмотрите вариант по мотивам Вашего первого примера. Нужно запустить макрос Consolidation. Результат будет на листе Слияние1
К сообщению приложен файл: katrinazima_1.rar (31.0 Kb)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеПосмотрите вариант по мотивам Вашего первого примера. Нужно запустить макрос Consolidation. Результат будет на листе Слияние1

Автор - Pelena
Дата добавления - 16.07.2014 в 21:09
Hugo Дата: Среда, 16.07.2014, 21:38 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3253
Репутация: 707 ±
Замечаний: 0% ±

2019
Двойные коды можно убрать, с суммированием количества. Но что делать с другими полями - inn(ЯСК) там разные, разные наименования, адреса тоже вероятно могут отличаться.
Это на первом листе. А на втором там вообще чуть ли не все поля разные. Может тогда со второго листа брать только общее потребление по точке? Это проще - можно его запомнить в словаре по каждой точке, потом подгрузить на первый лист (сперва там убрать дубли).

Или может делать иначе - просто в новый файл/лист вывести сверку потребления по точкам. А эти два листа вообще не менять.
И кстати это легко сделать вручную и формулами - сперва в копии убрать дубли по точкам, затем СУММПРОИЗВ() или СУММЕСЛИ() по этим двум исходным файлам.
Ну или две сводные, затем сравниваем хоть ВПР() эти две сводные.

P.S. Перечитал сообщение №3 - ну может тогда сделать макросом вывод в новый файл: столбец всех точек (из обоих файлов), а рядом столбцы с суммами. Где-то будут пустые ячейки, если не совпадают точки между файлами.
И код будет довольно простой - можно собрать 3 словаря, один общий точек, и два с суммами по листу.
Далее цикл по общему, по нему извлекаем суммы из двух других.

Вот код для файла 1229640.xls:
[vba]
Код
Option Explicit

Sub sverka2()
      Dim a(), aa(), i&, d1 As Object, d2 As Object, dAll As Object, k

      Set d1 = CreateObject("Scripting.Dictionary"): d1.comparemode = 1
      Set d2 = CreateObject("Scripting.Dictionary"): d2.comparemode = 1
      Set dAll = CreateObject("Scripting.Dictionary"): dAll.comparemode = 1

      a = [Лист1!A1].CurrentRegion.Columns(1).Value
      aa = [Лист1!A1].CurrentRegion.Columns(21).Value
      For i = 2 To UBound(a)
          dAll.Item(a(i, 1)) = 0&
          d1.Item(a(i, 1)) = d1.Item(a(i, 1)) + aa(i, 1)
      Next

      a = [Лист2!A1].CurrentRegion.Columns(1).Value
      aa = [Лист2!A1].CurrentRegion.Columns(19).Value
      For i = 2 To UBound(a)
          dAll.Item(a(i, 1)) = 0&
          d2.Item(a(i, 1)) = d2.Item(a(i, 1)) + aa(i, 1)
      Next

      ReDim a(1 To dAll.Count, 1 To 3)
      i = 0
      For Each k In dAll.keys
          i = i + 1
          a(i, 1) = k
          a(i, 2) = d1.Item(k)
          a(i, 3) = d2.Item(k)
      Next

      Workbooks.Add(1).Sheets(1).[a1].Resize(i, 3) = a
End Sub
[/vba]
Можно коды отсортировать - но это несложно сделать и вручную на листе.
Можно массив расширить и тут же рядом писать разницу двух сумм. Далее можно поставить фильтр или отсортировать по этому полю особо злостных "несовпаденцев".


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеДвойные коды можно убрать, с суммированием количества. Но что делать с другими полями - inn(ЯСК) там разные, разные наименования, адреса тоже вероятно могут отличаться.
Это на первом листе. А на втором там вообще чуть ли не все поля разные. Может тогда со второго листа брать только общее потребление по точке? Это проще - можно его запомнить в словаре по каждой точке, потом подгрузить на первый лист (сперва там убрать дубли).

Или может делать иначе - просто в новый файл/лист вывести сверку потребления по точкам. А эти два листа вообще не менять.
И кстати это легко сделать вручную и формулами - сперва в копии убрать дубли по точкам, затем СУММПРОИЗВ() или СУММЕСЛИ() по этим двум исходным файлам.
Ну или две сводные, затем сравниваем хоть ВПР() эти две сводные.

P.S. Перечитал сообщение №3 - ну может тогда сделать макросом вывод в новый файл: столбец всех точек (из обоих файлов), а рядом столбцы с суммами. Где-то будут пустые ячейки, если не совпадают точки между файлами.
И код будет довольно простой - можно собрать 3 словаря, один общий точек, и два с суммами по листу.
Далее цикл по общему, по нему извлекаем суммы из двух других.

Вот код для файла 1229640.xls:
[vba]
Код
Option Explicit

Sub sverka2()
      Dim a(), aa(), i&, d1 As Object, d2 As Object, dAll As Object, k

      Set d1 = CreateObject("Scripting.Dictionary"): d1.comparemode = 1
      Set d2 = CreateObject("Scripting.Dictionary"): d2.comparemode = 1
      Set dAll = CreateObject("Scripting.Dictionary"): dAll.comparemode = 1

      a = [Лист1!A1].CurrentRegion.Columns(1).Value
      aa = [Лист1!A1].CurrentRegion.Columns(21).Value
      For i = 2 To UBound(a)
          dAll.Item(a(i, 1)) = 0&
          d1.Item(a(i, 1)) = d1.Item(a(i, 1)) + aa(i, 1)
      Next

      a = [Лист2!A1].CurrentRegion.Columns(1).Value
      aa = [Лист2!A1].CurrentRegion.Columns(19).Value
      For i = 2 To UBound(a)
          dAll.Item(a(i, 1)) = 0&
          d2.Item(a(i, 1)) = d2.Item(a(i, 1)) + aa(i, 1)
      Next

      ReDim a(1 To dAll.Count, 1 To 3)
      i = 0
      For Each k In dAll.keys
          i = i + 1
          a(i, 1) = k
          a(i, 2) = d1.Item(k)
          a(i, 3) = d2.Item(k)
      Next

      Workbooks.Add(1).Sheets(1).[a1].Resize(i, 3) = a
End Sub
[/vba]
Можно коды отсортировать - но это несложно сделать и вручную на листе.
Можно массив расширить и тут же рядом писать разницу двух сумм. Далее можно поставить фильтр или отсортировать по этому полю особо злостных "несовпаденцев".

Автор - Hugo
Дата добавления - 16.07.2014 в 21:38
PowerBoy Дата: Четверг, 17.07.2014, 07:46 | Сообщение № 9
Группа: Проверенные
Ранг: Участник
Сообщений: 100
Репутация: 31 ±
Замечаний: 0% ±

2003
[vba]
Код

Public Sub RefreshData()
'Created using add-in ActiveTables
Dim strConnection As String
Dim strSQL As String
strConnection = iif(Val(Application.Version) < 12,"OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties='Excel 8.0;HDR=YES;IMEX=3';","OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties='Excel 12.0;HDR=YES;IMEX=3';")
strSQL = "SELECT   [Код точки уч#сбыт#комп#(РГЭС)],  SUM([Объем (в т#ч# неуч# потери)(РГЭС)]) AS Объем,  count(*) AS Колво,  FIRST([Код точки учета (РГЭС)]),  FIRST([ПС    (РГЭС)]),  FIRST([СШ    (РГЭС)]),  FIRST([Фидер (РГЭС)]),  FIRST([КТП   (РГЭС)]),  FIRST([Фидер 0#4(РГЭС)]),  FIRST([Наименование точки учета(РГЭС)]),  FIRST([Наименование потребителя   (РГЭС)]),  FIRST([Уровень напряжения(РГЭС)]),  FIRST([Номер счетчика(РГЭС)]),  FIRST([Тип счетчика(РГЭС)]),  FIRST([Код типа счетчика(РГЭС)]),  FIRST([Новое показание(РГЭС)]),  FIRST([Старое показание(РГЭС)]),  FIRST([Расчетный коэф#(РГЭС)]),  FIRST([Процент потерь(РГЭС)]),  FIRST([Расчетные потери(РГЭС)]),  FIRST([РЭС(РГЭС)]),  FIRST([Неуч#потери(РГЭС)]),  FIRST([МОП/Норм(РГЭС)]),  FIRST([ИНН(РГЭС)]),  FIRST([Бюджет(РГЭС)]),  FIRST([Подр# ЯСК(РГЭС)])  FROM   [с двойниками$]  GROUP BY   [Код точки уч#сбыт#комп#(РГЭС)]  ORDER BY   [Код точки уч#сбыт#комп#(РГЭС)],  SUM([Объем (в т#ч# неуч# потери)(РГЭС)]) DESC  "
With ThisWorkbook.ActiveSheet
     .UsedRange.Clear
     With .QueryTables.Add(strConnection, .Range("A1"), strSQL)
          .Refresh False
          .Delete
     End With
End With
End Sub
[/vba]


Excel + SQL = ActiveTables (http://vk.com/ExcelSQL)

Сообщение отредактировал PowerBoy - Четверг, 17.07.2014, 07:49
 
Ответить
Сообщение[vba]
Код

Public Sub RefreshData()
'Created using add-in ActiveTables
Dim strConnection As String
Dim strSQL As String
strConnection = iif(Val(Application.Version) < 12,"OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties='Excel 8.0;HDR=YES;IMEX=3';","OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties='Excel 12.0;HDR=YES;IMEX=3';")
strSQL = "SELECT   [Код точки уч#сбыт#комп#(РГЭС)],  SUM([Объем (в т#ч# неуч# потери)(РГЭС)]) AS Объем,  count(*) AS Колво,  FIRST([Код точки учета (РГЭС)]),  FIRST([ПС    (РГЭС)]),  FIRST([СШ    (РГЭС)]),  FIRST([Фидер (РГЭС)]),  FIRST([КТП   (РГЭС)]),  FIRST([Фидер 0#4(РГЭС)]),  FIRST([Наименование точки учета(РГЭС)]),  FIRST([Наименование потребителя   (РГЭС)]),  FIRST([Уровень напряжения(РГЭС)]),  FIRST([Номер счетчика(РГЭС)]),  FIRST([Тип счетчика(РГЭС)]),  FIRST([Код типа счетчика(РГЭС)]),  FIRST([Новое показание(РГЭС)]),  FIRST([Старое показание(РГЭС)]),  FIRST([Расчетный коэф#(РГЭС)]),  FIRST([Процент потерь(РГЭС)]),  FIRST([Расчетные потери(РГЭС)]),  FIRST([РЭС(РГЭС)]),  FIRST([Неуч#потери(РГЭС)]),  FIRST([МОП/Норм(РГЭС)]),  FIRST([ИНН(РГЭС)]),  FIRST([Бюджет(РГЭС)]),  FIRST([Подр# ЯСК(РГЭС)])  FROM   [с двойниками$]  GROUP BY   [Код точки уч#сбыт#комп#(РГЭС)]  ORDER BY   [Код точки уч#сбыт#комп#(РГЭС)],  SUM([Объем (в т#ч# неуч# потери)(РГЭС)]) DESC  "
With ThisWorkbook.ActiveSheet
     .UsedRange.Clear
     With .QueryTables.Add(strConnection, .Range("A1"), strSQL)
          .Refresh False
          .Delete
     End With
End With
End Sub
[/vba]

Автор - PowerBoy
Дата добавления - 17.07.2014 в 07:46
katrinazima Дата: Четверг, 17.07.2014, 09:29 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Доброе утро! Огромное спасибо, что уделили внимание моей проблеме!

Pelena, я попробовала применить макрос и он ругается, не понимаю почему, вот на эту строчку:
[vba]
Код
rst.Open "SELECT a.F1 FROM [Лист1$A2:A" & c1 & "] AS a INNER JOIN [Лист2$A2:A" & c2 & "] AS b ON a.F1 = b.F1 GROUP BY a.F1 ORDER BY Val(a.F1)" _
           , "Provider='Microsoft.ACE.OLEDB.12.0';Data Source='" & ThisWorkbook.FullName & "';Extended Properties='Excel 12.0;HDR=NO'"
[/vba]

PowerBoy, к какому файлу код?он мне все таблицы на листах потер. Я что-то не так делаю?

Hugo, некоторые столбцы я могу удалить из обоих таблиц, которые не обязательны для сверки, но такие как адрес и наименование обязательны(я удалю тогда их). А с адрес на одном коде не может быть разный, поэтому без разницы какую из строчек брать. Наименования могут быть разные, но человек за которым закреплен участок знает, что по такому то адресу не один абонент(мы создаем колонку с количеством лицевых для подтверждения). Вот этот вариант то, что нужно, как я поняла:
Цитата Hugo
P.S. Перечитал сообщение №3 - ну может тогда сделать макросом вывод в новый файл: столбец всех точек (из обоих файлов), а рядом столбцы с суммами. Где-то будут пустые ячейки, если не совпадают точки между файлами.
И код будет довольно простой - можно собрать 3 словаря, один общий точек, и два с суммами по листу.
Далее цикл по общему, по нему извлекаем суммы из двух других.

Именно так и нужно, чтобы были ВСЕ ПРОСУММИРОВАННЫЕ строчки из обоих файлов(там где нет совпадений пустота, или нет данных) объем складывать, а в остальные текст из верхней(к примеру, а так из любой). Столбец с кодами должен быть один,а все остальное - шапка из обоих файлов. Найти разницу и отсортировать, это я в ручную сделаю(мне их потом по разным листах разносить надо будет, где коды не совпали на отдельную). Ваш код оставляет только 3 колонки(A,N,AD), а как мне все остальные добавить? и шапку добавить?
В файле убрала, что разрешили, остальное никак нельзя(этой информацией пользуются)
К сообщению приложен файл: 8431598.xls (81.0 Kb)
 
Ответить
СообщениеДоброе утро! Огромное спасибо, что уделили внимание моей проблеме!

Pelena, я попробовала применить макрос и он ругается, не понимаю почему, вот на эту строчку:
[vba]
Код
rst.Open "SELECT a.F1 FROM [Лист1$A2:A" & c1 & "] AS a INNER JOIN [Лист2$A2:A" & c2 & "] AS b ON a.F1 = b.F1 GROUP BY a.F1 ORDER BY Val(a.F1)" _
           , "Provider='Microsoft.ACE.OLEDB.12.0';Data Source='" & ThisWorkbook.FullName & "';Extended Properties='Excel 12.0;HDR=NO'"
[/vba]

PowerBoy, к какому файлу код?он мне все таблицы на листах потер. Я что-то не так делаю?

Hugo, некоторые столбцы я могу удалить из обоих таблиц, которые не обязательны для сверки, но такие как адрес и наименование обязательны(я удалю тогда их). А с адрес на одном коде не может быть разный, поэтому без разницы какую из строчек брать. Наименования могут быть разные, но человек за которым закреплен участок знает, что по такому то адресу не один абонент(мы создаем колонку с количеством лицевых для подтверждения). Вот этот вариант то, что нужно, как я поняла:
Цитата Hugo
P.S. Перечитал сообщение №3 - ну может тогда сделать макросом вывод в новый файл: столбец всех точек (из обоих файлов), а рядом столбцы с суммами. Где-то будут пустые ячейки, если не совпадают точки между файлами.
И код будет довольно простой - можно собрать 3 словаря, один общий точек, и два с суммами по листу.
Далее цикл по общему, по нему извлекаем суммы из двух других.

Именно так и нужно, чтобы были ВСЕ ПРОСУММИРОВАННЫЕ строчки из обоих файлов(там где нет совпадений пустота, или нет данных) объем складывать, а в остальные текст из верхней(к примеру, а так из любой). Столбец с кодами должен быть один,а все остальное - шапка из обоих файлов. Найти разницу и отсортировать, это я в ручную сделаю(мне их потом по разным листах разносить надо будет, где коды не совпали на отдельную). Ваш код оставляет только 3 колонки(A,N,AD), а как мне все остальные добавить? и шапку добавить?
В файле убрала, что разрешили, остальное никак нельзя(этой информацией пользуются)

Автор - katrinazima
Дата добавления - 17.07.2014 в 09:29
Pelena Дата: Четверг, 17.07.2014, 09:50 | Сообщение № 11
Группа: Админы
Ранг: Местный житель
Сообщений: 19185
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
katrinazima, попробуйте заменить в этой строчке OLEDB.12.0 и Excel 12.0 на OLEDB.4.0 и Excel 4.0 соответственно


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщениеkatrinazima, попробуйте заменить в этой строчке OLEDB.12.0 и Excel 12.0 на OLEDB.4.0 и Excel 4.0 соответственно

Автор - Pelena
Дата добавления - 17.07.2014 в 09:50
katrinazima Дата: Четверг, 17.07.2014, 10:01 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Pelena, заменила вот так: [vba]
Код
rst.Open "SELECT a.F1 FROM [Лист1$A2:A" & c1 & "] AS a INNER JOIN [Лист2$A2:A" & c2 & "] AS b ON a.F1 = b.F1 GROUP BY a.F1 ORDER BY Val(a.F1)" _
        , "Provider='Microsoft.ACE.OLEDB.4.0';Data Source='" & ThisWorkbook.FullName & "';Extended Properties='Excel 4.0;HDR=NO'"
[/vba]
тоже самое :(
 
Ответить
СообщениеPelena, заменила вот так: [vba]
Код
rst.Open "SELECT a.F1 FROM [Лист1$A2:A" & c1 & "] AS a INNER JOIN [Лист2$A2:A" & c2 & "] AS b ON a.F1 = b.F1 GROUP BY a.F1 ORDER BY Val(a.F1)" _
        , "Provider='Microsoft.ACE.OLEDB.4.0';Data Source='" & ThisWorkbook.FullName & "';Extended Properties='Excel 4.0;HDR=NO'"
[/vba]
тоже самое :(

Автор - katrinazima
Дата добавления - 17.07.2014 в 10:01
Pelena Дата: Четверг, 17.07.2014, 10:04 | Сообщение № 13
Группа: Админы
Ранг: Местный житель
Сообщений: 19185
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
А что пишет? Вы в моём файле запускаете?


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеА что пишет? Вы в моём файле запускаете?

Автор - Pelena
Дата добавления - 17.07.2014 в 10:04
katrinazima Дата: Четверг, 17.07.2014, 10:44 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Pelena, не удается найти указанного поставщика, вероятно он установлен неправильно. В Вашем файле запускаю
 
Ответить
СообщениеPelena, не удается найти указанного поставщика, вероятно он установлен неправильно. В Вашем файле запускаю

Автор - katrinazima
Дата добавления - 17.07.2014 в 10:44
Pelena Дата: Четверг, 17.07.2014, 11:13 | Сообщение № 15
Группа: Админы
Ранг: Местный житель
Сообщений: 19185
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
Я ошиблась. Надо Excel 8.0


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеЯ ошиблась. Надо Excel 8.0

Автор - Pelena
Дата добавления - 17.07.2014 в 11:13
PowerBoy Дата: Четверг, 17.07.2014, 11:17 | Сообщение № 16
Группа: Проверенные
Ранг: Участник
Сообщений: 100
Репутация: 31 ±
Замечаний: 0% ±

2003
Я что-то не так делаю?


Скрипт выводит данные на текущий активный лист.

Для вывода на конкретный лист замените:
[vba]
Код

ThisWorkbook.ActiveSheet
[/vba]

на

[vba]
Код

ThisWorkbook.Sheets("Отчет")
[/vba]

Pelena, не удается найти указанного поставщика


строка подключения:
[vba]
Код

"OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
[/vba]


Excel + SQL = ActiveTables (http://vk.com/ExcelSQL)
 
Ответить
Сообщение
Я что-то не так делаю?


Скрипт выводит данные на текущий активный лист.

Для вывода на конкретный лист замените:
[vba]
Код

ThisWorkbook.ActiveSheet
[/vba]

на

[vba]
Код

ThisWorkbook.Sheets("Отчет")
[/vba]

Pelena, не удается найти указанного поставщика


строка подключения:
[vba]
Код

"OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
[/vba]

Автор - PowerBoy
Дата добавления - 17.07.2014 в 11:17
katrinazima Дата: Четверг, 17.07.2014, 13:04 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Pelena, заработало yahoo
PowerBoy, помогла строка подключения
строка подключения:

"OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source="

Да,это почти то что нужно, можно не совпавшие коды тоже выводить в итоговый лист?а напротив оставлять пустоту или нет данных?
 
Ответить
СообщениеPelena, заработало yahoo
PowerBoy, помогла строка подключения
строка подключения:

"OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source="

Да,это почти то что нужно, можно не совпавшие коды тоже выводить в итоговый лист?а напротив оставлять пустоту или нет данных?

Автор - katrinazima
Дата добавления - 17.07.2014 в 13:04
Pelena Дата: Четверг, 17.07.2014, 16:49 | Сообщение № 18
Группа: Админы
Ранг: Местный житель
Сообщений: 19185
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
Так? Только строку подключения снова исправьте
К сообщению приложен файл: katrinazima_2.rar (35.7 Kb)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеТак? Только строку подключения снова исправьте

Автор - Pelena
Дата добавления - 17.07.2014 в 16:49
katrinazima Дата: Пятница, 18.07.2014, 14:59 | Сообщение № 19
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Pelena, похоже работает, как надо. Вы не представляете,как облегчили мне работу, не хватает слов выразить благодарность! thumb
Кодом Hugo тоже пользуюсь, проще, чем в другие программы куда то кидать specool
И всем остальным огромное спасибо!
 
Ответить
СообщениеPelena, похоже работает, как надо. Вы не представляете,как облегчили мне работу, не хватает слов выразить благодарность! thumb
Кодом Hugo тоже пользуюсь, проще, чем в другие программы куда то кидать specool
И всем остальным огромное спасибо!

Автор - katrinazima
Дата добавления - 18.07.2014 в 14:59
katrinazima Дата: Четверг, 07.08.2014, 09:39 | Сообщение № 20
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 0% ±

Excel 2003
Pelena, подскажите пожалуйста, как работает макрос, он не всегда выдает что нужно. Например, на листе2 имеется строчка с кодом, таким же как на первом, а макрос не вытаскивает всю строчку(только код) и трет его на Листе2. С чем это связано?
 
Ответить
СообщениеPelena, подскажите пожалуйста, как работает макрос, он не всегда выдает что нужно. Например, на листе2 имеется строчка с кодом, таким же как на первом, а макрос не вытаскивает всю строчку(только код) и трет его на Листе2. С чем это связано?

Автор - katrinazima
Дата добавления - 07.08.2014 в 09:39
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Состыковать строчки из 2 таблиц по первому столбцв (Формулы/Formulas)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!