Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
2 / 1 / 2
Регистрация: 21.07.2014
Сообщений: 30
1

Заполнение ячеек

10.02.2016, 14:40. Показов 1354. Ответов 12
Метки нет (Все метки)

Здравия, форум!
Нужна помощь в экселе, я в бейсике полный ноль, так что заранее извините. Вобщем нужен макрос, который будет заполнять выделенный диапазон ячеек данными из списка ячеек, находящихся на другом листе, заполнение должно быть в рандомном порядке.

Добавлено через 11 минут
Нашел вот такой пример
Visual Basic
1
2
3
Range("B3:J20").Select
Selection.Copy
Worksheets("Лист2").Paste Destination:=Worksheets("Лист2").Range("B3:J20")
но тут все прописано в коде, а мне надо чтоб вставка происходила там, где я мышей выделил диапазон и плюс выбор из копируемого диапазона должен быть рандомным
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.02.2016, 14:40
Ответы с готовыми решениями:

Заполнение ячеек
Отлавливаю ошибку и нужно реализовать такую последовательность:если хоть одна ячейка заполнена,то...

Макрос на заполнение ячеек
Добрый день, фоурмчане! Необходима ваша неоценимая помощь и подсказ, как разобраться с заданием: ...

Заполнение диапазона ячеек
Еще вопрос. Запросите у пользователя диапазон ячеек и заполните его случайными символами....

Заполнение ячеек из массива
Доброго времени суток! Помогите разобраться. Я понимаю код корявый, но надо взять значения из...

12
15019 / 6347 / 1725
Регистрация: 24.09.2011
Сообщений: 9,976
10.02.2016, 17:18 2
Цитата Сообщение от Мерсер Посмотреть сообщение
заполнение должно быть в рандомном порядке
Повторы допускаются? А если заполняемый диапазон больше, чем диапазон с данными?
0
2 / 1 / 2
Регистрация: 21.07.2014
Сообщений: 30
11.02.2016, 08:18  [ТС] 3
1. Повторы допускаются.
2. Заполняемый диапазон заведомо НЕ будет больше данных.
0
15019 / 6347 / 1725
Регистрация: 24.09.2011
Сообщений: 9,976
11.02.2016, 08:37 4
Лучший ответ Сообщение было отмечено Мерсер как решение

Решение

в первом приближении, с возможностью повторов
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub Mer()
Dim v(), i&, n&, w&, c As Range, d As Range
  On Error Resume Next
  Set d = Application.InputBox("Выберите диапазон данных мышкой" & vbLf & _
    "или введите адрес", Type:=8)
  If Err Then Exit Sub
  v = d.Value
  n = d.Count
  w = UBound(v, 2)
  For Each c In Selection
    i = Int(Rnd * n)
    c.Value = v(i \ w + 1, i Mod w + 1)
  Next
End Sub
1
2 / 1 / 2
Регистрация: 21.07.2014
Сообщений: 30
11.02.2016, 13:14  [ТС] 5
Разрешите ко-что уточнить. не пойму зачем в этой строке
Visual Basic
1
c.Value = v(i \ w + 1, i Mod w + 1)
берется остаток деления
Visual Basic
1
Mod
. И косая черта
Visual Basic
1
i \ w
- это знак деления или что?

Добавлено через 1 час 36 минут
Скажите правильно ли я определяю пустая ячейка или нет?
Visual Basic
1
If Not IsEmpty(d.Value) Then v = d.Value
Добавлено через 1 час 18 минут
подскажите, пожалуйста, последний вопрос...
0
15019 / 6347 / 1725
Регистрация: 24.09.2011
Сообщений: 9,976
11.02.2016, 13:29 6
Цитата Сообщение от Мерсер Посмотреть сообщение
зачем в этой строке ... берется остаток деления
Мне нужно взять случайный элемент массива. Число элементов массива n, поэтому случайный номер i = Int(Rnd * n) - целое число от 0 до n-1. Но массив двумерный (даже если была выбрана одна строка или один столбец). Число элементов в строке w. Если считать, что элементы массива пронумерованы сначала по строкам, а потом по столбцам, то номер строки i\w - это деление с отбрасыванием остатка, получается число от 0 до числа строк-1, а номер элемента в строке i Mod w - остаток от деления, получается число от 0 до w-1. Индексация элементов массива начинается с 1, поэтому приходится прибавлять 1.
Можно так
Visual Basic
1
2
3
4
5
  h = UBound(v)
  w = UBound(v, 2)
  For Each c In Selection
    c.Value = v(Int(Rnd * h) + 1, Int(Rnd * w) + 1)
  Next
Цитата Сообщение от Мерсер Посмотреть сообщение
правильно ли я определяю пустая ячейка или нет?
Да, хотя есть нюансы - пустая строка (результат формулы ="") - не Empty. Еще ячейка может содержать значение ошибки, можно проверить IsError(d.Value) .
0
2 / 1 / 2
Регистрация: 21.07.2014
Сообщений: 30
11.02.2016, 13:35  [ТС] 7
Спасибо. Теперь по проверке - если я проверяю пустоту ячейки правильно, тогда почему у меня после выбора диапазона исходных данных, где есть пустые ячейки (вперемешку с непустыми), скрипт заполняет итоговые ячейки этими пустыми ячейками (также вперемешку с непустыми)?
0
15019 / 6347 / 1725
Регистрация: 24.09.2011
Сообщений: 9,976
11.02.2016, 13:57 8
Мерсер, погодите, Вы в коде из #4 вместо v = d.Value это написали?
Так нельзя, d.Value это массив.
Сформулируйте задачу полностью, с учетом пустых ячеек тут и там, и, возможно, еще каких-то условий.
0
2 / 1 / 2
Регистрация: 21.07.2014
Сообщений: 30
11.02.2016, 14:14  [ТС] 9
Ну так я хотел отбрасывать пустые ячейки в исходном массиве при заполнении целевых ячеек

Добавлено через 4 минуты
Скажите во время выполнения скрипта, что конкретно содержится в d.Value - содержимое всех ячеек выделенного диапазона или что-то другое?
0
15019 / 6347 / 1725
Регистрация: 24.09.2011
Сообщений: 9,976
11.02.2016, 16:09 10
Мерсер, да, значения ячеек выбранного диапазона. "Спросите" у своего VBA - пошаговое выполнение F8, состояние переменных в окне Locals и др. команды меню Debug.
1
2 / 1 / 2
Регистрация: 21.07.2014
Сообщений: 30
13.09.2016, 13:29  [ТС] 11
Здравствуйте, скажите пож., можно ли усовершенствовать рандомную выборку, может быть где-то здесь, точно не уверен -
Цитата Сообщение от Казанский Посмотреть сообщение
i = Int(Rnd * n)
, чтобы при выборе одинакового количества заполняемых ячеек, вставляемые данные не были одинаковыми. Уточню -
лист2 - выбрал 15 ячеек в один столбец, заполнил; лист3 - выбрал 15 ячеек в один столбец, заполнил - вставляемые данные оказываются такими же, как и на листе 2.

Добавлено через 2 минуты
Сейчас мой скрипт выглядит так
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub FillCellsAutoSurnam()
    Dim v(), i&, n&, w&, my&, h&, c As Range, d As Range
    On Error Resume Next
        With frmAskPwd
            .Show
            If .txtPwd.Text <> "321" Then Exit Sub
            .txtPwd.Text = ""
        End With
    Set d = Range("Таблица2[ФИО]")
    If Err Then Exit Sub
    v = d.Value
    n = d.Count
    h = UBound(v)
    w = UBound(v, 2)
     For Each c In Selection
       i = Int(Rnd * n)
       c.Value = v(i \ w + 1, i Mod w + 1)
     Next
End Sub
0
Заблокирован
13.09.2016, 13:30 12
HELP -> RANDOMIZE
1
2 / 1 / 2
Регистрация: 21.07.2014
Сообщений: 30
13.09.2016, 13:50  [ТС] 13
написал так
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub FillCellsAutoSurnam()
    Dim v(), i&, n&, w&, my&, h&, c As Range, d As Range
    On Error Resume Next
        With frmAskPwd
            .Show
            If .txtPwd.Text <> "321" Then Exit Sub
            .txtPwd.Text = ""
        End With
    Set d = Range("Таблица2[ФИО]")
    If Err Then Exit Sub
    v = d.Value
    n = d.Count
    h = UBound(v)
    w = UBound(v, 2)
     Randomize()
     For Each c In Selection
       i = Int(Rnd * n)
       c.Value = v(i \ w + 1, i Mod w + 1)
     Next
End Sub
рандомайз выделяется красным и появляется сообщение "Compile error: Expected: ="

Добавлено через 1 минуту
блин, скобки надо убрать
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.09.2016, 13:50

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Заполнение диапазона ячеек
Запросите у пользователя диапазон ячеек и заполните его случайными цифрами от 0 до 50. Программа...

Заполнение ячеек в Excel циклом for
Ячейки в Excel данным способом почему-то не заполняются. Почему? Как это исправить? Sub t() Dim...

Заполнение пустых ячеек по формуле
Ку, все пытался хоть что-то придумать с формулами, но видимо без vba тут не обойтись( Есть...

Заполнение ячеек по нажатию на кнопку
Здравствуйте! Помогите, пожалуйста, исправить мой код.. Эта функция вызывается при нажатии на...

Заполнение массива значениями из ячеек
Здравствуйте, кто в силах и уме помогите или просто посоветуйте. Есть файл Excel с данными, в нем...

Нужно автоматизировать заполнение ячеек
Прошу помощи в написании макроса. Имеется два столбца A,B В этих столбцах имеются данные ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.