Такая проблема: есть база (фио, телефон, адрес), есть отдельно список телефонов. Список телефонов отличается от тех, что в базе. Как вставить список телефонов в базу так, чтобы телефонов которых нет в списке, но есть в базе, были удалены при вставке, а те что есть и в базе и в списке сохранились ?
То есть:
База Список Итог Нужно добавить список в базу так, чтобы было удаление всего того чего нет в списке. 123 123 123 При этом, нужно чтобы сохранялась связка с фио, адресом, как целая строка. 456 789 789 789
Добрый день !
Такая проблема: есть база (фио, телефон, адрес), есть отдельно список телефонов. Список телефонов отличается от тех, что в базе. Как вставить список телефонов в базу так, чтобы телефонов которых нет в списке, но есть в базе, были удалены при вставке, а те что есть и в базе и в списке сохранились ?
То есть:
База Список Итог Нужно добавить список в базу так, чтобы было удаление всего того чего нет в списке. 123 123 123 При этом, нужно чтобы сохранялась связка с фио, адресом, как целая строка. 456 789 789 789микес
Понятней не стало. На каком листе база? Где "отдельный список телефонов"? Нарисуйте лист с базой, лист со списком и итоговый лист с обновлённой базой. [moder]Подозреваю, что вонючие ноги Укоза растут отсюда. микес, назовите файл иначе и перевложите.
Понятней не стало. На каком листе база? Где "отдельный список телефонов"? Нарисуйте лист с базой, лист со списком и итоговый лист с обновлённой базой. [moder]Подозреваю, что вонючие ноги Укоза растут отсюда. микес, назовите файл иначе и перевложите.wild_pig
Пардон, проблема с адресами, а не телефонами. Ноги растут отсюда, не находят опоры. Прикрепляю файл. Есть строка: имя, отчество, фирма, адрес. В следующей строке список обновленных адресов. Нужно вставить списко обновленных адресов так, чтобы удалились те адреса которых нет в новом списке вместе со строкой. Заранее спасибо.
wild_pig,
Пардон, проблема с адресами, а не телефонами. Ноги растут отсюда, не находят опоры. Прикрепляю файл. Есть строка: имя, отчество, фирма, адрес. В следующей строке список обновленных адресов. Нужно вставить списко обновленных адресов так, чтобы удалились те адреса которых нет в новом списке вместе со строкой. Заранее спасибо.кошмар
Так что и куда "вставить"? Я так понимаю, удалить из базы всё, кроме тех, что совпадают со списком? Список (если это список) вынес на Лист2, жмём кнопку p.s. что случилось с микес'ом?
Так что и куда "вставить"? Я так понимаю, удалить из базы всё, кроме тех, что совпадают со списком? Список (если это список) вынес на Лист2, жмём кнопку p.s. что случилось с микес'ом?wild_pig
1. лазить на .Cells(rw, 4) столько раз, сколько есть адресов - непозволительная роскошь. 2. уже после удаления строки продолжать сверять уже проверенное - аналогично. Хотя конечно если база - это не база, а так сотня другая клиентов - то это не существенные замечания.
Но если там действительно база - то сперва загоняем все адреса в словарь, затем циклом по массиву базы сверяемся с словарём, ставим метки в массив (созданный специально для этих меток). Массив выгружаем рядом, удаляем все строки одним движением.
1. лазить на .Cells(rw, 4) столько раз, сколько есть адресов - непозволительная роскошь. 2. уже после удаления строки продолжать сверять уже проверенное - аналогично. Хотя конечно если база - это не база, а так сотня другая клиентов - то это не существенные замечания.
Но если там действительно база - то сперва загоняем все адреса в словарь, затем циклом по массиву базы сверяемся с словарём, ставим метки в массив (созданный специально для этих меток). Массив выгружаем рядом, удаляем все строки одним движением.Hugo
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
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