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

Вход

Регистрация

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

 

= Мир MS Excel/Удалить совпадающие значения - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Удалить совпадающие значения (Формулы/Formulas)
Удалить совпадающие значения
ShuteRR Дата: Суббота, 02.07.2016, 09:34 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 40% ±

Excel 2007
Добрый день. Подскажите как можно реализовать.

Задача: Есть два столбика с данными, и мне надо чтобы в третьем столбике появились данные с 1 и 2 которые не пересикались т.е выделить уникальные значения с двух столбцов. .

1 столбик: Москва | Братск | Иркутск | Москва | Омск | Чита | Омск | Воронеж |
2 столбик: Омск | Москва | СПБ | Казань | Иркутск | Новосибирск | Калининград | Томск |
3 столбик: Братск | Чита | СПБ | Казань | Новосибирск | Калнинград | Томск | Воронеж
[moder]Приложите файл с примером. Уберите рекламу из подписи. Это нарушение Правил форума. Исправлено[/moder]
К сообщению приложен файл: 0199695.xlsx(8Kb)


Северные Сады нас защитят

Сообщение отредактировал Pelena - Суббота, 02.07.2016, 12:00
 
Ответить
СообщениеДобрый день. Подскажите как можно реализовать.

Задача: Есть два столбика с данными, и мне надо чтобы в третьем столбике появились данные с 1 и 2 которые не пересикались т.е выделить уникальные значения с двух столбцов. .

1 столбик: Москва | Братск | Иркутск | Москва | Омск | Чита | Омск | Воронеж |
2 столбик: Омск | Москва | СПБ | Казань | Иркутск | Новосибирск | Калининград | Томск |
3 столбик: Братск | Чита | СПБ | Казань | Новосибирск | Калнинград | Томск | Воронеж
[moder]Приложите файл с примером. Уберите рекламу из подписи. Это нарушение Правил форума. Исправлено[/moder]

Автор - ShuteRR
Дата добавления - 02.07.2016 в 09:34
Pelena Дата: Суббота, 02.07.2016, 12:00 | Сообщение № 2
Группа: Модераторы
Ранг: Экселист
Сообщений: 9857
Репутация: 2254 ±
Замечаний: 0% ±

Excel 2010 & Mac Excel 2011
выделить уникальные значения с двух столбцов

А если название не уникально, но встречается несколько раз только в одном столбце, его выводить?


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
Сообщение
выделить уникальные значения с двух столбцов

А если название не уникально, но встречается несколько раз только в одном столбце, его выводить?

Автор - Pelena
Дата добавления - 02.07.2016 в 12:00
Karataev Дата: Суббота, 02.07.2016, 12:00 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 641
Репутация: 226 ±
Замечаний: 0% ±

Excel
Вариант с использованием макроса:
[vba]
Код
Sub jjj()

    Dim arrSrc(), clRes As New Collection, arrRes()
    Dim lr As Long, i As Long
    
    Application.ScreenUpdating = False
    
    Range("C2:C" & Rows.Count).Value = Empty
    
    lr = Columns("A").Find(What:="*", LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False _
        , SearchFormat:=False).Row
    arrSrc() = Range("A1:A" & lr).Value
    
    On Error Resume Next
    
    For i = 2 To UBound(arrSrc)
        If WorksheetFunction.CountIf(Columns("B"), arrSrc(i, 1)) = 0 Then
            clRes.Add Item:=arrSrc(i, 1), Key:=arrSrc(i, 1)
        End If
    Next

    lr = Columns("B").Find(What:="*", LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False _
        , SearchFormat:=False).Row
    arrSrc() = Range("B1:B" & lr).Value
   
    For i = 2 To UBound(arrSrc)
        If WorksheetFunction.CountIf(Columns("A"), arrSrc(i, 1)) = 0 Then
            clRes.Add Item:=arrSrc(i, 1), Key:=arrSrc(i, 1)
        End If
    Next
    
    On Error GoTo 0
    
    ReDim arrRes(1 To clRes.Count, 1 To 1)
    For i = 1 To clRes.Count
        arrRes(i, 1) = clRes(i)
    Next
    
    Range("C2").Resize(UBound(arrRes)).Value = arrRes()
    
    Application.ScreenUpdating = True
    
End Sub
[/vba]




Сообщение отредактировал Karataev - Суббота, 02.07.2016, 12:10
 
Ответить
СообщениеВариант с использованием макроса:
[vba]
Код
Sub jjj()

    Dim arrSrc(), clRes As New Collection, arrRes()
    Dim lr As Long, i As Long
    
    Application.ScreenUpdating = False
    
    Range("C2:C" & Rows.Count).Value = Empty
    
    lr = Columns("A").Find(What:="*", LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False _
        , SearchFormat:=False).Row
    arrSrc() = Range("A1:A" & lr).Value
    
    On Error Resume Next
    
    For i = 2 To UBound(arrSrc)
        If WorksheetFunction.CountIf(Columns("B"), arrSrc(i, 1)) = 0 Then
            clRes.Add Item:=arrSrc(i, 1), Key:=arrSrc(i, 1)
        End If
    Next

    lr = Columns("B").Find(What:="*", LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False _
        , SearchFormat:=False).Row
    arrSrc() = Range("B1:B" & lr).Value
   
    For i = 2 To UBound(arrSrc)
        If WorksheetFunction.CountIf(Columns("A"), arrSrc(i, 1)) = 0 Then
            clRes.Add Item:=arrSrc(i, 1), Key:=arrSrc(i, 1)
        End If
    Next
    
    On Error GoTo 0
    
    ReDim arrRes(1 To clRes.Count, 1 To 1)
    For i = 1 To clRes.Count
        arrRes(i, 1) = clRes(i)
    Next
    
    Range("C2").Resize(UBound(arrRes)).Value = arrRes()
    
    Application.ScreenUpdating = True
    
End Sub
[/vba]

Автор - Karataev
Дата добавления - 02.07.2016 в 12:00
Nic70y Дата: Суббота, 02.07.2016, 12:08 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3477
Репутация: 722 ±
Замечаний: 0% ±

Excel 2013
вариант массивной формулой:
Код
=ИНДЕКС(A$2:B$6;НАИМЕНЬШИЙ(ЕСЛИ(СЧЁТЕСЛИ(A$2:B$6;A$2:B$6)=1;СТРОКА(A$2:A$6)-1);СТРОКА(C1));ОКРУГЛ(ОСТАТ(НАИМЕНЬШИЙ(ЕСЛИ(СЧЁТЕСЛИ(A$2:B$6;A$2:B$6)=1;СТРОКА(A$2:A$6)+СТОЛБЕЦ(A$2:B$6)/10);СТРОКА(C1));1)*10;))
К сообщению приложен файл: 2539694.xlsx(9Kb)


ЯД(poison) 41001841029809
+7 978 049 98 74 (мтс)
 
Ответить
Сообщениевариант массивной формулой:
Код
=ИНДЕКС(A$2:B$6;НАИМЕНЬШИЙ(ЕСЛИ(СЧЁТЕСЛИ(A$2:B$6;A$2:B$6)=1;СТРОКА(A$2:A$6)-1);СТРОКА(C1));ОКРУГЛ(ОСТАТ(НАИМЕНЬШИЙ(ЕСЛИ(СЧЁТЕСЛИ(A$2:B$6;A$2:B$6)=1;СТРОКА(A$2:A$6)+СТОЛБЕЦ(A$2:B$6)/10);СТРОКА(C1));1)*10;))

Автор - Nic70y
Дата добавления - 02.07.2016 в 12:08
Gustav Дата: Суббота, 02.07.2016, 13:16 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1211
Репутация: 484 ±
Замечаний: 0% ±

начинал с Excel 4.0...
Тоже поучаствую макросом - ADO+SQL:
[vba]
Код
Sub selectData()
                
    '(если только это уже не было проделано ранее, то)
    'Перед запуском в редакторе VB в меню Tools\References установить ссылку (включить галку)
    'на библиотеку "Microsoft ActiveX Data Objects ... Library", где ... - номер версии.
    'Можно выбрать любой максимальный (6.0, 2.8, 2.5...) из того, что установлено на компьютере.
            
    Dim cnn As New ADODB.Connection
    Dim rst As New ADODB.Recordset
            
    Range("C2:C" & Rows.Count).ClearContents
    
    cnn.Open _
    "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=" & ThisWorkbook.FullName & ";" & _
    "Extended Properties='Excel 12.0;HDR=No'"
            
    rst.Open _
    "SELECT F1 FROM (" & _
    "SELECT F1 FROM [Лист1$A2:B1000] UNION ALL " & _
    "SELECT F2 FROM [Лист1$A2:B1000]" & _
    ") GROUP BY F1 HAVING Count(*) = 1" _
    , cnn
    
    [Лист1!C2].CopyFromRecordset rst
    rst.Close
    
    Set rst = Nothing
    Set cnn = Nothing
End Sub
[/vba]


Мой tip box - яд 41001663842605
 
Ответить
СообщениеТоже поучаствую макросом - ADO+SQL:
[vba]
Код
Sub selectData()
                
    '(если только это уже не было проделано ранее, то)
    'Перед запуском в редакторе VB в меню Tools\References установить ссылку (включить галку)
    'на библиотеку "Microsoft ActiveX Data Objects ... Library", где ... - номер версии.
    'Можно выбрать любой максимальный (6.0, 2.8, 2.5...) из того, что установлено на компьютере.
            
    Dim cnn As New ADODB.Connection
    Dim rst As New ADODB.Recordset
            
    Range("C2:C" & Rows.Count).ClearContents
    
    cnn.Open _
    "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=" & ThisWorkbook.FullName & ";" & _
    "Extended Properties='Excel 12.0;HDR=No'"
            
    rst.Open _
    "SELECT F1 FROM (" & _
    "SELECT F1 FROM [Лист1$A2:B1000] UNION ALL " & _
    "SELECT F2 FROM [Лист1$A2:B1000]" & _
    ") GROUP BY F1 HAVING Count(*) = 1" _
    , cnn
    
    [Лист1!C2].CopyFromRecordset rst
    rst.Close
    
    Set rst = Nothing
    Set cnn = Nothing
End Sub
[/vba]

Автор - Gustav
Дата добавления - 02.07.2016 в 13:16
ShuteRR Дата: Суббота, 02.07.2016, 13:41 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 40% ±

Excel 2007

А если название не уникально, но встречается несколько раз только в одном столбце, его выводить?
Нет, так как оно тоже становиться не уникальным


Северные Сады нас защитят
 
Ответить
Сообщение

А если название не уникально, но встречается несколько раз только в одном столбце, его выводить?
Нет, так как оно тоже становиться не уникальным

Автор - ShuteRR
Дата добавления - 02.07.2016 в 13:41
sv2014 Дата: Воскресенье, 03.07.2016, 05:43 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 156
Репутация: 37 ±
Замечаний: 0% ±

Excel 2013
ShuteRR, вариант макроса,кнопки test и очистка

[vba]
Код
Sub test()
  Dim z, z1, j&, i&, m&: z = Range("A2:B" & Range("A" & Rows.Count).End(xlUp).Row).Value
    ReDim z1(1 To UBound(z) * 2, 1 To 1)
    With CreateObject("scripting.dictionary"): .CompareMode = 1
   For j = 1 To 2
    For i = 1 To UBound(z): .Item(z(i, j)) = .Item(z(i, j)) + 1: Next i, j
For j = 1 To 2
  For i = 1 To UBound(z)
         If .Item(z(i, j)) = 1 Then m = m + 1:   z1(m, 1) = z(i, j)
   Next i, j
  Range("C2").Resize(m, 1).Value = z1
   End With
End Sub
[/vba]
К сообщению приложен файл: example_3_07_20.xls(36Kb)


Сообщение отредактировал sv2014 - Воскресенье, 03.07.2016, 05:47
 
Ответить
СообщениеShuteRR, вариант макроса,кнопки test и очистка

[vba]
Код
Sub test()
  Dim z, z1, j&, i&, m&: z = Range("A2:B" & Range("A" & Rows.Count).End(xlUp).Row).Value
    ReDim z1(1 To UBound(z) * 2, 1 To 1)
    With CreateObject("scripting.dictionary"): .CompareMode = 1
   For j = 1 To 2
    For i = 1 To UBound(z): .Item(z(i, j)) = .Item(z(i, j)) + 1: Next i, j
For j = 1 To 2
  For i = 1 To UBound(z)
         If .Item(z(i, j)) = 1 Then m = m + 1:   z1(m, 1) = z(i, j)
   Next i, j
  Range("C2").Resize(m, 1).Value = z1
   End With
End Sub
[/vba]

Автор - sv2014
Дата добавления - 03.07.2016 в 05:43
ShuteRR Дата: Понедельник, 04.07.2016, 16:43 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 20
Репутация: 0 ±
Замечаний: 40% ±

Excel 2007
ShuteRR, вариант макроса,кнопки test и очистка
Идеально, спасибо огромное.


Северные Сады нас защитят

Сообщение отредактировал Manyasha - Понедельник, 04.07.2016, 21:51
 
Ответить
Сообщение
ShuteRR, вариант макроса,кнопки test и очистка
Идеально, спасибо огромное.

Автор - ShuteRR
Дата добавления - 04.07.2016 в 16:43
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Удалить совпадающие значения (Формулы/Formulas)
Страница 1 из 11
Поиск:

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