С Новым годом! Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
2 / 1 / 2
Регистрация: 21.07.2014
Сообщений: 33
1

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

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

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

Добавлено через 11 минут
Нашел вот такой пример
Visual Basic
1
2
3
Range("B3:J20").Select
Selection.Copy
Worksheets("Лист2").Paste Destination:=Worksheets("Лист2").Range("B3:J20")
но тут все прописано в коде, а мне надо чтоб вставка происходила там, где я мышей выделил диапазон и плюс выбор из копируемого диапазона должен быть рандомным
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.02.2016, 14:40
Ответы с готовыми решениями:

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

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

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

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

12
15153 / 6426 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
10.02.2016, 17:18 2
Цитата Сообщение от Мерсер Посмотреть сообщение
заполнение должно быть в рандомном порядке
Повторы допускаются? А если заполняемый диапазон больше, чем диапазон с данными?
0
2 / 1 / 2
Регистрация: 21.07.2014
Сообщений: 33
11.02.2016, 08:18  [ТС] 3
1. Повторы допускаются.
2. Заполняемый диапазон заведомо НЕ будет больше данных.
0
15153 / 6426 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
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
Сообщений: 33
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
15153 / 6426 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
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
Сообщений: 33
11.02.2016, 13:35  [ТС] 7
Спасибо. Теперь по проверке - если я проверяю пустоту ячейки правильно, тогда почему у меня после выбора диапазона исходных данных, где есть пустые ячейки (вперемешку с непустыми), скрипт заполняет итоговые ячейки этими пустыми ячейками (также вперемешку с непустыми)?
0
15153 / 6426 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
11.02.2016, 13:57 8
Мерсер, погодите, Вы в коде из #4 вместо v = d.Value это написали?
Так нельзя, d.Value это массив.
Сформулируйте задачу полностью, с учетом пустых ячеек тут и там, и, возможно, еще каких-то условий.
0
2 / 1 / 2
Регистрация: 21.07.2014
Сообщений: 33
11.02.2016, 14:14  [ТС] 9
Ну так я хотел отбрасывать пустые ячейки в исходном массиве при заполнении целевых ячеек

Добавлено через 4 минуты
Скажите во время выполнения скрипта, что конкретно содержится в d.Value - содержимое всех ячеек выделенного диапазона или что-то другое?
0
15153 / 6426 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
11.02.2016, 16:09 10
Мерсер, да, значения ячеек выбранного диапазона. "Спросите" у своего VBA - пошаговое выполнение F8, состояние переменных в окне Locals и др. команды меню Debug.
1
2 / 1 / 2
Регистрация: 21.07.2014
Сообщений: 33
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
Сообщений: 33
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
13.09.2016, 13:50
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.09.2016, 13:50
Помогаю со студенческими работами здесь

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

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka, REST и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS, Swagger и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru