Ребята всем доброго времени суток. Подскажите пожалуйста как создать функцию СЛУЧМЕЖДУ.... Так что-бы из числового диапазона выстраивался порядок из чисел. Например: 12 | 42 | 87 | 65 При этом если в данной стоке в ячейке используется тоже число оно заменялось так что-бы не было повтора. [moder]Читаем правила форума. Прикладываем свой пример в Excel
Ребята всем доброго времени суток. Подскажите пожалуйста как создать функцию СЛУЧМЕЖДУ.... Так что-бы из числового диапазона выстраивался порядок из чисел. Например: 12 | 42 | 87 | 65 При этом если в данной стоке в ячейке используется тоже число оно заменялось так что-бы не было повтора. [moder]Читаем правила форума. Прикладываем свой пример в ExcelВладимир
Автору скорее всего уже не актуально, делаю только из спортивного интереса.
Макрос, позволяющий получить случайное распределение уникальных чисел. Вдохновлено этой темой.
Макрос спрашивает, сколько надо уникальных значений и выводит первое случайное значение. Из оставшихся не использованных случайным образом выбирает следующее значение и так далее, пока нужное количество уникальных целых значений не будет предоставлено.
[vba]
Код
Sub Rio_Manager()
'Автор Роман "Rioran" Воронов от 09.06.2014, вдохновитель - www.excelworld.ru 'Макрос для случайного распределения уникальных чисел
Application.ScreenUpdating = False With ThisWorkbook.Sheets(1)
On Error GoTo Finish_Line
Dim bW As Long 'Для построения предварительной таблицы Dim bX As Long 'Для перебора результирующих ячеек Dim bY As Long 'Задача: сколько нужно строк? Dim bZ As Long 'Для исключения использованных значений
'Пользователь вводит, сколько ему надо уникальных значений bY = InputBox("Введите количество нужных цифр." & vbNewLine & vbNewLine & _ "Макрос сработает ТОЛЬКО в том случае, если введено положительное число. Это число будет округлено до целого.", "Ввод.") If Not IsNumeric(bY) Then Exit Sub
'Создаём вспомогательную таблицу For bW = 1 To bY .Cells(bW, 1).Value = bW .Cells(bW, 2).Value = bW .Cells(bW, 3).FormulaR1C1 = "=IFERROR(SMALL(R1C2:R" & bY & "C2,ROW()),"""")" Next bW
'Создаём уникальные случайные значения For bX = 1 To bY .Cells(bX, 4).FormulaR1C1 = "=VLOOKUP(randbetween(1, " & bY + 1 - bX & "),R1C1:R" & bY & "C3,3,0)" .Cells(bX, 4).Value = .Cells(bX, 4).Value For bZ = 1 To bY If .Cells(bZ, 2).Value = .Cells(bX, 4).Value Then .Cells(bZ, 2).Value = "" Exit For End If Next bZ Next bX
End With Application.ScreenUpdating = True End Sub
[/vba]
Автору скорее всего уже не актуально, делаю только из спортивного интереса.
Макрос, позволяющий получить случайное распределение уникальных чисел. Вдохновлено этой темой.
Макрос спрашивает, сколько надо уникальных значений и выводит первое случайное значение. Из оставшихся не использованных случайным образом выбирает следующее значение и так далее, пока нужное количество уникальных целых значений не будет предоставлено.
[vba]
Код
Sub Rio_Manager()
'Автор Роман "Rioran" Воронов от 09.06.2014, вдохновитель - www.excelworld.ru 'Макрос для случайного распределения уникальных чисел
Application.ScreenUpdating = False With ThisWorkbook.Sheets(1)
On Error GoTo Finish_Line
Dim bW As Long 'Для построения предварительной таблицы Dim bX As Long 'Для перебора результирующих ячеек Dim bY As Long 'Задача: сколько нужно строк? Dim bZ As Long 'Для исключения использованных значений
'Пользователь вводит, сколько ему надо уникальных значений bY = InputBox("Введите количество нужных цифр." & vbNewLine & vbNewLine & _ "Макрос сработает ТОЛЬКО в том случае, если введено положительное число. Это число будет округлено до целого.", "Ввод.") If Not IsNumeric(bY) Then Exit Sub
'Создаём вспомогательную таблицу For bW = 1 To bY .Cells(bW, 1).Value = bW .Cells(bW, 2).Value = bW .Cells(bW, 3).FormulaR1C1 = "=IFERROR(SMALL(R1C2:R" & bY & "C2,ROW()),"""")" Next bW
'Создаём уникальные случайные значения For bX = 1 To bY .Cells(bX, 4).FormulaR1C1 = "=VLOOKUP(randbetween(1, " & bY + 1 - bX & "),R1C1:R" & bY & "C3,3,0)" .Cells(bX, 4).Value = .Cells(bX, 4).Value For bZ = 1 To bY If .Cells(bZ, 2).Value = .Cells(bX, 4).Value Then .Cells(bZ, 2).Value = "" Exit For End If Next bZ Next bX
Объяснялка: 1. ПОИСКПОЗ(СТРОКА($1:$5);C$1:C3;) - ищем массив 1,2,3,4,5 в массиве (пусто),5,2, получаем массив НД,3,НД,НД,2 2. ЕОШИБКА(ПОИСКПОЗ(СТРОКА($1:$5);C$1:C3;)) дает массив ИСТИНА,ЛОЖЬ,ИСТИНА,ИСТИНА,ЛОЖЬ 3. СТРОКА($1:$5)*ЕОШИБКА(ПОИСКПОЗ(СТРОКА($1:$5);C$1:C3;)) дает массив 1,0,3,4,0 4. 5-СЧЁТ(C$1:C3)) = 3 - та же тройка, что и в п.3 5. СЛУЧМЕЖДУ(1;5-СЧЁТ(C$1:C3)) = СЛУЧМЕЖДУ(1;3) 6. НАИБОЛЬШИЙ(п.3;п.5) - в п.3 есть 3 числа и нули, в п.5 любое число от 1 до 3, следовательно, любое число из п.5 даст нам с помощью НАИБОЛЬШИЙ произвольное отличное от нуля число из п.3
Объяснялка: 1. ПОИСКПОЗ(СТРОКА($1:$5);C$1:C3;) - ищем массив 1,2,3,4,5 в массиве (пусто),5,2, получаем массив НД,3,НД,НД,2 2. ЕОШИБКА(ПОИСКПОЗ(СТРОКА($1:$5);C$1:C3;)) дает массив ИСТИНА,ЛОЖЬ,ИСТИНА,ИСТИНА,ЛОЖЬ 3. СТРОКА($1:$5)*ЕОШИБКА(ПОИСКПОЗ(СТРОКА($1:$5);C$1:C3;)) дает массив 1,0,3,4,0 4. 5-СЧЁТ(C$1:C3)) = 3 - та же тройка, что и в п.3 5. СЛУЧМЕЖДУ(1;5-СЧЁТ(C$1:C3)) = СЛУЧМЕЖДУ(1;3) 6. НАИБОЛЬШИЙ(п.3;п.5) - в п.3 есть 3 числа и нули, в п.5 любое число от 1 до 3, следовательно, любое число из п.5 даст нам с помощью НАИБОЛЬШИЙ произвольное отличное от нуля число из п.3_Boroda_
_Boroda_, в примере в каждую ячейку массив вводится отдельно. Как отличить, когда надо по одному вставлять, а когда можно "замассивить" целую толпу ячеек?
_Boroda_, в примере в каждую ячейку массив вводится отдельно. Как отличить, когда надо по одному вставлять, а когда можно "замассивить" целую толпу ячеек?Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279