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

Вход

Регистрация

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

 

= Мир MS Excel/Выбор уникальных значений по 4 столбцам - Мир MS Excel

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

Excel 2007
Добрый день.
Необходимо написать макрос, который в столбце F «Проверка» поставит слово «да» для уникальных значений по 4-м столбца: B-C-D-E
То есть необходимо сравнить строки по 4 столбцам
 
Ответить
СообщениеДобрый день.
Необходимо написать макрос, который в столбце F «Проверка» поставит слово «да» для уникальных значений по 4-м столбца: B-C-D-E
То есть необходимо сравнить строки по 4 столбцам

Автор - Andrew87
Дата добавления - 16.12.2015 в 14:37
abtextime Дата: Среда, 16.12.2015, 17:28 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 828
Репутация: 117 ±
Замечаний: 0% ±

Excel 2010
[vba]
Код
Public Function AllUnique(R As Range) As Boolean

Dim S, SS As String

AllUnique = True

CC = R.Columns.Count
RC = R.Rows.Count
For i = 1 To RC
For j = 1 To CC
S = R.Cells(i, j).Value
For l = i To RC
For m = j To CC
SS = R.Cells(l, m).Value
If (SS = S) And Not ((l - i) + (m - j) = 0) Then
    AllUnique = False
    Exit Function
End If
Next m
Next l
Next j
Next i

End Function
[/vba]
 
Ответить
Сообщение[vba]
Код
Public Function AllUnique(R As Range) As Boolean

Dim S, SS As String

AllUnique = True

CC = R.Columns.Count
RC = R.Rows.Count
For i = 1 To RC
For j = 1 To CC
S = R.Cells(i, j).Value
For l = i To RC
For m = j To CC
SS = R.Cells(l, m).Value
If (SS = S) And Not ((l - i) + (m - j) = 0) Then
    AllUnique = False
    Exit Function
End If
Next m
Next l
Next j
Next i

End Function
[/vba]

Автор - abtextime
Дата добавления - 16.12.2015 в 17:28
Andrew87 Дата: Среда, 16.12.2015, 18:20 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
abtextime,
Спасибо.
Приложил файл для наглядности, фишка заключается в том, что если в любом из столбцов уникальное значение, то вся строка считается уникальной и ставится "да"
К сообщению приложен файл: 8288802.xlsx (11.7 Kb)
 
Ответить
Сообщениеabtextime,
Спасибо.
Приложил файл для наглядности, фишка заключается в том, что если в любом из столбцов уникальное значение, то вся строка считается уникальной и ставится "да"

Автор - Andrew87
Дата добавления - 16.12.2015 в 18:20
Gustav Дата: Среда, 16.12.2015, 18:56 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2747
Репутация: 1137 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Andrew87, у Вас в примере при наличии нескольких повторений (т.е. по здравому смыслу вроде нет уникальности) одно из таких повторений, тем не менее, отмечается как "да". Это существенный момент, о котором Вы умалчиваете в постановке задачи. Кстати, какую именно из таких неуникальных записей метить как "да"? Самую последнюю?

P.S. Просто, если можно было бы метить первую, то и программирования никакого не надо. Идёте по меню: Данные \ Сортировка и фильтр \ Дополнительно \ попадаем в "Расширенный фильтр" \ отмечаем "Фильтровать на месте", исходный диапазон: $A$1:$D$13, отмечаем "Только уникальные записи" \ Ok. После фильтрации прописываем слово "да" в верхнюю ячейку колонки E (поставить да) и, не снимая фильтра, копируем "да" ниже. Очищаем фильтр - вуаля!

P.P.S. А если макросом пренепременно, то он может быть таким ("по мотивам" ручных операций):
[vba]
Код
Sub МакросДа()
    Dim rng As Range
    Set rng = Range(Range("A1:D1"), Range("A1:D1").End(xlDown))
    rng.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=rng, Unique:=True
    rng.Offset(1, rng.Columns.Count).Resize(rng.Rows.Count - 1, 1) = "да"
    rng.Worksheet.ShowAllData
End Sub
[/vba]


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Среда, 16.12.2015, 19:46
 
Ответить
СообщениеAndrew87, у Вас в примере при наличии нескольких повторений (т.е. по здравому смыслу вроде нет уникальности) одно из таких повторений, тем не менее, отмечается как "да". Это существенный момент, о котором Вы умалчиваете в постановке задачи. Кстати, какую именно из таких неуникальных записей метить как "да"? Самую последнюю?

P.S. Просто, если можно было бы метить первую, то и программирования никакого не надо. Идёте по меню: Данные \ Сортировка и фильтр \ Дополнительно \ попадаем в "Расширенный фильтр" \ отмечаем "Фильтровать на месте", исходный диапазон: $A$1:$D$13, отмечаем "Только уникальные записи" \ Ok. После фильтрации прописываем слово "да" в верхнюю ячейку колонки E (поставить да) и, не снимая фильтра, копируем "да" ниже. Очищаем фильтр - вуаля!

P.P.S. А если макросом пренепременно, то он может быть таким ("по мотивам" ручных операций):
[vba]
Код
Sub МакросДа()
    Dim rng As Range
    Set rng = Range(Range("A1:D1"), Range("A1:D1").End(xlDown))
    rng.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=rng, Unique:=True
    rng.Offset(1, rng.Columns.Count).Resize(rng.Rows.Count - 1, 1) = "да"
    rng.Worksheet.ShowAllData
End Sub
[/vba]

Автор - Gustav
Дата добавления - 16.12.2015 в 18:56
Andrew87 Дата: Среда, 16.12.2015, 19:45 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Gustav,
По фильтру это да, но у меня к сожалению задача макрос и сам немного не понимаю, что второе повторение считается уникальным.
Если в строке по какому то из столбцов есть различие то строка уникальна.
Буду разбираться.
 
Ответить
СообщениеGustav,
По фильтру это да, но у меня к сожалению задача макрос и сам немного не понимаю, что второе повторение считается уникальным.
Если в строке по какому то из столбцов есть различие то строка уникальна.
Буду разбираться.

Автор - Andrew87
Дата добавления - 16.12.2015 в 19:45
RAN Дата: Среда, 16.12.2015, 23:12 | Сообщение № 6
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Берете Мяу, меняете удаление строки на простановку слова "да".
Хоть по 4 столбцам, хоть по 100


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеБерете Мяу, меняете удаление строки на простановку слова "да".
Хоть по 4 столбцам, хоть по 100

Автор - RAN
Дата добавления - 16.12.2015 в 23:12
sv2014 Дата: Пятница, 18.12.2015, 22:49 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 226
Репутация: 61 ±
Замечаний: 0% ±

Excel 2013
Andrew87, добрый вечер,попробуйте макросы,кнопки aaa1 и aaa2 в файл-примере

[vba]
Код
Sub aaa1()
    Dim z(), z1(), i&, t$
    z = Range("A1:D" & Range("A" & Rows.Count).End(xlUp).Row).Value
    ReDim z1(1 To UBound(z), 1 To 1)
    With CreateObject("scripting.dictionary"): .comparemode = 1
        For i = 2 To UBound(z): t = z(i, 1) & z(i, 2) & z(i, 3) & z(i, 4)
            If Not .exists(t) Then .Item(t) = 0: z1(i, 1) = "да"
        Next
        Range("E1").Resize(UBound(z1)) = z1
    End With
End Sub
[/vba]
К сообщению приложен файл: example_19_12_2.xls (44.0 Kb)
 
Ответить
СообщениеAndrew87, добрый вечер,попробуйте макросы,кнопки aaa1 и aaa2 в файл-примере

[vba]
Код
Sub aaa1()
    Dim z(), z1(), i&, t$
    z = Range("A1:D" & Range("A" & Rows.Count).End(xlUp).Row).Value
    ReDim z1(1 To UBound(z), 1 To 1)
    With CreateObject("scripting.dictionary"): .comparemode = 1
        For i = 2 To UBound(z): t = z(i, 1) & z(i, 2) & z(i, 3) & z(i, 4)
            If Not .exists(t) Then .Item(t) = 0: z1(i, 1) = "да"
        Next
        Range("E1").Resize(UBound(z1)) = z1
    End With
End Sub
[/vba]

Автор - sv2014
Дата добавления - 18.12.2015 в 22:49
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Выбор уникальных значений по 4 столбцам (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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