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

Вход

Регистрация

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

 

= Мир MS Excel/Функция СЛУЧМЕЖДУ - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Функция СЛУЧМЕЖДУ
Владимир Дата: Четверг, 22.05.2014, 10:45 | Сообщение № 1
Группа: Гости
Ребята всем доброго времени суток.
Подскажите пожалуйста как создать функцию СЛУЧМЕЖДУ.... Так что-бы из числового диапазона выстраивался порядок из чисел.
Например: 12 | 42 | 87 | 65 При этом если в данной стоке в ячейке используется тоже число оно заменялось так что-бы не было повтора.
[moder]Читаем правила форума. Прикладываем свой пример в Excel
 
Ответить
СообщениеРебята всем доброго времени суток.
Подскажите пожалуйста как создать функцию СЛУЧМЕЖДУ.... Так что-бы из числового диапазона выстраивался порядок из чисел.
Например: 12 | 42 | 87 | 65 При этом если в данной стоке в ячейке используется тоже число оно заменялось так что-бы не было повтора.
[moder]Читаем правила форума. Прикладываем свой пример в Excel

Автор - Владимир
Дата добавления - 22.05.2014 в 10:45
Rioran Дата: Понедельник, 09.06.2014, 18:26 | Сообщение № 2
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
Автору скорее всего уже не актуально, делаю только из спортивного интереса.

Макрос, позволяющий получить случайное распределение уникальных чисел. Вдохновлено этой темой.

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

[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

'Удаляем вспомогательные колонки
.Columns("A:C").Delete Shift:=xlToLeft

Finish_Line:

End With
Application.ScreenUpdating = True
End Sub
[/vba]
К сообщению приложен файл: Distinctly_Rand.xlsm (16.2 Kb)


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279


Сообщение отредактировал Rioran - Понедельник, 09.06.2014, 18:27
 
Ответить
СообщениеАвтору скорее всего уже не актуально, делаю только из спортивного интереса.

Макрос, позволяющий получить случайное распределение уникальных чисел. Вдохновлено этой темой.

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

[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

'Удаляем вспомогательные колонки
.Columns("A:C").Delete Shift:=xlToLeft

Finish_Line:

End With
Application.ScreenUpdating = True
End Sub
[/vba]

Автор - Rioran
Дата добавления - 09.06.2014 в 18:26
_Boroda_ Дата: Вторник, 10.06.2014, 15:13 | Сообщение № 3
Группа: Админы
Ранг: Местный житель
Сообщений: 16912
Репутация: 6616 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Формулой на примере диапазона 50:150
К сообщению приложен файл: 2212217_1.xls (48.0 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеФормулой на примере диапазона 50:150

Автор - _Boroda_
Дата добавления - 10.06.2014 в 15:13
Rioran Дата: Вторник, 10.06.2014, 19:45 | Сообщение № 4
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
_Boroda_, я полагаю, 150 - 50 вместо 100 написано для наглядности?

Разбери, пожалуйста, как формула работает, не могу охватить картину в целом.


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
Сообщение_Boroda_, я полагаю, 150 - 50 вместо 100 написано для наглядности?

Разбери, пожалуйста, как формула работает, не могу охватить картину в целом.

Автор - Rioran
Дата добавления - 10.06.2014 в 19:45
_Boroda_ Дата: Вторник, 10.06.2014, 20:08 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 16912
Репутация: 6616 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
150 - 50 вместо 100 написано для наглядности?

Не, наоборот, для некоторого усложнения
для 1-5 так
Код
=НАИБОЛЬШИЙ(СТРОКА($1:$100)*ЕОШИБКА(ПОИСКПОЗ(СТРОКА($1:$100);C$1:C1;));СЛУЧМЕЖДУ(1;100-СЧЁТ(C$1:C1)))


Условия (для просоты объяснения):
Формула в С2:С6, разбираем для С4. Пусть выше формула дала следующие значения: С2=5, С3=2.
Код
=НАИБОЛЬШИЙ(СТРОКА($1:$5)*ЕОШИБКА(ПОИСКПОЗ(СТРОКА($1:$5);C$1:C3;));СЛУЧМЕЖДУ(1;5-СЧЁТ(C$1:C3)))
Объяснялка:
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_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
150 - 50 вместо 100 написано для наглядности?

Не, наоборот, для некоторого усложнения
для 1-5 так
Код
=НАИБОЛЬШИЙ(СТРОКА($1:$100)*ЕОШИБКА(ПОИСКПОЗ(СТРОКА($1:$100);C$1:C1;));СЛУЧМЕЖДУ(1;100-СЧЁТ(C$1:C1)))


Условия (для просоты объяснения):
Формула в С2:С6, разбираем для С4. Пусть выше формула дала следующие значения: С2=5, С3=2.
Код
=НАИБОЛЬШИЙ(СТРОКА($1:$5)*ЕОШИБКА(ПОИСКПОЗ(СТРОКА($1:$5);C$1:C3;));СЛУЧМЕЖДУ(1;5-СЧЁТ(C$1:C3)))
Объяснялка:
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_
Дата добавления - 10.06.2014 в 20:08
MCH Дата: Вторник, 10.06.2014, 20:13 | Сообщение № 6
Группа: Админы
Ранг: Старожил
Сообщений: 2008
Репутация: 752 ±
Замечаний: ±

Формулой на примере диапазона 50:150

Саш, +1 забыл: 150-50+1-СЧЁТ(A$1:A1)

еще пара аналогичных вариантов, может поможет понять алгоритм:
Код
=НАИМЕНЬШИЙ(ЕСЛИ(СЧЁТЕСЛИ(A$1:A1;СТРОКА($50:$150))=0;СТРОКА($50:$150));СЛУЧМЕЖДУ(1;150-50+1-СЧЁТ(A$1:A1)))

Код
=НАИБОЛЬШИЙ(НЕ(СЧЁТЕСЛИ(A$1:A1;СТРОКА($50:$150)))*СТРОКА($50:$150);СЛУЧМЕЖДУ(1;150-50+1-СЧЁТ(A$1:A1)))
 
Ответить
Сообщение
Формулой на примере диапазона 50:150

Саш, +1 забыл: 150-50+1-СЧЁТ(A$1:A1)

еще пара аналогичных вариантов, может поможет понять алгоритм:
Код
=НАИМЕНЬШИЙ(ЕСЛИ(СЧЁТЕСЛИ(A$1:A1;СТРОКА($50:$150))=0;СТРОКА($50:$150));СЛУЧМЕЖДУ(1;150-50+1-СЧЁТ(A$1:A1)))

Код
=НАИБОЛЬШИЙ(НЕ(СЧЁТЕСЛИ(A$1:A1;СТРОКА($50:$150)))*СТРОКА($50:$150);СЛУЧМЕЖДУ(1;150-50+1-СЧЁТ(A$1:A1)))

Автор - MCH
Дата добавления - 10.06.2014 в 20:13
Rioran Дата: Вторник, 10.06.2014, 20:24 | Сообщение № 7
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
Саш, +1 забыл:

Нет, там же первая ячейка пустая в файле


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
Сообщение
Саш, +1 забыл:

Нет, там же первая ячейка пустая в файле

Автор - Rioran
Дата добавления - 10.06.2014 в 20:24
Rioran Дата: Вторник, 10.06.2014, 20:27 | Сообщение № 8
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
_Boroda_, большое спасибо, очень хороший пример.

А можно где-нибудь задачек найти, "закрепить" материал? Или, может, кто-то может придумать несколько примеров от простого к сложному?


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
Сообщение_Boroda_, большое спасибо, очень хороший пример.

А можно где-нибудь задачек найти, "закрепить" материал? Или, может, кто-то может придумать несколько примеров от простого к сложному?

Автор - Rioran
Дата добавления - 10.06.2014 в 20:27
_Boroda_ Дата: Вторник, 10.06.2014, 20:28 | Сообщение № 9
Группа: Админы
Ранг: Местный житель
Сообщений: 16912
Репутация: 6616 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Саш, +1 забыл:
Конечно. 150-50=100, а в диапазоне 50:150 сто одно значение. Поправил у себя выше.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Саш, +1 забыл:
Конечно. 150-50=100, а в диапазоне 50:150 сто одно значение. Поправил у себя выше.

Автор - _Boroda_
Дата добавления - 10.06.2014 в 20:28
Rioran Дата: Вторник, 10.06.2014, 20:42 | Сообщение № 10
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
_Boroda_, в примере в каждую ячейку массив вводится отдельно. Как отличить, когда надо по одному вставлять, а когда можно "замассивить" целую толпу ячеек?


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
Сообщение_Boroda_, в примере в каждую ячейку массив вводится отдельно. Как отличить, когда надо по одному вставлять, а когда можно "замассивить" целую толпу ячеек?

Автор - Rioran
Дата добавления - 10.06.2014 в 20:42
  • Страница 1 из 1
  • 1
Поиск:

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