Формулиране на проблема
Да приемем, че трябва да създадем набор от цели числа произволни числа без повторения в даден диапазон от стойности. Примери в движение:
- генериране на уникални случайни кодове за продукти или потребители
- възлагане на хора на задачи (всеки произволен от списъка)
- пермутация на думи в заявката за търсене (здравей seo-shnikam)
- игра на тото и др.
Метод 1. Прост
Като начало, нека разгледаме една проста опция: трябва да получим случаен набор от 10 цели числа от 1 до 10. Използване на функцията, вградена в Excel МЕЖДУ СЛУЧАЯ (РАБ МЕЖДУ) уникалността не е гарантирана. Ако го въведете в клетка на лист и го копирате надолу 10 клетки, тогава лесно могат да се случат повторения:
Затова ще тръгнем по обратния път.
Всички версии на Excel имат функция RANK (ЗВЪННА), предназначени за класиране или с други думи определяне на горна позиция на число в набор. Най-големият номер в списъка е с ранг=1, вторият отгоре е с ранг=2 и т.н.
Нека въведем функцията в клетка A2 СЛЧИС (РАНД) без аргументи и копирайте формулата 10 клетки надолу. Тази функция ще ни генерира набор от 10 произволни дробни числа от 0 до 1:
В следващата колона представяме функцията RANKза определяне на позицията в класирането за всяко получено произволно число:
Получаваме в колона B това, което искахме – произволен брой неповтарящи се случайни цели числа от 1 до 10.
Чисто теоретично може да възникне ситуация, когато СЛЧИС ще ни даде две еднакви произволни числа в колона A, ранговете им ще съвпаднат и ще получим повторение в колона B. Вероятността за такъв сценарий обаче е изключително малка, предвид факта, че точността е 15 знака след десетичната запетая.
Метод 2. Сложен
Този метод е малко по-сложен, но използва само една формула за масив. Да кажем, че трябва да създадем списък от 9 неповтарящи се случайни цели числа в диапазона от 1 до 50 на лист.
Въведете следната формула в клетка A2, щракнете в края Ctrl + Shift + Enter (за да го въведете като формула за масив!) и копирайте формулата до желания брой клетки:
Метод 3. Макро
И, разбира се, можете да разрешите проблема с помощта на програмиране на Visual Basic. В една от старите статии за произволна извадка вече цитирах макро функцията Lotto array, която произвежда необходимия брой произволни неповтарящи се числа от даден интервал.
- Как да преброим броя на уникалните стойности в диапазон
- Произволен избор на елементи от списък