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

Вход

Регистрация

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

 

= Мир MS Excel/Ручное обновление баз. Какие есть устойчивые способы ? - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Ручное обновление баз. Какие есть устойчивые способы ? (Макросы/Sub)
Ручное обновление баз. Какие есть устойчивые способы ?
микес Дата: Пятница, 23.05.2014, 12:48 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Добрый день !

Такая проблема: есть база (фио, телефон, адрес), есть отдельно список телефонов. Список телефонов отличается от тех, что в базе. Как вставить список телефонов в базу так, чтобы телефонов которых нет в списке, но есть в базе, были удалены при вставке, а те что есть и в базе и в списке сохранились ?

То есть:

База Список Итог Нужно добавить список в базу так, чтобы было удаление всего того чего нет в списке.
123 123 123 При этом, нужно чтобы сохранялась связка с фио, адресом, как целая строка.
456
789 789 789
 
Ответить
СообщениеДобрый день !

Такая проблема: есть база (фио, телефон, адрес), есть отдельно список телефонов. Список телефонов отличается от тех, что в базе. Как вставить список телефонов в базу так, чтобы телефонов которых нет в списке, но есть в базе, были удалены при вставке, а те что есть и в базе и в списке сохранились ?

То есть:

База Список Итог Нужно добавить список в базу так, чтобы было удаление всего того чего нет в списке.
123 123 123 При этом, нужно чтобы сохранялась связка с фио, адресом, как целая строка.
456
789 789 789

Автор - микес
Дата добавления - 23.05.2014 в 12:48
wild_pig Дата: Пятница, 23.05.2014, 14:33 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 517
Репутация: 97 ±
Замечаний: 0% ±

2003, 2013
Цитата
Какие есть устойчивые способы ?
Чтобы не шатало? Все свои "нужно" отобразите в файле и прикрепите в сообщении.
 
Ответить
Сообщение
Цитата
Какие есть устойчивые способы ?
Чтобы не шатало? Все свои "нужно" отобразите в файле и прикрепите в сообщении.

Автор - wild_pig
Дата добавления - 23.05.2014 в 14:33
микес Дата: Пятница, 23.05.2014, 17:10 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Вот
 
Ответить
СообщениеВот

Автор - микес
Дата добавления - 23.05.2014 в 17:10
микес Дата: Пятница, 23.05.2014, 17:10 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Вот файл
К сообщению приложен файл: _Microsoft_Offi.xlsx (16.4 Kb)
 
Ответить
СообщениеВот файл

Автор - микес
Дата добавления - 23.05.2014 в 17:10
wild_pig Дата: Пятница, 23.05.2014, 19:05 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 517
Репутация: 97 ±
Замечаний: 0% ±

2003, 2013
Понятней не стало. На каком листе база? Где "отдельный список телефонов"? Нарисуйте лист с базой, лист со списком и итоговый лист с обновлённой базой.
[moder]Подозреваю, что вонючие ноги Укоза растут отсюда. микес, назовите файл иначе и перевложите.
 
Ответить
СообщениеПонятней не стало. На каком листе база? Где "отдельный список телефонов"? Нарисуйте лист с базой, лист со списком и итоговый лист с обновлённой базой.
[moder]Подозреваю, что вонючие ноги Укоза растут отсюда. микес, назовите файл иначе и перевложите.

Автор - wild_pig
Дата добавления - 23.05.2014 в 19:05
кошмар Дата: Воскресенье, 25.05.2014, 17:38 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
wild_pig,

Пардон, проблема с адресами, а не телефонами. Ноги растут отсюда, не находят опоры.
Прикрепляю файл. Есть строка: имя, отчество, фирма, адрес. В следующей строке список обновленных адресов. Нужно вставить списко обновленных адресов так, чтобы удалились те адреса которых нет в новом списке вместе со строкой.
Заранее спасибо.
К сообщению приложен файл: 9225092.xlsx (12.3 Kb)
 
Ответить
Сообщениеwild_pig,

Пардон, проблема с адресами, а не телефонами. Ноги растут отсюда, не находят опоры.
Прикрепляю файл. Есть строка: имя, отчество, фирма, адрес. В следующей строке список обновленных адресов. Нужно вставить списко обновленных адресов так, чтобы удалились те адреса которых нет в новом списке вместе со строкой.
Заранее спасибо.

Автор - кошмар
Дата добавления - 25.05.2014 в 17:38
wild_pig Дата: Воскресенье, 25.05.2014, 23:20 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 517
Репутация: 97 ±
Замечаний: 0% ±

2003, 2013
Так что и куда "вставить"? Я так понимаю, удалить из базы всё, кроме тех, что совпадают со списком?
Список (если это список) вынес на Лист2, жмём кнопку
p.s. что случилось с микес'ом?
К сообщению приложен файл: 9225092.xlsm (21.5 Kb)


Сообщение отредактировал wild_pig - Воскресенье, 25.05.2014, 23:39
 
Ответить
СообщениеТак что и куда "вставить"? Я так понимаю, удалить из базы всё, кроме тех, что совпадают со списком?
Список (если это список) вынес на Лист2, жмём кнопку
p.s. что случилось с микес'ом?

Автор - wild_pig
Дата добавления - 25.05.2014 в 23:20
Hugo Дата: Воскресенье, 25.05.2014, 23:49 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3254
Репутация: 707 ±
Замечаний: 0% ±

2019
1. лазить на .Cells(rw, 4) столько раз, сколько есть адресов - непозволительная роскошь.
2. уже после удаления строки продолжать сверять уже проверенное - аналогично.
Хотя конечно если база - это не база, а так сотня другая клиентов - то это не существенные замечания.

Но если там действительно база - то сперва загоняем все адреса в словарь, затем циклом по массиву базы сверяемся с словарём, ставим метки в массив (созданный специально для этих меток).
Массив выгружаем рядом, удаляем все строки одним движением.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
Сообщение1. лазить на .Cells(rw, 4) столько раз, сколько есть адресов - непозволительная роскошь.
2. уже после удаления строки продолжать сверять уже проверенное - аналогично.
Хотя конечно если база - это не база, а так сотня другая клиентов - то это не существенные замечания.

Но если там действительно база - то сперва загоняем все адреса в словарь, затем циклом по массиву базы сверяемся с словарём, ставим метки в массив (созданный специально для этих меток).
Массив выгружаем рядом, удаляем все строки одним движением.

Автор - Hugo
Дата добавления - 25.05.2014 в 23:49
wild_pig Дата: Понедельник, 26.05.2014, 00:01 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 517
Репутация: 97 ±
Замечаний: 0% ±

2003, 2013
[offtop]Всё равно переделывать )[/offtop]
 
Ответить
Сообщение[offtop]Всё равно переделывать )[/offtop]

Автор - wild_pig
Дата добавления - 26.05.2014 в 00:01
Hugo Дата: Понедельник, 26.05.2014, 00:09 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3254
Репутация: 707 ±
Замечаний: 0% ±

2019
Вот например так:
[vba]
Код
Sub tt()
      Dim a(), c, i&, x As Range

      Application.ScreenUpdating = False
      With Sheets("Лист2"): a = .Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp)).Value: End With

      With CreateObject("scripting.dictionary"): .comparemode = 1
          For Each c In a: .Item(c) = 0&: Next

          With Sheets("Лист1"): a = .Range(.Cells(1, 4), .Cells(Rows.Count, 4).End(xlUp)).Value: End With
          ReDim b(1 To UBound(a), 1 To 1)
          For i = 1 To UBound(a)
              If .exists(a(i, 1)) Then b(i, 1) = 1
          Next

      End With

      With Sheets("Лист1")
          .[e1].Resize(UBound(b), 1) = b

          Set x = .[E:E].Find(1, , , xlWhole)
          If Not x Is Nothing Then
              .[E:E].ColumnDifferences(x).EntireRow.Hidden = True
              .[e1].Resize(UBound(b), 1).ClearContents
              .UsedRange.SpecialCells(xlCellTypeVisible).EntireRow.Delete
              .Rows.Hidden = False
          End If
      End With

End Sub
[/vba]
Но - см. http://www.excelworld.ru/forum/10-5741-57744-16-1376332763 - у ColumnDifferences есть проблемы, это место нужно дорабатывать.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеВот например так:
[vba]
Код
Sub tt()
      Dim a(), c, i&, x As Range

      Application.ScreenUpdating = False
      With Sheets("Лист2"): a = .Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp)).Value: End With

      With CreateObject("scripting.dictionary"): .comparemode = 1
          For Each c In a: .Item(c) = 0&: Next

          With Sheets("Лист1"): a = .Range(.Cells(1, 4), .Cells(Rows.Count, 4).End(xlUp)).Value: End With
          ReDim b(1 To UBound(a), 1 To 1)
          For i = 1 To UBound(a)
              If .exists(a(i, 1)) Then b(i, 1) = 1
          Next

      End With

      With Sheets("Лист1")
          .[e1].Resize(UBound(b), 1) = b

          Set x = .[E:E].Find(1, , , xlWhole)
          If Not x Is Nothing Then
              .[E:E].ColumnDifferences(x).EntireRow.Hidden = True
              .[e1].Resize(UBound(b), 1).ClearContents
              .UsedRange.SpecialCells(xlCellTypeVisible).EntireRow.Delete
              .Rows.Hidden = False
          End If
      End With

End Sub
[/vba]
Но - см. http://www.excelworld.ru/forum/10-5741-57744-16-1376332763 - у ColumnDifferences есть проблемы, это место нужно дорабатывать.

Автор - Hugo
Дата добавления - 26.05.2014 в 00:09
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Ручное обновление баз. Какие есть устойчивые способы ? (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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