Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на Basic / VBA


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты в разделе

Megaloman
Статус: Академик
Рейтинг: 93
∙ повысить рейтинг »
Sergey V. Gornostaev
Статус: Специалист
Рейтинг: 24
∙ повысить рейтинг »
mklokov
Статус: 6-й класс
Рейтинг: 23
∙ повысить рейтинг »

∙ Basic

Номер выпуска:1123
Дата выхода:28.11.2017, 22:45
Администратор рассылки:Андреенков Владимир (Профессор)
Подписчиков / экспертов:14 / 12
Вопросов / ответов:3 / 7

Консультация # 176820: Здравствуйте Уважаемые Эксперты ! Помогите чайнику ОЧЕНЬ Нужно! ПЛИЗ ! Есть набор чисел в Excel расположенных подряд в столбик 1 2 3 И т.д. 1000000 Нужно перемешать этот массив в хаотичном порядке Заранее благодарен !!!!!!!!!!!!!!!! ...
Консультация # 129079: Есть форма VBA, на которой расположены рядом друг с другом по горизонтали текстовое поле и метка (label). Как можно передвигать эти объекты на форме с помощью клавиатуры, а не мышью? С помощью каких клавиш? Где находятся эти настройки в редакторе VBA? С помощью клавиш (стрелок) можно более точно передвигать эти контролы, нежели мышью. Спас...
Консультация # 17703: Уважаемые эксперты! Какое значение имеет Width формы, когда существует ScaleWidth?...

Консультация # 176820:

Здравствуйте Уважаемые Эксперты !
Помогите чайнику ОЧЕНЬ Нужно! ПЛИЗ !
Есть набор чисел в Excel расположенных подряд в столбик
1
2
3
И т.д.
1000000
Нужно перемешать этот массив в хаотичном порядке
Заранее благодарен !!!!!!!!!!!!!!!!

Дата отправки: 21.02.2010, 05:46
Вопрос задал: DimasaN
Всего ответов: 3
Страница онлайн-консультации »


Консультирует Megaloman (Академик):

Здравствуйте, DimasaN.
У Вас есть натуральный ряд чисел. Вам надо получить массив с этими же числами, перемешанными в хаотичном порядке, при этом ни одно число в массиве не должно дублироавться.
Идея решения: используем генератор случайных чисел, но, чтобы получилась последовательность уникальных чисел, организуем 2 массива:
Mas - c искомой последовательностью,
Ind - для контроля, встречалось ли сгенерированное случайное число ранее
Решение оформлено в виде макроса.
Следует заметить, что, во первых, в моей версии Excel число строк не более 65536. Во вторых, очень большая размерность задачи потребует очень большого времени выполнения.
На моём компьютере для 65536 чисел потребовалось 6 сек. Но время выполнения будет возрастать, скорее всего, нелинейно.

' З
 аполняем массив Mas размерности от 1 до N
' уникальными натуральными числами  от 1 до N в случайном порядке
' Результат отобразим в заданной колонке таблицы начиная с заданной строки
' Указанная колонка перед выводом очищается от старых данных

    Col_Look = "A"      ' В какой колонке отображаем результат
    Row_Begin = 1       ' Начиная с какой строки отображаем результат
    
    N = 65536           ' Максимальное значение массива
    
    
    ReDim Mas(1 To N), Ind(1 To N)
    
    For i = 1 To N
        Ind(i) = True
    Next
    
    i = 0
    Randomize
    Do While i < N
       k = Int((N * Rnd) + 1)
       If Ind(k) Then
            i = i + 1
            Mas(i) = k
            Ind(k) = False
       End If
    Loop
    
    M = Col_Look + CStr(Row_Begin)
    Columns(Col_Look).ClearContents
    For i = 1 To N
        Range(M).Offset(i - 1, 0) = Mas(i)
    Next


Файл с решением здесь. Sluch.xls (2.31 Mб) Большой размер файла из-за того, что взят максимальный предел задачи N = 65536
В приложении описание работы генератора случайных чисел из справочной системы VBA.

Приложение:

Консультировал: Megaloman (Академик)
Дата отправки: 21.02.2010, 11:20

5
Большое Спасибо Megaloman !!!!
(воспользовался вторым ответом более лёгким для чайника)
Думаю скоро смогу понять и Ваше решение !
Ещё раз Спасибо!!!


-----
Дата оценки: 21.02.2010, 17:30

Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Устинов С.Е.:

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

Можно сделать таким методом (буду считать, что числа записаны в столбике A, начиная с первой строки): напротив первого числа в соседнем столбике (B) пишем формулу
=СЛЧИС()*100000
Потом кликаем 2 раза в правом нижнем углу ячейки с формулой (B1), таким образом, весь столбик B заполнится случайными числами. После этого делаете активной ячейку B1 и нажимаете кнопку "Сортировка по возрастанию" или "Сортировка по убыванию". Исходный массив перемешался, можем удалять значения в столбике B (выделяем весь и удаляем).

Удачи!

Консультировал: Устинов С.Е.
Дата отправки: 21.02.2010, 12:29

5
Круто Большой Рахмат так просто и круто ну и ну !!!!!!!!вот это да !!!!!!!!!!!!!!!
-----
Дата оценки: 21.02.2010, 17:19

Рейтинг ответа:

НЕ одобряю +2 одобряю!


Консультирует Andrew Kovalchuk:

Здравствуйте, DimasaN.
Максимальное количество строк - 65536 (миллион из условия - не для excel smile ).
Заполнить соседнюю ячейку случайными значениями (=СЛЧИС()) и, выделив оба столбца, отсортировать в любом порядке (по возрастанию/убыванию) второго столбца.
Нужно заметить, что функция СЛЧИС() генерирует ПСЕВДОслучайную последовательность - так что после сортировки вы получите ПСЕВДОслучайный порядок ваших исходных данных.

Консультировал: Andrew Kovalchuk
Дата отправки: 21.02.2010, 15:36
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 129079:

Есть форма VBA, на которой расположены рядом друг с другом по горизонтали текстовое поле и метка (label).
Как можно передвигать эти объекты на форме с помощью клавиатуры, а не мышью? С помощью каких клавиш? Где находятся эти настройки в редакторе VBA? С помощью клавиш (стрелок) можно более точно передвигать эти контролы, нежели мышью.
Спасибо.

Дата отправки: 25.03.2008, 22:57
Вопрос задал: Кокин Антон Вадимович
Всего ответов: 3
Страница онлайн-консультации »


Консультирует HookEst:

Здравствуйте, Кокин Антон Вадимович!
Выделяете группу контролов CTRL+CLICK, и двигаете с CTRL:

CTRL+DOWN ARROW - Move the control down one grid unit (if the grid is turned on) or one pixel (if the grid is turned off).

CTRL+UP ARROW - Move the control up one grid unit (if the grid is turned on) or one pixel (if the grid is turned off).

CTRL+RIGHT ARROW - Move the control one grid unit (if the grid is turned one)or one pixel (if the grid is turned off) to the right.

CTRL+LEFT ARROW - Move the control one grid unit (if the grid is turned on) or one pixel (if the grid is turned off) to the left.
но точности это Вам не добавит. По умолчанию, контролы привязываются к сетке в 120 twips. Настройка сетки производится в Tools->Options->General->Form Grid Settings:
Show Grid - показывать сетку(на привязывание к сетке это не сказывается);
Grid Units, Width,Height - размеры ячейки сетки;

Align Controls To Grid - если включен, то контролы будут перемещаться "скачками", соответственно Width и Height, если же выключен, то контролы будут перемещатся по пикселам и клавишами и мышкой. Уберите эту галочку и двигайте с нужной точностью.
Успехов.

Консультировал: HookEst
Дата отправки: 26.03.2008, 07:01
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Коровин Александр:

Здравствуйте, Кокин Антон Вадимович!
Если Вам это поможет, то можно использовать команды меню "Format". Для этого необходимо выделить несколько элементов (команды этого меню работают только в этом случае). Последний выделенный элемент будет иметь белые маркеры и действия некоторах команд будет происходить относительного этого элемента. Можно также уменьшить шаг сетки для более точного расположения элементов.
Удачи.

Консультировал: Коровин Александр
Дата отправки: 26.03.2008, 07:58
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Калашник Андрей Николаевич:

Здравствуйте, Кокин Антон Вадимович!
У текстового поля и метки существуют такие свойства, как top и left.
Изменяя значения этих параметров, Вы двигаете контролы по форме.
Значения можно изменить как программно, так и в окне "properties"

Консультировал: Калашник Андрей Николаевич
Дата отправки: 26.03.2008, 17:35
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 17703:

Уважаемые эксперты! Какое значение имеет Width формы, когда существует ScaleWidth?

Дата отправки: 02.03.2005, 13:44
Вопрос задал: Александр А.А.
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Licvidator:

Здравствуйте, Александр А.А.!
Зависит от единиц измерения (ScaleMode).

Консультировал: Licvidator
Дата отправки: 02.03.2005, 19:04
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное