Как уникальный код в excel

 

excel_pl

Пользователь

Сообщений: 206
Регистрация: 01.01.1970

Как сделать, чтобы в ячейке формировался уникальный идентификатор для каждой строки (записи)?
Состав id не принципиален: цифры или текст, или случайный набор символов…

Как сделать, чтобы уникальный идентификатор для каждой строки (записи) не изменялся при удалении или добавлении записей?

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#2

09.03.2017 20:59:50

Доброе время суток
На событие Worksheet.Change в пределах таблицы добавляете проверку на пустое значение по столбцу id. Если пустое, то получаете guid для ввода в эту ячейку

Код
Replace(Mid$(CreateObject("Scriptlet.TypeLib").GUID, 2, 36),"-",vbNullString)

Взято

здесь и есть варианты.

.
Ну, или на скрытом листе ячейка-счётчик для пустой ячейки id, увеличиваете на 1, сохраняете новое значение.
Успехов.

 

Nik021

Пользователь

Сообщений: 63
Регистрация: 24.02.2017

Здравствуйте.

Самое простое это прописать id при помощи любой формулы, но в этом случае оно изменится при изменении самой записи, бороться с этим можно при помощи макроса, который бы записывал id, как текст. Ну либо сделать простую формулу, результат которой не зависит от записи (2 вариант)

 

AAF

Пользователь

Сообщений: 1000
Регистрация: 18.12.2016

#4

09.03.2017 21:19:28

Иногда так удобно…  :D

Код
Function IDNum()
Static idn As Double
IDNum = Fix(Now * 10000000000#)
If idn < IDNum Then
  idn = IDNum
Else
  idn = idn + 1
  IDNum = idn
End If
End Function

Sub Пример()
Cells(1, 1) = IDNum

'Можно потом использовать так
Cells(1, 2) = CDate(Cells(1, 1) / 10000000000#)
End Sub
 

БМВ

Модератор

Сообщений: 21383
Регистрация: 28.12.2016

Excel 2013, 2016

AAF, тут есть подвох получить не уникальные значения если обработку делать пакетом. При разовом или с таймаутом применении — ОК.
Однако, подобное я использовал в сочетании с данным одного из полей. Хотя вариант c GUID , раз уж лезем в VBA мне более нравится.  

По вопросам из тем форума, личку не читаю.

 

AAF

Пользователь

Сообщений: 1000
Регистрация: 18.12.2016

БМВ, Нет, там подкидывается по единице, если не сменилось…  :)

 

БМВ

Модератор

Сообщений: 21383
Регистрация: 28.12.2016

Excel 2013, 2016

AAF,  старосnь+ 14″+HD = не посмотрел внимательно :-). Sorry

По вопросам из тем форума, личку не читаю.

 

pharmaprofi

Пользователь

Сообщений: 234
Регистрация: 19.11.2014

pharmaprofi

А я  такие люблю:

GUID

Гарантируется уникальность Id. Правда в excel такой Id не в один клик генерируется…

p/s увидел, что Андрей VG про него и пишет

Изменено: pharmaprofi09.03.2017 22:20:33

 

excel_pl

Пользователь

Сообщений: 206
Регистрация: 01.01.1970

#9

09.03.2017 22:29:15

Цитата
AAF написал:
Иногда так удобно…  

Использовал ваш вариант…
При удалении строк (записей) происходит обновление всех ID, т.е. все id перегенерируются на новые…

Так и должно быть или можно, что-то сделать?

 

AAF

Пользователь

Сообщений: 1000
Регистрация: 18.12.2016

Если Вы используете как функцию на листе, будет обновляться, а если прописывать .Value в ячейку, то все уже, это навечно.
Какой у Вас код?

Изменено: AAF09.03.2017 22:34:38

 

excel_pl

Пользователь

Сообщений: 206
Регистрация: 01.01.1970

#11

09.03.2017 22:39:34

Цитата
AAF написал:
Какой у Вас код?

Я слабо разбираюсь в VBA.
То, что вы написали в сообщении #4, воткнул в модуль… и всё..
Буду признателен, если скорректируете мой файл согласно предложенного вами решения..

 

AAF

Пользователь

Сообщений: 1000
Регистрация: 18.12.2016

#12

09.03.2017 22:57:18

excel_pl, вот это вставить в модуль листа:

Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell
Dim ShNm As String 'имя листа
Dim Rng As Range 'та ячейка, где написано "ID"
ShNm = Me.Name
Set Rng = Sheets(ShNm).Cells(1, 1)
Set Rng = Rng.CurrentRegion.Resize(Rng.CurrentRegion.Rows.Count, 1)
For Each cell In Rng
  If cell = "" Then cell.Value = IDNum
Next
End Sub

А функцию в простой модуль:

Код
Function IDNum()
Static idn As Double
IDNum = Fix(Now * 10000000000#)
If idn < IDNum Then
  idn = IDNum
Else
  idn = idn + 1
  IDNum = idn
End If
End Function

Прикрепленные файлы

  • уник идент id_00 (1).xlsm (16.52 КБ)

Изменено: AAF09.03.2017 23:04:27

 

excel_pl

Пользователь

Сообщений: 206
Регистрация: 01.01.1970

#13

09.03.2017 23:01:48

Цитата
AAF написал:
вот это вставить в модуль листа:

не пашет..  

 

AAF

Пользователь

Сообщений: 1000
Регистрация: 18.12.2016

excel_pl, Я файлик добавил в сообщение и исправил его, а то не тот сначала кинул… :(

 

excel_pl

Пользователь

Сообщений: 206
Регистрация: 01.01.1970

#15

09.03.2017 23:09:29

[URL=AAF написал:Я файлик добавил в сообщение и исправил его, а то не тот сначала кинул…Что-то не работает… или я не туда жмусм. скрин

http://prntscr.com/ehzw6o

]

Цитата
AAF написал:
Я файлик добавил в сообщение и исправил его, а то не тот сначала кинул…

Что-то не работает… или я не туда жму
см. скрин

Изменено: excel_pl14.03.2017 02:49:36

 

AAF

Пользователь

Сообщений: 1000
Регистрация: 18.12.2016

файлик называется так: уник идент id_00 (1).XLSM
Да?
Заполнение происходит, когда производяться изменения на листе
Может Вы забыли нажать кнопку «ВЛЮЧИТЬ СОДЕРЖИМОЕ»?

 

excel_pl

Пользователь

Сообщений: 206
Регистрация: 01.01.1970

Кажись заработал…
Спасибо.
А как сделать чтобы не в первом столбце формировалось «id», а в любом другом?
Как изменить код для этого?

 

AAF

Пользователь

Сообщений: 1000
Регистрация: 18.12.2016

#18

10.03.2017 08:57:56

В коде есть такие строчки:

Код
ShNm = Me.Name
Set Rng = Sheets(ShNm).Cells(1, 1)

иначе говоря:

Код
ShNm = "Здесь пишите имя листа"
Set Rng = Sheets(ShNm).Cells(НомерСтроки, НомерСтолбца)'той ячейки, в которой заголовок - "ID"
 

erlankoke

Пользователь

Сообщений: 3
Регистрация: 16.02.2017

Можно генерировать с помощью genpas.narod.ru и удалить дубликаты.

или попробовать формулой с привязкой к строек в связке с генерированным числом и числом из ячейки  ƒ=GetNumbers([@zp])+СТРОКА()*СЛУЧМЕЖДУ(5000;9000)

 

excel_pl

Пользователь

Сообщений: 206
Регистрация: 01.01.1970

Не могли бы вы проверить правильно ли я делаю?
см. скрин.

http://prntscr.com/ei50a9  

 

excel_pl

Пользователь

Сообщений: 206
Регистрация: 01.01.1970

#21

10.03.2017 09:22:07

Цитата
erlankoke написал:
Можно генерировать с помощью genpas.narod.ru и удалить дубликаты.

Не могли бы вы показать на примере моего файла?

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#22

10.03.2017 10:38:34

Доброе время суток.

Цитата
erlankoke написал:
или попробовать формулой с привязкой к строек

И что случиться при сортировке или удалении?

 

AAF

Пользователь

Сообщений: 1000
Регистрация: 18.12.2016

#23

10.03.2017 15:06:21

excel_pl, да, имелось ввиду, что id предполагает первый столбец региона (таблицы)
Теперь будет именно тот столбец «C», в котором находится cells(r,C)

Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell, col
Dim ShNm As String 'имя листа
Dim Rng As Range 'ячейка, где написано "ID"
ShNm = Me.Name
Set Rng = Sheets(ShNm).Cells(1, 1)
col = Rng.Column 'запоминаем столбец
Set Rng = Rng.CurrentRegion 'определяем регион непрерывной таблицы
If Rng.Rows.Count = 1 Then Exit Sub 'если в регионе одна строка, а это заголовок, то данных нет, все бросаем и уходим
Set Rng = Rng.Resize(Rng.Rows.Count - 1, 1).Offset(1, col - Rng.CurrentRegion.Column) 'подгоняем размер под столбец обработки ID
Application.EnableEvents = False 'отключаем события, особенно Worksheet_Change, на время вставки нового ID
For Each cell In Rng 'перечисляем все ячейки входящие в Rng
  If cell = "" Then cell.Value = IDNum 'если пустая, то втыкаем туда ID
Next
Application.EnableEvents = True 'не забываем включить события Worksheet_Change
End Sub

Замените предыдущий код на этот…

Изменено: AAF10.03.2017 15:23:54

 

Jack Famous

Пользователь

Сообщений: 10852
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#24

03.10.2018 10:27:26

Дополню немного изменённым вариантом из комментариев по ссылке Андрея из #2:

Код
Function ГенерацияКлюча(Optional full As Boolean) As String
    Do While Len(ГенерацияКлюча) < 32
        If Len(ГенерацияКлюча) = 16 Then ГенерацияКлюча = ГенерацияКлюча & Hex$(8 + CInt(Rnd * 3))
        ГенерацияКлюча = ГенерацияКлюча & Hex$(CInt(Rnd * 15))
    Loop
If full Then ГенерацияКлюча = "{" & Mid$(ГенерацияКлюча, 1, 8) & "-" & Mid$(ГенерацияКлюча, 9, 4) & "-" & Mid$(ГенерацияКлюча, 13, 4) & "-" & Mid$(ГенерацияКлюча, 17, 4) & "-" & Mid$(ГенерацияКлюча, 21, 12) & "}": Exit Function
ГенерацияКлюча = Mid$(ГенерацияКлюча, 1, 8) & Mid$(ГенерацияКлюча, 9, 4) & Mid$(ГенерацияКлюча, 13, 4) & Mid$(ГенерацияКлюча, 17, 4) & Mid$(ГенерацияКлюча, 21, 12)
End Function

дело в том, что, после одного из обновлений, на строке CreateObject(«Scriptlet.TypeLib») возникает ошибка (подробности

тут

).

Чтобы не писать функцию с декларированием библиотек (типа Declare Function CoCreateGuid Lib «ole32» (ByRef GUID As Byte) As Long) и был выбран код выше, как полноценная замена.
Вариант от AAF очень хорош, но это не GUID и полезен в других областях (возникают проблемы с длинными числами и их отображением — не хотелось возится)

Знаю, что тема старая, но мне была полезна, да и нечастый вопрос, собственно  :D

Изменено: Jack Famous03.10.2018 10:44:00

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

Jack Famous

Пользователь

Сообщений: 10852
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#25

05.10.2018 12:25:06

Снова вернулся к теме, т.к. вариант из предыдущего поста, как оказывается, генерит большое количество дублей уже на тысячах ключей, если диапазон заполняется не одновременно, а в разное время. Вариант от AAF такое исключает (если не править настройки даты/времени на ПК), т.к. привязан к постоянному счётчику. К тому же, возможность узнать дату и время получения ключа также может пригодиться  :)

Добавил префикс для избавления от «длинных» чисел…

Код
Function ГенерацияКлюча() As String
Static idn#, temp#
temp = Fix(Now * 10000000000#)
    If idn < temp Then
      idn = temp: ГенерацияКлюча = "PRDX" & temp
    Else
      idn = idn + 1: ГенерацияКлюча = "PRDX" & idn
    End If
End Function

Изменено: Jack Famous05.10.2018 12:27:02

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

Приветствую

Надо как-то в Excel или в LibreOffice настроить автоматическую генерацию уникального числа у каждой строки с заполненными данными.

Есть два столбца — ID (столбец №1) и имя человека (столбец №2). Если добавляю новое имя в столбец №2, то в этой строке в столбце №1 должен появиться уникальный идентификатор, к примеру, цифровой код (цифра). Но есть одна особенность. Допустим, что есть пять записей в файле с айдишниками с 1 по 5. Я удаляю пятую запись, строку целиком или очищаю ее, а затем добавляю новую запись. А вот у же у новой записи по факту шестой, но с учетом ранее удаленной записи, новая запись будет пятой, но ее ID уже не должен быть пятым, но должен быть шестым.

На картинке пояснил тремя блоками:
dc505601869f433e82f708d0404992e0.png

  1. добавил записи, добавились автоматом ID
  2. удалил пятую запись
  3. добавил новую запись; по факту ее ID должен быть новым, ранее не использовавшимся.

Подскажите пожалуйста реализацию.


  • Вопрос задан

    более трёх лет назад

  • 5453 просмотра

Пригласить эксперта

Используйте ms access или любую БД. Они для этого и предназначены.
в Excel можно реализовать через макросы, но это такой костыль, что всем костылям костыль:
Добавьте код макроса в код страницы (редактор кода vba->двойной щелчок по нужному листу в менеджере проекта), диапазон ваших значений B1:B1000

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range

    ' The variable KeyCells contains the cells that will
    ' cause an alert when they are changed.
    Set KeyCells = Range("B1:B1000")
    
    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then

        ' Display a message when one of the designated cells has been
        ' changed.
        ' Place your code here.
        X = 5
        Y = 1
        If Cells(Y, X).Value = "" Then Cells(Y, X).Value = 0
        On Error GoTo here
        
        If Target.Value <> "" Then
            answer = MsgBox("Increment?", vbYesNo + vbQuestion, "Empty Sheet")
            If answer = vbYes Then Target.Offset(0, -1).Value = Cells(Y, X).Value + 1
            If answer = vbYes Then Cells(Y, X).Value = Cells(Y, X).Value + 1
        Else
            Target.Offset(0, -1).Value = ""
        End If
here:
        Debug.Print Err
    End If
End Sub

Можно использовать ID на основе текущего времени, например 170911181042, 170911181057 и т.п. Со вставкой такого числа справится простенький макрос типа:

Sub typeID()
mydate = Date
mytime = Time
mydateF = Format(mydate, "yymmdd")
mytimeF = Format(mytime, "HhMmSs")
ID = mydateF & mytimeF
ActiveCell.Value = ID
End Sub

Варианты с GUID:
1. Макрос:

Public Function GetGUID() As String 
    GetGUID = Mid$(CreateObject("Scriptlet.TypeLib").GUID, 2, 36) 
End Function

2. Формула:

=CONCATENATE(DEC2HEX(RANDBETWEEN(0;4294967295);8);"-";DEC2HEX(RANDBETWEEN(0;42949);4);"-";DEC2HEX(RANDBETWEEN(0;42949);4);"-";DEC2HEX(RANDBETWEEN(0;42949);4);"-";DEC2HEX(RANDBETWEEN(0;4294967295);8);DEC2HEX(RANDBETWEEN(0;42949);4))


  • Показать ещё
    Загружается…

16 апр. 2023, в 06:36

1000 руб./за проект

16 апр. 2023, в 05:28

5000 руб./за проект

16 апр. 2023, в 04:52

5000 руб./за проект

Минуточку внимания

Problems can arise when converting the character codes from one system to another system. These problems result in garbled data. To correct this, a universal character set known as Unicode system was developed during the late 1980s that gives the characters used in computer systems a unique character code.

The information is this article applies to Excel 2019, Excel 2016, Excel 2013, Excel 2010, Excel 2019 for Mac, Excel 2016 for Mac, Excel for Mac 2011, and Excel Online.

Universal Character Set

There are 255 different character codes or code points in the Windows ANSI code page while the Unicode system is designed to hold over one million code points. For the sake of compatibility, the first 255 code points of the newer Unicode system match those of the ANSI system for western language characters and numbers.

For these standard characters, the codes are programmed into the computer so that typing a letter on the keyboard enters the code for the letter into the application being used.

Non-standard characters and symbols, such as the copyright symbol or accented characters used in various languages, are entered into an application by typing the ANSI code or Unicode number for the character in the desired location.

Excel CHAR and CODE Functions

Excel has a number of functions that work with these numbers. CHAR and CODE work in all versions of Excel. UNICHAR and UNICODE were introduced in Excel 2013.

The CHAR and UNICHAR functions return the character for a given code. The CODE and UNICODE functions do the opposite and provide the code for a given character. As shown in the image above:

  • The result for =CHAR (169) is the copyright symbol ©.
  • The result for =CODE(©) is 169.

If the two functions are nested together in the form of

=CODE(CHAR(169))

the output for the formula is 169 since the two functions do the opposite job of the other.

The CHAR and UNICHAR Functions Syntax and Arguments

A function’s syntax refers to the layout of the function and includes the function’s name, brackets, and arguments.

The syntax for the CHAR function is:

=CHAR(Number)

The syntax for the UNICHAR function is:

=UNICHAR(Number)

In these functions, Number (which is required) is a number between 1 and 255 that is associated with the character you want.

  • The Number argument can be the number entered directly into the function or a cell reference to the location of the number on a worksheet.
  • If the Number argument is not an integer between 1 and 255, the CHAR function returns the #VALUE! error value, as shown in row 4 in the image above.
  • For code numbers greater than 255, use the UNICHAR function.
  • If a Number argument of zero (0) is entered, the CHAR and UNICHAR functions return the #VALUE! error value, as shown in row 2 in the image above.

Enter the CHAR and UNICHAR Functions

Options for entering either function include typing the function in manually, such as

=CHAR(65)

or

=UNICHAR(A7)

The function and the Number argument can also be entered in the functions’ dialog box.

In Excel Online, you’ll manually enter the function. In desktop versions of Excel, use the dialog box.

Follow these steps to enter the CHAR function into cell B3:

  1. Select cell B3 to make it the active cell.
  2. Select Formulas.
  3. Choose Text to open the function drop-down list.
  4. Select CHAR in the list to bring up the function’s dialog box.
  5. In the dialog box, select the Number line.
  6. Select cell A3 in the worksheet to enter that cell reference into the dialog box.
  7. Select OK to complete the function and close the dialog box.

The exclamation mark character appears in cell B3 because its ANSI character code is 33.

When you select cell E2, the complete function =CHAR(A3) appears in the formula bar above the worksheet.

CHAR and UNICHAR Function Uses

The CHAR and UNICHAR functions translate code page numbers into characters for files created on other types of computers. For example, the CHAR function can remove unwanted characters that appear with imported data.

These functions can be used in conjunction with other Excel functions, such as TRIM and SUBSTITUTE, in formulas designed to remove unwanted characters from a worksheet.

The CODE and UNICODE Functions Syntax and Arguments

A function’s syntax refers to the layout of the function and includes the function’s name, brackets, and arguments.

The syntax for the CODE function is:

=CODE(Text)

The syntax for the UNICODE function is:

=UNICODE(Text)

In these functions, Text (which is required) is the character for which you want to find the ANSI code number.

The Text argument can be a single character surrounded by double quotation marks ( » « ) that is entered directly into the function or a cell reference to the location of the character in a worksheet, as shown in rows 4 and 9 in the image above.

If the text argument is left empty, the CODE function returns the #VALUE! error value, as shown in row 2 in the image above.

The CODE function only displays the character code for a single character. If the text argument contains more than one character (such as the word Excel shown in rows 7 and 8 in the image above), only the code for the first character is displayed. In this case, it is the number 69 which is the character code for the uppercase letter E.

Uppercase vs. Lowercase Letters

Uppercase or capital letters on the keyboard have different character codes than the corresponding lowercase or small letters.

For example, the UNICODE/ANSI code number for the uppercase «A» is 65 while the lowercase «a» UNICODE/ANSI code number is 97, as shown in rows 4 and 5 in the image above.

Enter the CODE and UNICODE Functions

Options for entering either function include typing the function in a cell, such as:

=CODE(65)

or

=UNICODE(A6)

The function and the Text argument can also be entered in the functions’ dialog box.

In Excel Online, you’ll manually enter the function. In desktop versions of Excel, use the dialog box.

Follow these steps to enter the CODE function into cell B3:

  1. Select cell B3 to make it the active cell.
  2. Select Formulas.
  3. Choose Text to open the function drop-down list.
  4. Select CODE in the list to bring up the function’s dialog box.
  5. In the dialog box, select the Text line.
  6. Select cell A3 in the worksheet to enter that cell reference into the dialog box.
  7. Select OK to complete the function and close the dialog box.

The number 64 appears in cell B3. This is the character code for the ampersand ( & ) character.

When you select cell B3, the complete function =CODE (A3) appears in the formula bar above the worksheet.

Thanks for letting us know!

Get the Latest Tech News Delivered Every Day

Subscribe

Предположим, у вас есть три списка, и теперь вы хотите создать уникальные комбинации из этих трех списков, как показано на скриншотах ниже, и как вы можете быстро решить эту неприятную проблему в Excel?

doc генерирует уникальную комбинацию 1стрелка вправоdoc генерирует уникальную комбинацию 2

Создавайте уникальные комбинации, используя несколько формул

Создавайте уникальные комбинации, Kutools for Excelхорошая идея3


Создавайте уникальные комбинации, используя несколько формул

1. Выберите пустой столбец рядом с тремя списками, например столбец D, и введите эту формулу. = МОД ((СТРОКА () — 1); 4) +1 в строку формул, затем Ctrl + Enter ключи, чтобы применить эту формулу ко всему столбцу. Смотрите скриншоты:

doc генерирует уникальную комбинацию 3

стрелка вниз

doc генерирует уникальную комбинацию 4

2. Затем выберите весь столбец E, который находится рядом с первым столбцом формулы D, и введите = МОД (ЦЕЛОЕ ((СТРОКА () — 1) / 4); 4) +1 в строку формул и нажмите Ctrl + Enter ключи для применения формулы. Смотрите скриншот:

doc генерирует уникальную комбинацию 5

стрелка вниз

doc генерирует уникальную комбинацию 6

3. Перейдите к третьему новому столбцу F рядом со вторым столбцом формул E и введите эту формулу. =MOD(INT(INT((ROW()-1)/4)/4),4)+1 в строку формул и нажмите Ctrl + Enter ключи, чтобы применить формулу ко всему столбцу. Смотрите скриншот:

doc генерирует уникальную комбинацию 7

стрелка вниз

doc генерирует уникальную комбинацию 8

4. Далее выберите столбец G и введите эту формулу. = ИНДЕКС (A $ 1: A $ 4; D1) в строку формул и нажмите Ctrl + Enter ключи, чтобы получить результат. Смотрите скриншот:

Наконечник: A1 — первая ячейка первого списка, а D1 — первая ячейка столбца, содержащего вашу первую формулу.

doc генерирует уникальную комбинацию 9

стрелка вниз

doc генерирует уникальную комбинацию 10

5. Щелкните G1, затем перетащите маркер автозаполнения вправо на I1, а затем отдельно выберите столбец H и столбец I, чтобы применить формулу ко всем столбцам. см. снимок экрана:

doc генерирует уникальную комбинацию 11

стрелка вниз

doc генерирует уникальную комбинацию 12

Затем вы можете объединить столбец G, столбец H и столбец I.

6. Выберите J1, затем введите эту формулу. = G1 & H1 & I1 в это нажмите Enter и перетащите маркер автозаполнения вниз, пока не появится дубликат. Смотрите скриншоты:

Наконечник: G1, H1 и I1 — ячейки, содержащие формулы.

doc генерирует уникальную комбинацию 13

стрелка вниз

doc генерирует уникальную комбинацию 14

Теперь все уникальные комбинации сформированы тремя списками.

Примечание: в формулах = МОД ((СТРОКА () — 1); 4) +1, = МОД (ЦЕЛОЕ ((СТРОКА () — 1) / 4); 4) +1, and =MOD(INT(INT((ROW()-1)/4)/4),4)+1, 4 означает, что в списке 4 данных.


Создавайте уникальные комбинации, Kutools for Excel

С вышеуказанным методом это слишком сложно и проблематично для пользователей, к счастью, Kutools for ExcelАвтора Список всех комбинаций может быстро генерировать уникальные возможные комбинации по трем спискам.

После бесплатная установка Kutools for Excel, пожалуйста, сделайте следующее:

1. Нажмите Кутулс > Вставить > Список всех комбинаций. Смотрите скриншот:

doc генерирует уникальную комбинацию 15

2. Затем в Список всех комбинаций диалоговое окно, выберите Значение от Тип раскрывающийся список, щелкните Приложения кнопку, чтобы выбрать первый список, и нажмите Добавить добавить список в Список комбинаций. Смотрите скриншот:

doc генерирует уникальную комбинацию 16

Повторите эту операцию, чтобы добавить все списки в Список комбинаций раздел последовательно. Смотрите скриншот:

doc генерирует уникальную комбинацию 17

3. Нажмите Ok, и выбрать первую ячейку целевого диапазона для вывода комбинаций в диалоговом окне. Смотрите скриншот:

doc генерирует уникальную комбинацию 18

4. Нажмите OK, и были сгенерированы все уникальные комбинации.

doc генерирует уникальную комбинацию 19


Относительные статьи:

  • Как сгенерировать список всех возможных комбинаций из 4 цифр в Excel?

Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Автоматическое присвоение уникального кода и его фиксация

Alesasa

Дата: Четверг, 20.04.2017, 01:42 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 7


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Добрый день!
Строю базу в Excel, планирую создать автоматическое присвоение кода каждому материалу, по его типу, группе, марке. Присвоить код вроде как смогу но не понимаю как сохранить уникальное значение при изменении (удалении или добавлении строк), хотелось бы без макросов.
В примере желтым выделен пример кода который должен автоматически присваиваться, оранжевым — расшифровка кода.
Заранее благодарю за помощь

К сообщению приложен файл:

7501129.xlsx
(31.4 Kb)

 

Ответить

_Igor_61

Дата: Четверг, 20.04.2017, 05:45 |
Сообщение № 2

Группа: Проверенные

Ранг: Ветеран

Сообщений: 504


Репутация:

90

±

Замечаний:
0% ±


Excel 2007

Здравствуйте! Формулы не умеют запоминать значения, это можно сделать только макросом. Но в Вашем случае, наверное, это и не нужно. Новые материалы будут добавляться в конец каждой группы, ведь так? Иначе в нумерации будет полнейший беспорядок. Например, нужно добавить новую позицию в группе D01 01 01. Выделяете строку с заголовком следующей группы (это D01 01 02, строка 30, а в таблице №пп 18). Вставляете новую строку. Выделяете последнюю заполненную ячейку (это будет С29), ставите курсор на правый нижний угол ячейки, чтобы появился крестик, и делаете двойной щелчок. Пустая ячейка заполняется следующим номером, результат достигнут. А чтобы легче было отфильтровывать значения, можно сделать еще один столбец «Группы», см. в примере (столбец «В»).

К сообщению приложен файл:

Alesasa.xlsx
(34.1 Kb)

 

Ответить

Alesasa

Дата: Четверг, 20.04.2017, 09:29 |
Сообщение № 3

Группа: Пользователи

Ранг: Прохожий

Сообщений: 7


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Добрый день Igor_61.
Я наверно не до конца описал задачу:
В книге, 2 листа — производители и база,
в листе «производители» указан код присвоенный марке оборудования,
в листе «база» нужно выполнить автоматическое присвоение уникального кода новому материалу, база будет систематически обновляться, будут добавляться и удаляться строки, некоторые из материалов будут удаляться из базы, при удалении материала с уже присвоенным номером нужно сохранить код ранее присвоенный автоматически.
Новая группа в базе будет создаваться вручную с присвоением номера по типу и группе материалов, код же материала должен устанавливаться автоматически с условием кода поставщика указанного в листе производители.

К сообщению приложен файл:

2327655.xlsx
(30.4 Kb)

 

Ответить

Alesasa

Дата: Пятница, 21.04.2017, 19:21 |
Сообщение № 4

Группа: Пользователи

Ранг: Прохожий

Сообщений: 7


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Что то тишина, и дело не продвигается, давайте тогда упростим задачу.
В книге, 2 листа — производители и база,
в листе «производители» указан код присвоенный марке оборудования,
в листе «база» нужно выполнить автоматическое присвоение уникального кода новому материалу
Новая группа в базе будет создаваться вручную с присвоением номера по типу и группе материалов (стобцы «В» и «С»), код же материала должен устанавливаться автоматически (+1 ОТ ПОСЛЕДНЕГО МАТЕРИАЛА ДАННОГО ПРОИЗВОДИТЕЛЯ) с условием кода поставщика указанного в листе производители в столбце «D». Полученный код будет носить рекомендуемый характер для дальнейшего использования в стобце «Е».

 

Ответить

_Igor_61

Дата: Пятница, 21.04.2017, 20:39 |
Сообщение № 5

Группа: Проверенные

Ранг: Ветеран

Сообщений: 504


Репутация:

90

±

Замечаний:
0% ±


Excel 2007

будут добавляться и удаляться строки

Допустим, в группе 10 материалов (позиций), с D01 01 01-001 по D01 01 01-010. Привязываемся либо к верхней (грубо говоря С12=С11+1), либо к номеру строки. Строка добавляется или удаляется — меняются все номера, т.к. они зависят от других. При такой постановке вопроса значения невозможно сохранить, а уж тем более что это будут за уникальные номера, если они постоянно меняются. Для чего тогда они нужны?

сохранить уникальное значение при изменении (удалении или добавлении строк)

Уникальное или предыдущее? То, которое было до удаления или добавления строки? Или оно может меняться, главное, чтобы не совпадало с остальными?

 

Ответить

Светлый

Дата: Суббота, 22.04.2017, 08:57 |
Сообщение № 6

Группа: Друзья

Ранг: Старожил

Сообщений: 1742


Репутация:

479

±

Замечаний:
0% ±


Excel 2013, 2016

Просто надо под рукой иметь формулы вычисления уникального кода. При вставке нового материала копируем эту формулу, а потом присваиваем этой ячейке её значение (уже не формула) и оно остаётся неизменным при любых дальнейших манипуляциях.


Программировать проще, чем писать стихи.

 

Ответить

buchlotnik

Дата: Суббота, 22.04.2017, 09:36 |
Сообщение № 7

Группа: Заблокированные

Ранг: Участник клуба

Сообщений: 3442


Репутация:

929

±

Замечаний:
20% ±


2010, 2013, 2016 RUS / ENG

Светлый,

Цитата

При вставке нового материала копируем эту формулу, а потом присваиваем этой ячейке её значение (уже не формула)

Чутка короче — формулу в именованный диапазон, а сам диапазон использовать как источник для выпадающего списка — тогда при вводе новых значений новый уникальный всегда под рукой

 

Ответить

Хитрости »

1 Май 2011              532176 просмотров


Как получить список уникальных(не повторяющихся) значений?

Представим себе большой список различных наименований, ФИО, табельных номеров и т.п. А необходимо из этого списка оставить список все тех же наименований, но чтобы они не повторялись — т.е. удалить из этого списка все дублирующие записи. Как это иначе называют: создать список уникальных элементов, список неповторяющихся, без дубликатов. Для этого существует несколько способов: встроенными средствами Excel, встроенными формулами и, наконец, при помощи кода Visual Basic for Application(VBA) и сводных таблиц. В этой статье рассмотрим каждый из вариантов.

  • При помощи встроенных возможностей Excel 2007 и выше
  • При помощи Расширенного фильтра
  • При помощи формул
  • При помощи кодов Visual Basic for Application(VBA) — макросы, включая универсальный код выборки из произвольного диапазона
  • При помощи сводных таблиц

при помощи встроенных возможностей Excel 2007 и выше

В Excel 2007 и 2010 это сделать проще простого — есть специальная команда, которая так и называется — Удалить дубликаты (Remove Duplicates). Расположена она на вкладке Данные (Data) подраздел Работа с данными (Data tools)

Как использовать данную команду. Выделяете столбец(или несколько) с теми данными, в которых надо удалить дублирующие записи. Идете на вкладку Данные (Data)Удалить дубликаты (Remove Duplicates).

Если выделить один столбец, но рядом с ним будут еще столбцы с данными(или хотя бы один столбец), то Excel предложит выбрать: расширить диапазон выборки этим столбцом или оставить выделение как есть и удалить данные только в выделенном диапазоне. Важно помнить, что если не расширить диапазон, то данные будут изменены лишь в одном столбце, а данные в прилегающем столбце останутся без малейших изменений.

Появится окно с параметрами удаления дубликатов

Ставите галочки напротив тех столбцов, дубликаты в которых надо удалить и жмете Ок. Если в выделенном диапазоне так же расположены заголовки данных, то лучше поставить флаг Мои данные содержат заголовки, чтобы случайно не удалить данные в таблице(если они вдруг полностью совпадают со значением в заголовке).


Способ 1: Расширенный фильтр

В случае с Excel 2003 все посложнее. Там нет такого инструмента, как Удалить дубликаты. Но зато есть такой замечательный инструмент, как Расширенный фильтр. В 2003 этот инструмент можно найти в ДанныеФильтрРасширенный фильтр. Прелесть этого метода в том, с его помощью можно не портить исходные данные, а создать список в другом диапазоне.

В 2007-2010 Excel, он тоже есть, но немного запрятан. Расположен на вкладке Данные (Data), группа Сортировка и фильтр (Sort & Filter)Дополнительно (Advanced)

Как его использовать: запускаем указанный инструмент — появляется диалоговое окно:

  • Обработка: Выбираем Скопировать результат в другое место (Copy to another location).
  • Исходный диапазон (List range): Выбираем диапазон с данными(в нашем случае это А1:А51).
  • Диапазон критериев (Criteria range): в данном случае оставляем пустым.
  • Поместить результат в диапазон (Copy to): указываем первую ячейку для вывода данных — любую пустую(на картинке — E2).
  • Ставим галочку Только уникальные записи (Unique records only).
  • Жмем Ок.

Примечание: если вы хотите поместить результат на другой лист, то просто так указать другой лист не получится. Вы сможете указать ячейку на другом листе, но…Увы и ах…Excel выдаст сообщение, что не может скопировать данные на другие листы. Но и это можно обойти, причем довольно просто. Надо всего лишь запустить Расширенный фильтр с того листа, на который хотим поместить результат. А в качестве исходных данных выбираем данные с любого листа — это дозволено.

Так же можно не выносить результат в другие ячейки, а отфильтровать данные на месте. Данные от этого никак не пострадают — это будет обычная фильтрация данных.

Для этого надо просто в пункте Обработка выбрать Фильтровать список на месте (Filter the list, in-place).


Способ 2: Формулы

Этот способ сложнее в понимании для неопытных пользователей, но зато он создает список уникальных значений, не изменяя при этом исходные данные. Ну и он более динамичен: если изменить данные в исходной таблице, то изменится и результат. Иногда это бывает полезно. Попытаюсь объяснить на пальцах что и к чему: допустим, список с данными у Вас расположен в столбце

А

(

А1:А51

, где

А1

— заголовок). Выводить список мы будем в столбец

С

, начиная с ячейки

С2

. Формула в

C2

будет следующая:

{=ИНДЕКС($A$2:$A$51;НАИМЕНЬШИЙ(ЕСЛИ(СЧЁТЕСЛИ($C$1:C1;$A$2:$A$51)=0;СТРОКА($A$1:$A$50));1))}
{=INDEX($A$2:$A$51;SMALL(IF(COUNTIF($C$1:C1;$A$2:$A$51)=0;ROW($A$1:$A$50));1))}
Детальный разбор работы данной формулы приведен в статье: Как просмотреть этапы вычисления формул

Надо отметить, что эта формула является формулой массива. Об этом могут сказать фигурные скобки, в которые заключена данная формула. А вводится такая формула в ячейку сочетанием клавиш —

Ctrl

+

Shift

+

Enter

(при этом сами скобки вводить не надо — они появятся сами после ввода формулы тремя клавишами

Ctrl

+

Shift

+

Enter

). После того, как мы ввели эту формулу в

C2

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

#ЧИСЛО!(#NUM!)

— это значит все элементы отображены и ниже протягивать формулу нет смысла. Чтобы ошибку избежать и сделать формулу более универсальной(не протягивая каждый раз до появления ошибки) можно использовать нехитрую проверку:

для Excel 2007 и выше:
{=ЕСЛИОШИБКА(ИНДЕКС($A$2:$A$51;НАИМЕНЬШИЙ(ЕСЛИ(СЧЁТЕСЛИ($C$1:C1;$A$2:$A$51)=0;СТРОКА($A$1:$A$50));1));»»)}
{=IFERROR(INDEX($A$2:$A$51;SMALL(IF(COUNTIF($C$1:C1;$A$2:$A$51)=0;ROW($A$1:$A$50));1));»»)}
для Excel 2003:
{=ЕСЛИ(ЕОШ(НАИМЕНЬШИЙ(ЕСЛИ(СЧЁТЕСЛИ($C$1:C1;$A$2:$A$51)=0;СТРОКА($A$1:$A$50));1));»»;ИНДЕКС($A$2:$A$51;НАИМЕНЬШИЙ(ЕСЛИ(СЧЁТЕСЛИ($C$1:C1;$A$2:$A$51)=0;СТРОКА($A$1:$A$50));1)))}
{=IF(ISERR(SMALL(IF(COUNTIF($C$1:C1;$A$2:$A$51)=0;ROW($A$1:$A$50));1));»»;INDEX($A$2:$A$51;SMALL(IF(COUNTIF($C$1:C1;$A$2:$A$51)=0;ROW($A$1:$A$50));1)))}

Тогда вместо ошибки 

#ЧИСЛО!(#NUM!)

у вас будут пустые ячейки(не совсем пустые, конечно — с формулами :-)).
Чуть подробнее про отличия и нюансы формул ЕСЛИОШИБКА и ЕСЛИ(ЕОШ можно прочесть в этой статье: Как в ячейке с формулой вместо ошибки показать 0


Для пользователей Excel 2021 выше, а так же пользователей Excel 365(с активной подпиской) — использовать формулы для извлечения уникальных элементов проще простого. В этих версиях появилась функция

УНИК(UNIQUE)

, которая как раз получает список уникальных значений на основании переданного диапазона:

=УНИК($A$2:$A$51)
=UNIQUE($A$2:$A$51)

Что самое важное в данном случае — это функция динамического массива и вводить её надо только в одну ячейку C2, а результат она поместит сама в нужное количество ячеек.


Способ 3: код VBA

Данный подход потребует разрешения макросов и базовых знаний о работе с ними. Если не уверены в своих знаниях для начала рекомендую прочитать эти статьи:

  • Что такое макрос и где его искать? к статье приложен видеоурок
  • Что такое модуль? Какие бывают модули? потребуется, чтобы понять куда вставлять приведенные ниже коды

Оба приведенных ниже кода следует помещать в стандартный модуль. Макросы должны быть разрешены.

Исходные данные оставим в том же порядке — список с данными расположен в столбце «А«(А1:А51, где А1 — заголовок). Только выводить список мы будем не в столбец С, а в столбец Е, начиная с ячейки Е2:

Sub Extract_Unique()
    Dim vItem, avArr, li As Long
    ReDim avArr(1 To Rows.Count, 1 To 1)
    With New Collection
        On Error Resume Next
        For Each vItem In Range("A2", Cells(Rows.Count, 1).End(xlUp)).Value
            'Cells(Rows.Count, 1).End(xlUp) – определяет последнюю заполненную ячейку в столбце А
            .Add vItem, CStr(vItem)
            If Err = 0 Then
                li = li + 1: avArr(li, 1) = vItem
            Else: Err.Clear
            End If
        Next
    End With
    If li Then [E2].Resize(li).Value = avArr
End Sub

С помощью данного кода можно извлечь уникальные не только из одного столбца, но и из любого диапазона столбцов и строк. Если вместо строки
Range(«A2», Cells(Rows.Count, 1).End(xlUp)).Value
указать Selection.Value, то результатом работы кода будет список уникальных элементов из выделенного на активном листе диапазона. Только тогда неплохо бы и ячейку вывода значений изменить — вместо [E2] поставить ту, в которой данных нет.
Так же можно указать конкретный диапазон:

Или другой столбец:

Range("C2", Cells(Rows.Count, 3).End(xlUp)).Value

здесь отдельно стоит обратить внимание то, что в данном случае помимо изменения А2 на С2 изменилась и цифра 1 на 3. Это указание на номер столбца, в котором необходимо определить последнюю заполненную ячейку, чтобы код не просматривал лишние ячейки. Подробнее про это можно прочитать в статье: Как определить последнюю ячейку на листе через VBA?

Универсальный код выбора уникальных значений
Код ниже можно применять для любых диапазонов. Достаточно запустить его, указать диапазон со значениями для отбора только неповторяющихся(допускается выделение более одного столбца) и ячейку для вывода результата. Указанные ячейки будут просмотрены, из них будут отобраны только уникальные значения(пустые ячейки при этом пропускаются) и результирующий список будет записан, начиная с указанной ячейки.

Sub Extract_Unique()
    Dim x, avArr, li As Long
    Dim avVals
    Dim rVals As Range, rResultCell As Range
 
    On Error Resume Next
    'запрашиваем адрес ячеек для выбора уникальных значений
    Set rVals = Application.InputBox("Укажите диапазон ячеек для выборки уникальных значений", "Запрос данных", "A2:A51", Type:=8)
    If rVals Is Nothing Then 'если нажата кнопка Отмена
        Exit Sub
    End If
    'если указана только одна ячейка - нет смысла выбирать
    If rVals.Count = 1 Then
        MsgBox "Для отбора уникальных значений требуется указать более одной ячейки", vbInformation, "www.excel-vba.ru"
        Exit Sub
    End If
    'отсекаем пустые строки и столбцы вне рабочего диапазона
    Set rVals = Intersect(rVals, rVals.Parent.UsedRange)
    'если указаны только пустые ячейки вне рабочего диапазона
    If rVals Is Nothing Then
        MsgBox "Недостаточно данных для выбора значений", vbInformation, "www.excel-vba.ru"
        Exit Sub
    End If
    avVals = rVals.Value
    'запрашиваем ячейку для вывода результата
    Set rResultCell = Application.InputBox("Укажите ячейку для вставки отобранных уникальных значений", "Запрос данных", "E2", Type:=8)
    If rResultCell Is Nothing Then 'если нажата кнопка Отмена
        Exit Sub
    End If
    'определяем максимально возможную размерность массива для результата
    ReDim avArr(1 To Rows.Count, 1 To 1)
    'при помощи объекта Коллекции(Collection)
    'отбираем только уникальные записи,
    'т.к. Коллекции не могут содержать повторяющиеся значения
    With New Collection
        On Error Resume Next
        For Each x In avVals
            If Len(CStr(x)) Then 'пропускаем пустые ячейки
                .Add x, CStr(x) 'если добавляемый элемент уже есть в Коллекции - возникнет ошибка
                'если же ошибки нет - такое значение еще не внесено,
                'добавляем в результирующий массив
                If Err = 0 Then
                    li = li + 1
                    avArr(li, 1) = x
                Else
                    'обязательно очищаем объект Ошибки
                    Err.Clear
                End If
            End If
        Next
    End With
    'записываем результат на лист, начиная с указанной ячейки
    If li Then rResultCell.Cells(1, 1).Resize(li).Value = avArr
End Sub

Способ 4: Сводные таблицы

Несколько нестандартный способ извлечения уникальных значений.

  • Выделяем один или несколько столбцов в таблице, переходим на вкладку Вставка(Insert) -группа Таблица(Table)Сводная таблица(PivotTable)
  • В диалоговом окне Создание сводной таблицы(Create PivotTable) проверяем правильность выделения диапазона данных (или установить новый источник данных)
  • указываем место размещения Сводной таблицы:
    • На новый лист (New Worksheet)
    • На существующий лист (Existing Worksheet)
  • подтверждаем создание нажатием кнопки OK

Т.к. сводные таблицы при обработке данных, которые помещаются в область строк или столбцов, отбирают из них только уникальные значения для последующего анализа, то от нас ровным счетом ничего не требуется, кроме как создать сводную таблицу и поместить в область строк или столбцов данные нужного столбца.
На примере приложенного к статье файла я:

  • выделил диапазон A1:B51 на листе Извлечение по критерию
  • вызвал меню вставки сводной таблицы: вкладка Вставка(Insert) -группа Таблица(Table)Сводная таблица(PivotTable)
    выбрал вставить на новый лист(New Worksheet)
  • назвал этот лист Уникальные сводной таблицей
  • поле Данные поместил в область строк
  • поле ФИО в область фильтра. Почему? Чтобы удобно было выбирать одно или несколько ФИО и в сводной отображался бы список уникальных месяцев только для выбранных фамилий
    Отбор уникальных сводной таблицей

В чем неудобство работы со сводными в данном случае: при изменении в исходных данных сводную таблицу придется обновлять вручную: Выделить любую ячейку сводной таблицы -Правая кнопка мыши —Обновить(Refresh) или вкладка Данные(Data)Обновить все(Refresh all)Обновить(Refresh). А если исходные данные пополняются динамически и того хуже — надо будет заново указывать диапазон исходных данных. И еще один минус — данные внутри сводной таблицы нельзя менять. Поэтому если с полученным списком необходимо будет работать в дальнейшем, то после создания нужного списка при помощи сводной его надо скопировать и вставить на нужный лист.

Чтобы лучше понимать все действия и научиться обращаться со сводными таблицами настоятельно рекомендую ознакомиться со статьей Общие сведения о сводных таблицах — к ней приложен видеоурок, в котором я наглядно демонстрирую простоту и удобство работы с основными возможностями сводных таблиц.


В приложенном примере помимо описанных приемов, записана чуть более сложная вариация извлечения уникальных элементов формулой и кодом, а именно: извлечение уникальных элементов по критерию. О чем речь: если в одном столбце фамилии, а во втором(В) некие данные(в файле это месяцы) и требуется извлечь уникальные значения столбца В только для выбранной фамилии. Примеры подобных извлечений уникальных расположены на листе Извлечение по критерию.

Скачать пример:

  Tips_All_ExtractUnique.xls (108,0 KiB, 18 432 скачиваний)

Также см.:
Работа с дубликатами
Как подсчитать количество повторений
Общие сведения о сводных таблицах


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

Уникальный идентификатор списка

Пусть у нас есть какой-либо список, к примеру фамилий, и мы хотим каждому элементу присвоить уникальный номер.

Сделать это можно следующим образом.

Первому элементу присваиваем номер 1.

Для второго и последующих составляем формулу пользуясь таким алгоритмом: если элемент встречается в списке первый раз, то присваиваем ему очередной номер, если это не первое появление, то у него идентификатор уже есть в списке выше.

Чтобы проверить первое ли это появление элемента используем комбинацию функций ЕНД(ПОИСКПОЗ()).

Если это первое появление, то ПОИСКПОЗ() вернет #Н/Д, а функция ЕНД(#Н/Д) вернет ИСТИНА и мы смело присваиваем элементу номер МАКС() среди верхних идентификаторов плюс 1.

Если это не первое появление, то ЕНД(ПОИСКПОЗ()) возвращает ЛОЖЬ и мы через функцию ВПР() находим уже имеющийся у элемента идентификатор.

В конечном итоге получаем такую формулу (для второго элемента):
=ЕСЛИ(ЕНД(ПОИСКПОЗ(C3;C$2:C2;0));МАКС(D$2:D2)+1;ВПР(C3;C$2:D2;2;ЛОЖЬ))

Дальше просто копируем эту формулу.

Похожие по тематике посты — еще почитать:

Skip to content

Как получить список уникальных значений

В статье описано, как получить список уникальных значений в столбце с помощью формулы и как настроить эту формулу для различных наборов данных. Вы также узнаете, как быстро получить отдельный список с помощью расширенного фильтра Excel и как извлечь уникальные записи с помощью Duplicate Remover.

В нескольких недавних статьях мы обсудили различные методы подсчета и поиска уникальных значений в Excel. Если у вас была возможность прочитать эти руководства, вы уже знаете, как получить этот список при помощи идентификации, фильтрации и копирования. Но это немного длинный и далеко не единственный способ извлечения уникальных значений в Excel. Вы можете сделать это намного быстрее, используя специальную формулу. И сейчас я покажу вам этот и несколько других приёмов.

  • Формулы для уникальных значений в столбце.
  • Как извлечь уникальные + 1е вхождение дубликатов.
  • Если нужно игнорировать пустые ячейки.
  • Выбираем уникальные с учетом регистра.
  • Отбор уникальных значений по условию.
  • Как извлечь уникальные значения из диапазона.
  • Применяем встроенный инструмент удаления дубликатов.
  • Список уникальных при помощи расширенного фильтра.
  • Извлечение уникальных данных при помощи Duplicate Remover.

Базовые формулы для получения уникальных значений.

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

Уникальные значения — это значения, которые присутствуют в списке только один раз. Например:

Чтобы получить список уникальных значений в Excel, используйте одну из следующих формул.

Формула уникальных значений массива (заполняется нажатием Ctrl + Shift + Enter):

=ЕСЛИОШИБКА(ИНДЕКС($A$2:$A$10; ПОИСКПОЗ(0; СЧЁТЕСЛИ($B$1:B1;$A$2:$A$10) + (СЧЁТЕСЛИ($A$2:$A$10; $A$2:$A$10)<>1); 0)); «»)

Можно воспользоваться и обычной формулой (вводится нажатием Enter):

=ЕСЛИОШИБКА(ИНДЕКС($A$2:$A$10; ПОИСКПОЗ(0;ИНДЕКС(СЧЁТЕСЛИ($B$1:B1; $A$2:$A$10) + (СЧЁТЕСЛИ($A$2:$A$10; $A$2:$A$10)<>1);0;0); 0)); «»)

В приведенных выше формулах используются следующие ссылки:

  • A2: A10 – исходных перечень данных.
  • B1 — верхняя ячейка уникального списка минус одна строка. В этом примере мы начинаем создавать список уникальных в B2, и поэтому мы записываем B1 в формулу (B2 — 1 строка = B1). Если ваш список начинается, скажем, с ячейки C3, измените $B$1:B1 на $C$2:C2.

В этом примере мы извлекаем уникальные имена из столбца A (точнее из диапазона A2: A10), а следующий скриншот демонстрирует формулу в действии:

Вот наш порядок действий:

  • Измените любую из формул в соответствии с вашим диапазоном данных.
  • Введите ее в первую ячейку, с которой начнётся формирование списка (в данном примере B2).
  • Если вы используете формулу массива, нажмите Ctrl + Shift + Enter. Если вы выбрали обычную, нажмите просто клавишу Enter.
  • Скопируйте вниз настолько, насколько это необходимо, перетащив мышкой маркер заполнения. Поскольку обе формулы заключены в функцию ЕСЛИОШИБКА, вы можете скопировать вниз с запасом. Это не испортит ваши данные какими-либо ошибками, независимо от того, сколько уникальных значений было извлечено.

Как извлечь различные значения.

Различные значения — появляются в перечне данных хотя бы один раз. Это все уникальные и первое вхождение повторяющихся значений.

Например:

Чтобы получить их список в Excel, используйте следующие формулы.

Формула массива (требуется нажать Ctrl + Shift + Enter):

{=ЕСЛИОШИБКА(ИНДЕКС($A$2:$A$13; ПОИСКПОЗ(0; СЧЁТЕСЛИ($B$1:B1; $A$2:$A$13); 0)); «»)}

или можно так:

{=ЕСЛИОШИБКА(ИНДЕКС($A$2:$A$13; НАИМЕНЬШИЙ(ЕСЛИ(ЕНД(ПОИСКПОЗ($A$2:$A$13;$B$1:B1;0)); СТРОКА($A$1:$A$15);»»);1));»»)}

Обычная  формула:

=ЕСЛИОШИБКА(ИНДЕКС($A$2:$A$13; ПОИСКПОЗ(0; ИНДЕКС(СЧЁТЕСЛИ($B$1:B1; $A$2:$A$13); 0; 0); 0)); «»)

Где:

  • A2: A13 — это список источников.
  • B1 — это ячейка над первой ячейкой отдельного списка. В этом примере отдельный список начинается с ячейки B2 (это первая ячейка, в которую вы вводите формулу), поэтому вы ссылаетесь на B1.

Как извлечь значения, игнорируя пустые ячейки

Если исходный список содержит пустые ячейки, формула, которую мы только что обсудили, вернет ноль для каждой пустой строки, что может быть проблемой. Это вы и наблюдаете на скриншоте чуть выше. Чтобы исправить это, сделаем несколько небольших корректировок.

Формула массива для извлечения различных значений, исключая пустые ячейки:

{=ЕСЛИОШИБКА(ИНДЕКС($A$2:$A$13; ПОИСКПОЗ(0;СЧЁТЕСЛИ($C$1:C1;$A$2:$A$13&»») + ЕСЛИ($A$2:$A$13=»»;1;0); 0)); «»)}

Аналогичным образом вы можете получить список различных значений, исключая пустые ячейки и ячейки с числами:

{=ЕСЛИОШИБКА(ИНДЕКС($A$2:$A$13; ПОИСКПОЗ(0;СЧЁТЕСЛИ($D$1:D1;$A$2:$A$13&»») + ЕСЛИ(ЕТЕКСТ($A$2:$A$13)=ЛОЖЬ;1;0); 0)); «»)}

Напоминаем, что в приведенных выше формулах A2: A13 – это исходный список, а B1 – ячейка прямо над первой позицией формируемого списка.

На этом скриншоте показан результат отбора:

Быть может, кому-то будет полезна еще одна формула –

=ЕСЛИОШИБКА(ИНДЕКС($A$2:$A$13; АГРЕГАТ(15;6;(СТРОКА($A$2:$A$13)-СТРОКА($A$2)+1) / (ПОИСКПОЗ($A$2:$A$13;$A$2:$A$13;0)=СТРОКА($A$2:$A$13)-СТРОКА($A$2)+1); ЧСТРОК($A$2:$A2)));»»)

Она работает с числами и текстом, игнорирует пустые ячейки.

Как извлечь отдельные значения с учетом регистра в Excel

При работе с данными, чувствительными к регистру, такими как пароли, имена пользователей или имена файлов, вам может потребоваться список отдельных значений с учетом заглавных и прописных букв. 

Для этого используйте формулу массива, где A2: A10 — это исходный список, а B1 — это ячейка над первой ячейкой отдельного списка.

Формула массива для получения различных значений с учетом регистра (требуется нажатие Ctrl + Shift + Enter)

{=ЕСЛИОШИБКА(ИНДЕКС($A$2:$A$10; ПОИСКПОЗ(0; ЧАСТОТА(ЕСЛИ(СОВПАД($A$2:$A$10; ТРАНСП($B$1:B1)); ПОИСКПОЗ(СТРОКА($A$2:$A$10); СТРОКА($A$2:$A$10)); «»); ПОИСКПОЗ(СТРОКА($A$2:$A$10); СТРОКА($A$2:$A$10))); 0)); «»)}

Как видите, при отборе регистр здесь имеет значение.

Отбор уникальных значений по условию.

Представим, что у нас есть таблица с данными о продажах. Нам необходимо определить, какие наименования товаров заказывал определенный покупатель.

Сначала отберем из таблицы только те строки, которые удовлетворяют заданным условиям, затем из этих строк выберем уникальные наименования товаров.

В ячейке G2 указываем нужного нам заказчика, а в H2 записываем эту формулу массива:

{=ЕСЛИОШИБКА(ИНДЕКС($B$2:$B$20; ПОИСКПОЗ(0;ЕСЛИ((($A$2:$A$20=$G$2)); СЧЁТЕСЛИ($H$1:H1;$B$2:$B$20);»»);0));»»)}

Не забудьте, что формулу массива нужно вводить в ячейку EXCEL с помощью одновременного нажатия CTRL+SHIFT+ENTER. Копируем ее по столбцу вниз при помощи маркера заполнения. Получаем список из четырех позиций.

Усложним задачу. Определим список не только для этого покупателя, но также и для определённого менеджера.

Вот наша формула массива:

{=ЕСЛИОШИБКА(ИНДЕКС($B$2:$B$20;ПОИСКПОЗ(0; ЕСЛИ((($A$2:$A$20=$G$2)+($D$2:$D$20=$H$2))=2; СЧЁТЕСЛИ($I$1:I1;$B$2:$B$20);»»);0));»»)}

Как видите, теперь товаров всего два. В подсчете принимают участие только те строки, которые удовлетворяют сразу двум условиям: должно совпасть название фирмы и фамилия менеджера. Только из них мы извлекаем уникальные названия товаров.

В случае, если условий будет больше, нужно просто добавить соответствующий критерий в функцию ЕСЛИ и изменить число 2 на 3 или большее (в зависимости от количества условий).

Извлечь уникальные значения из диапазона.

Формулы, которые мы описывали выше, позволяют сформировать список значений из данных определенного столбца. Но часто речь идет о нескольких столбцах, то есть о диапазоне данных. К примеру, вы получили несколько списков товаров из различных файлов и расположили их в соседних столбцах.

Используем формулу массива

{=ДВССЫЛ(ТЕКСТ(МИН(ЕСЛИ(($A$2:$C$9<>»») * (СЧЁТЕСЛИ($E$1:E1;$A$2:$C$9)=0); СТРОКА($2:$9)*100 + СТОЛБЕЦ($A:$C);7^8));»R0C00″);)&»»}

Здесь A2:C9 обозначает диапазон, из которого вы хотите извлечь уникальные значения. E1 – это первая ячейка столбца, в который вы хотите поместить результат. $2:$9 указывает на строки, содержащие данные, которые вы хотите использовать. $A:$C указывает на столбцы, из которых вы берёте исходные данные. Пожалуйста, измените их на свои собственные.

Нажмите Shift + Ctrl + Enter , а затем перетащите маркер заполнения, чтобы вывести уникальные значения, пока не появятся пустые ячейки.

Как видите, извлекаются все уникальные и первые вхождения дубликатов.

Встроенный инструмент удаления дубликатов.

Начиная с Excel 2007 функция удаления дубликатов является стандартной. Найти ее можно на вкладке  Данные > Удаление дубликатов.

Вам нужно при помощи птички указать столбцы, в которых нужно найти и удалить повторяющиеся значения. Если сделать так, как на скриншоте, то в таблице останутся только уникальные пары «Заказчик – Товар». Остальное будет удалено. Если включить только флажок «Заказчик», то останется только по одной строке для каждого заказчика и т.д.

Использование расширенного фильтра.

Если вы не хотите тратить время на выяснение загадочных поворотов формул, вы можете быстро получить список уникальных значений с помощью расширенного фильтра. Подробные инструкции приведены ниже.

  1. Выберите столбец данных, из которого вы хотите извлечь отдельные значения.
  2. Перейдите на вкладку «Данные» > группа «Сортировка и фильтр» и нажмите кнопку «Дополнительно» .
  3. В диалоговом окне Расширенный фильтр выберите следующие параметры:
    • Установите флажок Копировать в другое место .
    • В поле Исходный диапазон убедитесь, что он указан правильно.
    • В параметре Поместить результат в…   укажите самую верхнюю ячейку целевого диапазона. Помните, что вы можете копировать отфильтрованные данные только на текущий лист.
    • Выберите пункт «Только уникальные записи».
  4. Наконец, нажмите кнопку ОК и проверьте результат.

Как видите, мы проверили колонку B, и затем список уникальных наименований товара, найденных в ней, поместили в столбец K.

Обратите внимание, что хотя опция расширенного фильтра называется «Только уникальные записи», она извлекает различные значения, то есть уникальные и первые вхождения повторяющихся.

Теперь немного усложним задачу.

Если требуется искать записи не по одному, а по нескольким столбцам, то можно их предварительно «склеить» при помощи функции СЦЕПИТЬ.

=СЦЕПИТЬ(A2;B2)

Записываем это в столбец F и копируем вниз. Получаем вспомогательную колонку.

В качестве исходного диапазона мы по-прежнему выбираем данные, из которых извлекаем уникальные значения. Теперь это два столбца – A и B.

Но искать уникальные мы по-прежнему можем только в одном столбце. Вот для этого нам и пригодится вспомогательная колонка F с объединенными данными. Ее то мы и указываем в поле «Диапазон условий».

Все остальное – так же, как и в предыдущем примере.

В результате мы получили все имеющиеся в таблице комбинации «Заказчик — Товар» на основе данных во вспомогательном столбце F.

Думаю, вы понимаете, что аналогичные действия можно произвести и с тремя столбцами (например Фамилия – Имя – Отчество). Главное условие – исходный диапазон должен быть непрерывным, то есть все столбцы должны находиться рядом.

Как видите формулы здесь не нужны. Однако, если исходные данные изменятся, то все манипуляции придется повторять заново.

Извлечение уникальных значений с помощью Duplicate Remover.

В заключительной части этого руководства я покажу вам интересное решение для поиска и извлечения различных и уникальных значений в таблицах Excel. Это решение сочетает в себе универсальность формул Excel и простоту расширенного фильтра. Кроме того, здесь есть несколько уникальных функций:

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

А теперь давайте посмотрим, как работает инструмент Duplicate Remover.

Предположим, у вас есть большая таблица, созданная путем объединения данных из нескольких других таблиц. Очевидно, что она содержит много повторяющихся строк, и ваша задача состоит в том, чтобы извлечь уникальные строки, которые появляются в таблице только один раз, или различные строки, включая уникальные и первые повторяющиеся вхождения. В любом случае, с надстройкой Duplicate Remover работа выполняется за несколько шагов.

  1. Выберите любую ячейку в исходной таблице и нажмите кнопку DuplicateRemover на вкладке AblebitsData в группе Dedupe.

Мастер Duplicate Remover запустится и выберет всю таблицу. Итак, просто нажмите « Далее», чтобы перейти к следующему шагу.

  1. Выберите тип значения, который вы хотите найти, и нажмите Далее :
    • Уникальные
    • Уникальные + 1е вхождения (различные)
В этом примере мы хотим извлечь различные строки, которые появляются в исходной таблице хотя бы один раз, поэтому мы выбираем опцию Unique + 1st occurences:

  1. Выберите один или несколько столбцов для проверки уникальных значений.

В этом примере мы хотим убрать все повторяющиеся значения на основе значений в 2 столбцах ( заказчик и товар), поэтому мы выбираем только нужные нам столбцы.

В нашем случае таблица имеет заголовок, поэтому отмечаем птичкой пункт My table has headers.

Думаю, нам не нужны пустые строки, которые могут случайно встретиться при объединении данных из разных таблиц. Поэтому отмечаем такжеSkip empty cells.

Если вдруг в наших записях случайно появились лишние пробелы, то, думаю, стоит их игнорировать. Поэтому отмечаем также Ignore extra spaces.

Также наш поиск буден нечувствителен к регистру, то есть не будем при сравнении данных различать прописные и строчные буквы. Поэтому  не трогаем опцию Case-sensitive match.

  1. Выберите действие, которое нужно выполнить с найденными значениями. Вам доступны следующие варианты:
    • Выделить цветом.
    • Выбрать и выделить.
    • Отметить в столбце статуса.
    • Копировать в другое место.

Чтобы не менять исходные данные, выберите «Копировать в другое место» (Copy to another location), а затем укажите, где именно вы хотите видеть новую таблицу – на этом же листе (выберите параметр «Custom Location» и укажите верхнюю ячейку целевого диапазона), на новом листе (New worksheet) или в новой книге (New workbook).

В этом примере давайте выберем новый лист:

  1. Нажмите кнопку « Готово» , и все готово!

В итоге у нас осталось всего 20 записей.

Понравился этот быстрый и простой способ получить список уникальных значений или записей в Excel? Если да, то я рекомендую вам загрузить полнофункциональную ознакомительную версию Ultimate Suite и попробовать в работе Duplicate Remover.

В Ultimate Suite for Excel также включено много других полезных инструментов, которые помогут вам сэкономить много времени. Мы о них также будем подробно рассказывать в других материалах на сайте.

Обновлено Обновлено: 01.11.2017
Опубликовано Опубликовано: 02.09.2016

Инструкция применима к ситуации, когда нужно создать большое количество паролей. Для этого подойдет офисная программа MS Excel.

Простые числовые пароли

Запускаем Excel и выделяем первую ячейку. В строку формул вставляем формулу генерации случайных чисел: =СЛУЧМЕЖДУ(10000;99999) и нажимаем Enter.

Вставка формулы в Excel для генерации случайных чисел

* в данном примере мы сгенерируем пароль из 5 цифр. Если нужен пароль из 6 цифр, увеличиваем минимальный диапазон на один 0 и максимальный на одну 9.

Теперь выделяем ячейку с паролем и копируем ее комбинацией клавиш Ctrl + C.

Копируем сгенерированное число

После чего выделяем несколько ячеек вниз

Выделяем несколько ячеек в Excel

и нажимаем Ctrl + V.

Вставляем формулу для создания числовых паролей в скопированные ячейки

Сложные пароли

Процесс аналогичен, описанному выше, за исключением самой формулы.

Для формирования одного символа используем =СИМВОЛ(СЛУЧМЕЖДУ(33;126)). Чтобы сгенерировать пароль из 5 символов, необходимо выполнить конкатенацию (объединение) результатов работы формулы 5 раз. Для этого служит символ &:

=СИМВОЛ(СЛУЧМЕЖДУ(33;126))&СИМВОЛ(СЛУЧМЕЖДУ(33;126))&СИМВОЛ(СЛУЧМЕЖДУ(33;126))&СИМВОЛ(СЛУЧМЕЖДУ(33;126))&СИМВОЛ(СЛУЧМЕЖДУ(33;126))

Пример:

Генерация сложного пароля в Excel

Другие генераторы паролей

Также, для формирования паролей можно использовать другие инструменты:

  1. Генераторы онлайн, например, сайт www.onlinepasswordgenerator.ru.
  2. Установленные на компьютер программы, например, Password Generator.
  3. Порталы, например, TeamPass.

Дмитрий Моск — частный мастер

Была ли полезна вам эта инструкция?

Да            Нет

Понравилась статья? Поделить с друзьями:
  • Как умножить ячейки в word
  • Как умножить числа в одной ячейке в excel
  • Как умножить часы на рубли в excel
  • Как умножить часы на деньги excel
  • Как умножить цифры в столбце в excel