Страницы: 1
RSS
[VBA] добавлять новые строчки, пропускать те, которые уже есть
 
Добрый день  
 
прошу помощи реализовать одну операцию.  
 
есть 3 листа:  
 
1 лист - основной, в нем таблица, в конце этой таблицы нужно добавить только уникальные (не повторяющиеся с таблиц 2ого и 3го листа) строчки.  
 
можно ограничиться копированием строк состоящих из 3х ячеек (остальные я подтяну по аналогии :) )  
 
 
я пока слабо представляю как макрос будет выглядеть, но мне пожалуй нужна помощь прежде всего с оператором if then, какие там будут записаны условия.  
 
 
спасибо!
caustic
 
и прикладываю файл...
caustic
 
ммм... в формате Excel 2003
caustic
 
А красным что помечено?
 
А решении http://www.planetaexcel.ru/forum.php?thread_id=48192 что не так? задача ведь та же самая?
 
Понял, задача хоть и однотипная, но "наоборот"
 
примеры возможно чем то похоже но не связаны между собою никак.  
 
красным отмечены обычные строчки. это всего лишь особенность таблички не более.
 
Уникальность по каким столбцам нужно определять? Или только по А?
 
если полностью идентичны значения строчки с 1 по 4 столбец, то пропускаем, переходим к следующей.. если есть хоть одна разница - то добавляем в конец таблицы строчку.. идем дальше.. и так пока не будут добавлены все уникальные значения с этих 2х листов
caustic
 
прикладываю более понятный пример, где четко обозначена таблица )  
 
 
на всех вкладках - одинакова таблица, но разное кол-во строчек со значениями (строчки могут дублировать строки из 1ого листа).  
 
 
на 1ом листе - главная таблица, где должны быть все уникальные строчки с 2ого и 2го листа.  
 
 
если строки из 2 и 3 листа отличается хоть на одну ячейку (а при этом Наименование будет одинаковым) - ее нужно добавить на 1лист все равно в конец таблицы.. и так с каждой  
 
главное - чтобы не было абсолютно дублирующих строчек с одинаковыми значениями.
caustic
 
Option Explicit  
 
Sub tt()  
   Dim i&, cc As Range, el, t$  
   Application.ScreenUpdating = False  
 
   With CreateObject("scripting.dictionary")  
       For Each cc In Sheets(1).[a1].CurrentRegion.Columns(1).Cells
           t = cc.Value & "|" & cc.Offset(, 1).Value & "|" & cc.Offset(, 2).Value & "|" & cc.Offset(, 3).Value  
           .Item(t) = 0&: i = i + 1  
       Next  
 
       For Each el In Array(2, 3)  
           For Each cc In Sheets(el).[a1].CurrentRegion.Columns(1).Cells
               t = cc.Value & "|" & cc.Offset(, 1).Value & "|" & cc.Offset(, 2).Value & "|" & cc.Offset(, 3).Value  
               If Not .exists(t) Then  
                   .Item(t) = 0&: i = i + 1  
                   cc.EntireRow.Copy Sheets(1).Range("a" & i)  
               End If  
           Next  
       Next  
 
   End With  
   Application.ScreenUpdating = True  
End Sub
 
Я делал на первый пример, но и на втором отработало.  
Но делал как просили - на 4 столбца, а не на 5! Пятый добавляйте сами.
 
Да, если на первом листе уже есть одинаковые строки - то они так и останутся, ничего не удаляется!
 
а удалять их и не надо. 1 лист - в нем должны быть все строчки, с листа 2 и 3, если наткнулся на абсолютную идентичную строчку (по всем значениям ячеек) - просто пропускать и переходить к следующей.  
 
ок спасиб гляну.  
 
на будущее, оставляйте хоть билайны мегафоны в подписях.. веб мани то не у всех же есть ;))
caustic
 
{quote}{login=caustic}{date=11.12.2012 07:30}{thema=}{post}на будущее, оставляйте хоть билайны мегафоны в подписях.. веб мани то не у всех же есть ;)){/post}{/quote}У Игоря в Латвии свой "Билайн-Мегафон" - что Вам это даст? А вот терминалы WM у всех есть.
 
Да, webmoney - пока единственный способ получить оплату. Да и то сравнительно недавно появилась легальная возможность вывода налички.  
Банковские переводы и всякие westernunion и compass не рассматриваю, ибо всем дорого/неудобно.  
Яндексденьги не изучал - если кто в теме, напишите плиз на мыло.
Страницы: 1
Читают тему
Наверх