КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Случайные числа — на основании диапазона
Генератор случайных чисел Выделение из текста произвольного элемента Листинг 2.76. Выделение элемента текста Function dhGetTextItem(ByVal strTextIn As String, intItem As _ Integer, strSeparator As String) As String Dim intStart As Integer ' Позиция начала текущего элемента Dim intEnd As Integer ' Позиция конца текущего элемента Dim i As Integer ' Номер текущего элемента
' Проверка корректности номера элемента If intItem < 1 Then Exit Function
' Убираются лишние пробелы, если разделитель - пробел If strSeparator = " " Then strTextIn = Application.Trim(strTextIn) ' Разделитель добавляется в конец строки If Right(strTextIn, Len(strTextIn)) <> strSeparator Then _ strTextIn = strTextIn & strSeparator
' Поиск всех элементов в строке до нужного For i = 1 To intItem ' Начало элемента (перемещение вперед по строке) intStart = intEnd + 1 ' Конец элемента intEnd = InStr(intStart, strTextIn, strSeparator)
If (intEnd = 0) Then ' Дошли до конца строки, но элемент не нашли Exit Function End If Next i ' Выделение текста из входной строки dhGetTextItem = Mid(strTextIn, intStart, intEnd - intStart) End Function Листинг 2.77. Функция dhGetRandomValues Function dhGetRandomValues() As Variant Dim intRow As Integer ' Номер текущей строки Dim intCol As Integer ' Номер текущего столбца Dim aintOut() As Integer ' Выходной массив (двумерный) Dim aintValues() As Integer ' Массив с возможными значениями Dim intMax As Integer ' Последний доступный элемент массива _ aintValues Dim i As Integer
ReDim aintOut(1 To Application.Caller.Rows.Count, 1 To _ Application.Caller.Columns.Count) ' Всего нужно чисел... intMax = Application.Caller.Rows.Count * _ Application.Caller.Columns.Count ReDim aintValues(1 To intMax) ' Заполнение массива aintValues значениями от 1 до intMax For i = 1 To intMax aintValues(i) = i Next i
' Занесение значений в выходной массив aintOut, в произвольном _ порядке выбирая их из aintValues Randomize For intRow = 1 To Application.Caller.Rows.Count For intCol = 1 To Application.Caller.Columns.Count ' Определение номера элемента из aintValues i = Rnd * intMax If i = 0 Then i = 1 ' Занесение этого элемента в выходной массив aintOut(intRow, intCol) = aintValues(i)
' Уменьшение массива aintValues (то есть еще один его _ элемент выбран) - замена выбранного элемента последним _ в массиве aintValues(i) = aintValues(intMax) intMax = intMax - 1 Next intCol Next intRow ' Возвращение массива значений dhGetRandomValues = aintOut End Function Листинг 2.78. Функция dhGetRandomValues1 Function dhGetRandomValues1(rgSource As Range) As Variant Dim intRow As Integer ' Номер текущей строки Dim intCol As Integer ' Номер текущего столбца Dim avarOut() As Variant ' Выходной массив (двумерный) Dim avarValues() As Variant ' Массив с возможными значениями Dim intValCount As Integer ' Количество возможных значений Dim cell As Range Dim i As Integer
ReDim avarOut(1 To Application.Caller.Rows.Count, 1 To _ Application.Caller.Columns.Count) ' Всего нужно чисел... intValCount = rgSource.Rows.Count * rgSource.Columns.Count ReDim avarValues(1 To intValCount) ' Заполнение массива avarValues значениями из указанного _ диапазона For Each cell In rgSource i = i + 1 avarValues(i) = cell.Value Next cell
' Занесение значений в выходной массив avarOut, в произвольном _ порядке выбирая их из avarValues Randomize For intRow = 1 To Application.Caller.Rows.Count For intCol = 1 To Application.Caller.Columns.Count ' Определение номера элемента из avarValues i = Rnd * intValCount If i = 0 Then i = 1 ' Занесение этого элемента в выходной массив avarOut(intRow, intCol) = avarValues(i) Next intCol Next intRow ' Возвращение массива значений dhGetRandomValues1 = avarOut End Function Глава 3. Создание трюков с помощью макросов
Дата добавления: 2015-06-25; Просмотров: 336; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |