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

Вход

Регистрация

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

 

= Мир MS Excel/Как удалить дублирующие элементы таблицы и отсортировать? - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как удалить дублирующие элементы таблицы и отсортировать? (Макросы/Sub)
Как удалить дублирующие элементы таблицы и отсортировать?
Юрий_Нд Дата: Пятница, 15.09.2017, 22:03 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 193
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Доброго вечера форум. Доброго вечера специалисты Excel.
Прошу Вашей подсказки, каким образом можно удалить дублирующие элементы таблицы и отсортировать по шифру, то есть по колонке номер один. Да, я согласен, как сказал один из Уважаемых Специалистов этого Форума, что шифр корявый. Но "что поделать" шифр нормативный и менять его я не имею права.
Думаю, что принцип сортировки должен быть следующий:
1. Для однозначного шифра - по возрастанию;
2. Для шифра, состоящего из двух групп цифр через тире:
Сначала по возрастанию групп цифр до тире, затем по возрастанию после тире.
3. Ну а "после всего" всё остальное.
Да, и по поводу 3 колонки. Из двух строчек, в одной из которых есть третья колонка, а в другой нет, удалить ту строчку, в которой третья колонка пустая.
К сообщению приложен файл: 0184188.xlsm(14Kb)


Сообщение отредактировал Юрий_Нд - Пятница, 15.09.2017, 22:39
 
Ответить
СообщениеДоброго вечера форум. Доброго вечера специалисты Excel.
Прошу Вашей подсказки, каким образом можно удалить дублирующие элементы таблицы и отсортировать по шифру, то есть по колонке номер один. Да, я согласен, как сказал один из Уважаемых Специалистов этого Форума, что шифр корявый. Но "что поделать" шифр нормативный и менять его я не имею права.
Думаю, что принцип сортировки должен быть следующий:
1. Для однозначного шифра - по возрастанию;
2. Для шифра, состоящего из двух групп цифр через тире:
Сначала по возрастанию групп цифр до тире, затем по возрастанию после тире.
3. Ну а "после всего" всё остальное.
Да, и по поводу 3 колонки. Из двух строчек, в одной из которых есть третья колонка, а в другой нет, удалить ту строчку, в которой третья колонка пустая.

Автор - Юрий_Нд
Дата добавления - 15.09.2017 в 22:03
InExSu Дата: Суббота, 16.09.2017, 09:58 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 243
Репутация: 29 ±
Замечаний: 80% ±

Excel 2010
[vba]
Код
Sub ДублиТретьяКолонкаПустая()
  With Worksheets("Лист1") 'принуждение таблицы к рабочему формату
    .Rows("4:4").Insert Shift:=xlDown
    Dim r As Range: Set r = .Cells(5, 3).CurrentRegion
    r.RemoveDuplicates Columns:=Array(1, 2), Header _
        :=xlYes
    .Rows("4:4").Delete Shift:=xlUp 'возврат исходного формата
  End With
End Sub
[/vba]

Сортировка должна быть:
1
111-0169
1424-11598
2
200-0001
3

?
 
Ответить
Сообщение[vba]
Код
Sub ДублиТретьяКолонкаПустая()
  With Worksheets("Лист1") 'принуждение таблицы к рабочему формату
    .Rows("4:4").Insert Shift:=xlDown
    Dim r As Range: Set r = .Cells(5, 3).CurrentRegion
    r.RemoveDuplicates Columns:=Array(1, 2), Header _
        :=xlYes
    .Rows("4:4").Delete Shift:=xlUp 'возврат исходного формата
  End With
End Sub
[/vba]

Сортировка должна быть:
1
111-0169
1424-11598
2
200-0001
3

?

Автор - InExSu
Дата добавления - 16.09.2017 в 09:58
Юрий_Нд Дата: Суббота, 16.09.2017, 11:01 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 193
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
InExSu, спасибо за ответ, "хотелось бы" так:
Сортировка должна быть:
1
2
3
200-0001
202-1140
270-0050
111-0169
112-0061
123-0514-У
123-0515-У
1424-11598
1425-11702
Но если это очень сложно, то пусть будет любая сортировка, главное удалить дубликаты.


Сообщение отредактировал Юрий_Нд - Суббота, 16.09.2017, 11:04
 
Ответить
СообщениеInExSu, спасибо за ответ, "хотелось бы" так:
Сортировка должна быть:
1
2
3
200-0001
202-1140
270-0050
111-0169
112-0061
123-0514-У
123-0515-У
1424-11598
1425-11702
Но если это очень сложно, то пусть будет любая сортировка, главное удалить дубликаты.

Автор - Юрий_Нд
Дата добавления - 16.09.2017 в 11:01
buchlotnik Дата: Суббота, 16.09.2017, 11:18 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3347
Репутация: 896 ±
Замечаний: 0% ±

2010, 2013, 2016 RUS / ENG
Цитата
очень сложно
ага %) - почему идут сначала составные номера на 200, а только потом на 100?


каждому For - Next!
платная помощь:
ЯД: 410012595572239
buchlotnik@mail.ru
 
Ответить
Сообщение
Цитата
очень сложно
ага %) - почему идут сначала составные номера на 200, а только потом на 100?

Автор - buchlotnik
Дата добавления - 16.09.2017 в 11:18
InExSu Дата: Суббота, 16.09.2017, 11:28 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 243
Репутация: 29 ±
Замечаний: 80% ±

Excel 2010
Цитата Юрий_Нд, 16.09.2017 в 11:01, в сообщении № 3 ()
270-0050
111-0169

Где вы обсуждали сортировку?
 
Ответить
Сообщение
Цитата Юрий_Нд, 16.09.2017 в 11:01, в сообщении № 3 ()
270-0050
111-0169

Где вы обсуждали сортировку?

Автор - InExSu
Дата добавления - 16.09.2017 в 11:28
Юрий_Нд Дата: Суббота, 16.09.2017, 12:05 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 193
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
почему идут сначала составные номера на 200, а только потом на 100?

Где вы обсуждали сортировку?

Целиком и полностью согласен с Вами, однако, как уже говорил:
Цитата Юрий_Нд, 15.09.2017 в 22:03, в сообщении № 1 ()
шифр нормативный и менять его я не имею права.

Привожу оригинал (в файле или здесь):
1 2
1 Затраты труда рабочих-строителей
2 Средний разряд работ
3 Затраты труда машинистов
Машины и механизмы
200-0001 Автомобили бортовые, грузоподъемность до 3 т
202-1140 Краны на автомобильном ходу, грузоподъемность 6,3 т
270-0050 Вибраторы для всех видов строительства, кроме гидротехнического
Материалы
111-0169 Гвозди проволочные круглые формовочные 1,8х150 мм
111-0820 Проволока стальная низкоуглеродистая разного назначения черная, диаметр 0,55 мм
112-0061 Доски обрезные из хвойных пород, длина 4-6,5 м, ширина 75-150 мм, толщина 44 мм и более, III сорт
123-0514-У Щиты опалубки, ширина 300-750 мм, толщина 25 мм
123-0515-У Щиты опалубки, ширина 300-750 мм, толщина 40 мм
1424-11598 Смеси бетонные готовые тяжелые, класс бетона В7,5 [М-100], крупность заполнителя более 40 мм
1424-11600 Смеси бетонные готовые тяжелые, класс бетона В 15 [М-200], крупность заполнителя более 40 мм
П Арматура для монолитных железобетонных конст­рукций
и как я уже говорил:
Цитата Юрий_Нд, 16.09.2017 в 11:01, в сообщении № 3 ()
Но если это очень сложно, то пусть будет любая сортировка, главное удалить дубликаты.
К сообщению приложен файл: 7262379.png(141Kb)
 
Ответить
Сообщение
почему идут сначала составные номера на 200, а только потом на 100?

Где вы обсуждали сортировку?

Целиком и полностью согласен с Вами, однако, как уже говорил:
Цитата Юрий_Нд, 15.09.2017 в 22:03, в сообщении № 1 ()
шифр нормативный и менять его я не имею права.

Привожу оригинал (в файле или здесь):
1 2
1 Затраты труда рабочих-строителей
2 Средний разряд работ
3 Затраты труда машинистов
Машины и механизмы
200-0001 Автомобили бортовые, грузоподъемность до 3 т
202-1140 Краны на автомобильном ходу, грузоподъемность 6,3 т
270-0050 Вибраторы для всех видов строительства, кроме гидротехнического
Материалы
111-0169 Гвозди проволочные круглые формовочные 1,8х150 мм
111-0820 Проволока стальная низкоуглеродистая разного назначения черная, диаметр 0,55 мм
112-0061 Доски обрезные из хвойных пород, длина 4-6,5 м, ширина 75-150 мм, толщина 44 мм и более, III сорт
123-0514-У Щиты опалубки, ширина 300-750 мм, толщина 25 мм
123-0515-У Щиты опалубки, ширина 300-750 мм, толщина 40 мм
1424-11598 Смеси бетонные готовые тяжелые, класс бетона В7,5 [М-100], крупность заполнителя более 40 мм
1424-11600 Смеси бетонные готовые тяжелые, класс бетона В 15 [М-200], крупность заполнителя более 40 мм
П Арматура для монолитных железобетонных конст­рукций
и как я уже говорил:
Цитата Юрий_Нд, 16.09.2017 в 11:01, в сообщении № 3 ()
Но если это очень сложно, то пусть будет любая сортировка, главное удалить дубликаты.

Автор - Юрий_Нд
Дата добавления - 16.09.2017 в 12:05
Udik Дата: Суббота, 16.09.2017, 12:21 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Если есть полный список кодов, то можно и отсортировать. Делаем допстолбец к списку, индексируем. Потом делаем допстолбец к основной таблице и присваиваем индекс в соответствии с кодом. Сортируем по допстолбцу. Удаляем допстолбец/бцы.


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Udik - Суббота, 16.09.2017, 12:24
 
Ответить
СообщениеЕсли есть полный список кодов, то можно и отсортировать. Делаем допстолбец к списку, индексируем. Потом делаем допстолбец к основной таблице и присваиваем индекс в соответствии с кодом. Сортируем по допстолбцу. Удаляем допстолбец/бцы.

Автор - Udik
Дата добавления - 16.09.2017 в 12:21
Юрий_Нд Дата: Суббота, 16.09.2017, 12:47 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 193
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Если есть полный список кодов

К сожалению, нет...
В основном, это моя задача - сформировать этот список


Сообщение отредактировал Юрий_Нд - Суббота, 16.09.2017, 12:53
 
Ответить
Сообщение
Если есть полный список кодов

К сожалению, нет...
В основном, это моя задача - сформировать этот список

Автор - Юрий_Нд
Дата добавления - 16.09.2017 в 12:47
InExSu Дата: Суббота, 16.09.2017, 14:06 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 243
Репутация: 29 ±
Замечаний: 80% ±

Excel 2010
Цитата Юрий_Нд, 16.09.2017 в 11:01, в сообщении № 3 ()
очень сложно

Не знаю таких слов. B) Деды ДнепроГЭС построили, а тут лишь непривычная сортировка %)

[vba]
Код
Dim r As Range, Адрес As String

Sub ДублиТретьяКолонкаПустая()
  With Worksheets("Лист1")
    .Rows("6:7").Insert Shift:=xlDown
    .Rows("4:4").Copy .Rows("7:7") 'принуждение таблицы к рабочему формату
    Адрес = .Cells(8, 3).Address
    Set r = Range(Адрес).CurrentRegion
    r.RemoveDuplicates Columns:=Array(1, 2), Header _
        :=xlYes
    Call ДнепроГЭС
    .Rows("6:7").Delete Shift:=xlUp 'возврат исходного формата
  End With
End Sub

Sub ДнепроГЭС() 'сортировка строительной таблицы
  Z = Range(Адрес).CurrentRegion.Sort(Range(Адрес), xlAscending, Header:=xlYes)
  
  СтрокДвести = Application.WorksheetFunction.CountIf(Columns("C:C"), "2??-*")
  
  СтрокаВставкиДвести = Columns("C:C").Find(What:="3", LookIn:=xlFormulas, LookAt:= _
    xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
    , SearchFormat:=False).Row
  
  СтрокаВырезкиДвести = Columns("C:C").Find(What:="2??-*", LookIn:=xlFormulas, LookAt:= _
    xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
    , SearchFormat:=False).Row
  
  Rows(СтрокаВырезкиДвести & ":" & СтрокаВырезкиДвести + СтрокДвести - 1).Cut
  Rows(СтрокаВставкиДвести + 1 & ":" & СтрокаВставкиДвести + СтрокДвести - 1).Insert
  
End Sub
[/vba]


Сообщение отредактировал InExSu - Суббота, 16.09.2017, 14:08
 
Ответить
Сообщение
Цитата Юрий_Нд, 16.09.2017 в 11:01, в сообщении № 3 ()
очень сложно

Не знаю таких слов. B) Деды ДнепроГЭС построили, а тут лишь непривычная сортировка %)

[vba]
Код
Dim r As Range, Адрес As String

Sub ДублиТретьяКолонкаПустая()
  With Worksheets("Лист1")
    .Rows("6:7").Insert Shift:=xlDown
    .Rows("4:4").Copy .Rows("7:7") 'принуждение таблицы к рабочему формату
    Адрес = .Cells(8, 3).Address
    Set r = Range(Адрес).CurrentRegion
    r.RemoveDuplicates Columns:=Array(1, 2), Header _
        :=xlYes
    Call ДнепроГЭС
    .Rows("6:7").Delete Shift:=xlUp 'возврат исходного формата
  End With
End Sub

Sub ДнепроГЭС() 'сортировка строительной таблицы
  Z = Range(Адрес).CurrentRegion.Sort(Range(Адрес), xlAscending, Header:=xlYes)
  
  СтрокДвести = Application.WorksheetFunction.CountIf(Columns("C:C"), "2??-*")
  
  СтрокаВставкиДвести = Columns("C:C").Find(What:="3", LookIn:=xlFormulas, LookAt:= _
    xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
    , SearchFormat:=False).Row
  
  СтрокаВырезкиДвести = Columns("C:C").Find(What:="2??-*", LookIn:=xlFormulas, LookAt:= _
    xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
    , SearchFormat:=False).Row
  
  Rows(СтрокаВырезкиДвести & ":" & СтрокаВырезкиДвести + СтрокДвести - 1).Cut
  Rows(СтрокаВставкиДвести + 1 & ":" & СтрокаВставкиДвести + СтрокДвести - 1).Insert
  
End Sub
[/vba]

Автор - InExSu
Дата добавления - 16.09.2017 в 14:06
Юрий_Нд Дата: Суббота, 16.09.2017, 14:47 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 193
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
InExSu, Браво, супер, нет слов!
Жаль, что в конце "что-то прицепилось"...
Но это все ерунда!
С уважением и благодарностью ___________ Юрий.
К сообщению приложен файл: 3003969.xlsm(19Kb)
 
Ответить
СообщениеInExSu, Браво, супер, нет слов!
Жаль, что в конце "что-то прицепилось"...
Но это все ерунда!
С уважением и благодарностью ___________ Юрий.

Автор - Юрий_Нд
Дата добавления - 16.09.2017 в 14:47
InExSu Дата: Воскресенье, 17.09.2017, 09:49 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 243
Репутация: 29 ±
Замечаний: 80% ±

Excel 2010
Цитата Юрий_Нд, 17.09.2017 в 00:39, в сообщении № 6 ()
как же всё-таки он работает

Постепенно обсудим.
Цитата Юрий_Нд, 17.09.2017 в 00:39, в сообщении № 6 ()
нужно чуть подвинуть таблицу.

Приложите несколько листов с разными расположениями Ваших таблиц - научу макрос искать Вашу таблицу самостоятельно.
Цитата Юрий_Нд, 17.09.2017 в 00:39, в сообщении № 6 ()
общего количества строк

макрос уже использует возможности Excel определять количество строк, если ему подскажут как найти таблицу.
Резюме: жду листы с возможными позициями таблицы.
 
Ответить
Сообщение
Цитата Юрий_Нд, 17.09.2017 в 00:39, в сообщении № 6 ()
как же всё-таки он работает

Постепенно обсудим.
Цитата Юрий_Нд, 17.09.2017 в 00:39, в сообщении № 6 ()
нужно чуть подвинуть таблицу.

Приложите несколько листов с разными расположениями Ваших таблиц - научу макрос искать Вашу таблицу самостоятельно.
Цитата Юрий_Нд, 17.09.2017 в 00:39, в сообщении № 6 ()
общего количества строк

макрос уже использует возможности Excel определять количество строк, если ему подскажут как найти таблицу.
Резюме: жду листы с возможными позициями таблицы.

Автор - InExSu
Дата добавления - 17.09.2017 в 09:49
Юрий_Нд Дата: Понедельник, 18.09.2017, 00:02 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 193
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
InExSu, Спасибо за поддержку, прошу извинить за долгое отсутствие.

Далее только по делу.
1.
Приложите несколько листов с разными расположениями Ваших таблиц - научу макрос искать Вашу таблицу самостоятельно.

Всё в приложенном файле. Все макросы удалил, чтобы поучиться у Вас, "как это лучше делать".

2. Лист "оглавление" в данный момент на первом месте, но это бывший лист номер два, лист "исходные таблицы" в настоящий момент на втором месте, но это бывший лист номер один.
Вопрос:
- в настоящий момент "оглавление" лист номер один, или он остался листом номер 2?
- аналогично по листу исходной таблицы.
К сообщению приложен файл: 1647404.xlsm(17Kb)


Сообщение отредактировал Юрий_Нд - Понедельник, 18.09.2017, 08:04
 
Ответить
СообщениеInExSu, Спасибо за поддержку, прошу извинить за долгое отсутствие.

Далее только по делу.
1.
Приложите несколько листов с разными расположениями Ваших таблиц - научу макрос искать Вашу таблицу самостоятельно.

Всё в приложенном файле. Все макросы удалил, чтобы поучиться у Вас, "как это лучше делать".

2. Лист "оглавление" в данный момент на первом месте, но это бывший лист номер два, лист "исходные таблицы" в настоящий момент на втором месте, но это бывший лист номер один.
Вопрос:
- в настоящий момент "оглавление" лист номер один, или он остался листом номер 2?
- аналогично по листу исходной таблицы.

Автор - Юрий_Нд
Дата добавления - 18.09.2017 в 00:02
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как удалить дублирующие элементы таблицы и отсортировать? (Макросы/Sub)
Страница 1 из 11
Поиск:

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