Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/88: Рейтинг темы: голосов - 88, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 19.11.2020
Сообщений: 23
Excel

Заполнение массива из ячеек циклом с шагом

16.12.2020, 10:24. Показов 17866. Ответов 13

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Нужно заполнить массив из ячеек с шагом из определённого листа. Просто ячейки заполняются, а вот массиву тем же образом значения не присваиваются. Вообще на нашёл описания, чтобы циклом For i to ... c шагом заполнять и использовать адреса ячеек Cells (1,1), a не "A1"

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub massiv()
Dim arr As Variant
Dim i As Integer
For i = 1 To 20 Step 4
 
arr = Sheets("Лист1").Cells(i, 1).Value
'Не работает. Т.e. в итоге должен появится массив в котом 5 значений, но присваивает значение только значение последней ячейки.
 
Sheets("Лист1").Cells(i, 3) = Sheets("Лист1").Cells(i, 1)
'Работает. Значение ячеек переносится с нужным шагом.
 
Next i
End Sub
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.12.2020, 10:24
Ответы с готовыми решениями:

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

Заполнение ячеек от min до max значений с шагом
Есть таблица.При изменении значений минимума,максимума и шага таблица должна динамически меняться.Можно это осуществить без макроса? ...

Заполнение массива циклом for
Подскажите, пожалуйста, что здесь не так? Хочу, чтобы выводилось одно значение один раз, а выводится одно значение 36 раз (как размер...

13
3946 / 2339 / 790
Регистрация: 02.11.2012
Сообщений: 6,214
16.12.2020, 10:52
в файле покажите что да как.
Code
1
arr = Sheets("Лист1").Cells(i, 1).Value
здесь в arr заносится только одно значение, о каком массиве речь?
0
0 / 0 / 0
Регистрация: 19.11.2020
Сообщений: 23
16.12.2020, 11:04  [ТС]
Выложил принтскрин таблицы, для которой нужны операции с массивами.
Миниатюры
Заполнение массива из ячеек циклом с шагом  
0
66 / 59 / 14
Регистрация: 17.11.2013
Сообщений: 234
16.12.2020, 11:06
У вас неправильно объявлены и используются массивы.
http://www.programm-school.ru/... v_vba.html
0
0 / 0 / 0
Регистрация: 19.11.2020
Сообщений: 23
16.12.2020, 11:07  [ТС]
Приложил таблицу в экселе.
Вложения
Тип файла: xlsx Книга.xlsx (10.2 Кб, 25 просмотров)
0
0 / 0 / 0
Регистрация: 19.11.2020
Сообщений: 23
16.12.2020, 11:11  [ТС]
Цитата Сообщение от SugarTech Посмотреть сообщение
неправильно объявлены и используются массивы
Ясно. Подскажите, пожалуйста, как правильно?

Добавлено через 1 минуту
Цитата Сообщение от Vlad999 Посмотреть сообщение
в файле покажите что да как.
Выслал принскрин и в экселе. Размер массивов заранее неизвестен. Массивов будет много и из разных листов.
0
66 / 59 / 14
Регистрация: 17.11.2013
Сообщений: 234
16.12.2020, 11:14
Цитата Сообщение от Lorenss Посмотреть сообщение
Размер массивов заранее неизвестен.
Смотрите объявление и использование динамических массивов.
0
Часто онлайн
 Аватар для КостяФедореев
987 / 637 / 280
Регистрация: 09.01.2017
Сообщений: 2,080
16.12.2020, 11:18
Лучший ответ Сообщение было отмечено Lorenss как решение

Решение

Lorenss, попробуйте
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub massiv()
    Dim arr()       As Variant
    Dim i           As Integer
    n = 0
    For i = 5 To Cells(Rows.Count, 3).End(xlUp).Row Step 6
        ReDim Preserve arr(n)
        arr(n) = Cells(i, 3).Value
        n = n + 1
    Next i
End Sub
1
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
16.12.2020, 11:24
Начать лучше с того что надо получить в итоге
Т.е. показать что есть и что надо получить
1
0 / 0 / 0
Регистрация: 19.11.2020
Сообщений: 23
16.12.2020, 11:38  [ТС]
Цитата Сообщение от КостяФедореев Посмотреть сообщение
Lorenss, попробуйте
Благодарю. Заработало.
Если массив будет двумерный, то помимо n, надо добавить ещё одну переменную, например m = 0?

Могли ли бы прокомментировать часть кода размещенную ниже?

Visual Basic
1
2
For i = 5 To Cells(Rows.Count, 3).End(xlUp).Row Step 6
        ReDim Preserve arr(n)
Миниатюры
Заполнение массива из ячеек циклом с шагом  
0
Часто онлайн
 Аватар для КостяФедореев
987 / 637 / 280
Регистрация: 09.01.2017
Сообщений: 2,080
16.12.2020, 11:53
Цитата Сообщение от Lorenss Посмотреть сообщение
Если массив будет двумерный
тут немного по сложней ReDim Preserve arr(1,n) работает только для второго аргумента в скобках, поэтому массив будет заполняться горизонтально.

Visual Basic
1
2
For i = 5 To Cells(Rows.Count, 3).End(xlUp).Row Step 6 ' цикл с 5 строки по последнюю заполненную с шагом 5
        ReDim Preserve arr(n) ' переобъявляем массив на лету без удаления имеющихся данных в массиве
Цитата Сообщение от Lorenss Посмотреть сообщение
надо добавить ещё одну переменную, например m = 0
если знаете сколько будет значений во второй размерности, то не надо можно сразу указать сколько должно быть
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub massiv()
    Dim arr()       As Variant
    Dim i           As Integer
    n = 0
    For i = 5 To Cells(Rows.Count, 3).End(xlUp).Row Step 6
        ReDim Preserve arr(1, n)
        arr(0, n) = Cells(i, 3).Value
        arr(1, n) = Cells(i, 4).Value
        n = n + 1
    Next i
End Sub
1
0 / 0 / 0
Регистрация: 19.11.2020
Сообщений: 23
16.12.2020, 12:46  [ТС]
Цитата Сообщение от КостяФедореев Посмотреть сообщение
если знаете сколько будет значений во второй размерности, то не надо можно сразу указать сколько должно быть
Понятно.

В большинстве массивов заранее будет известна первая и вторая размерность, поскольку перечень работников известен заранее. Тогда в n (при одномерном массиве) надо будет сразу проставить значение, не объявлять n= 0 и не включать счётчик n= n+1.

На что заменить End(xlUp) ?
0
Часто онлайн
 Аватар для КостяФедореев
987 / 637 / 280
Регистрация: 09.01.2017
Сообщений: 2,080
16.12.2020, 13:42
Лучший ответ Сообщение было отмечено Lorenss как решение

Решение

Цитата Сообщение от Lorenss Посмотреть сообщение
На что заменить End(xlUp) ?
это не надо менять
Цитата Сообщение от КостяФедореев Посмотреть сообщение
Cells(Rows.Count, 3).End(xlUp).Row
эта строка определяет последнюю заполненную ячейку, в данном случае в третьем столбце
Цитата Сообщение от Lorenss Посмотреть сообщение
Тогда в n (при одномерном массиве) надо будет сразу проставить значение
можете сразу указать
Visual Basic
1
Dim arr(5)       As Variant ' тут задана размерность одномерного массива 6 элементов, отсчет начинается с нуля
Visual Basic
1
Dim arr(5, 5)       As Variant ' тут задана размерность двумерного массива 6х6 элементов, отсчет начинается с нуля
Добавлено через 31 минуту
Lorenss, Вы определите конечную задачу, иначе переделывать и доделывать можно бесконечно...
0
0 / 0 / 0
Регистрация: 19.11.2020
Сообщений: 23
19.12.2020, 14:33  [ТС]
Цитата Сообщение от КостяФедореев Посмотреть сообщение
Lorenss, Вы определите конечную задачу, иначе переделывать и доделывать можно бесконечно...
Согласен. Вы полностью осветили мой вопрос. Сейчас использую одномерные массивы и теперь всё стабильно работает. Благодарю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.12.2020, 14:33
Помогаю со студенческими работами здесь

Заполнение массива циклом
Здравствуйте! Я новичок. Помогите пожалуйста сделать вот что. Заполнить массив циклом от 0 до 99 и вывести каждый индекс массива на...

Заполнение динамического массива циклом For.
вырезал часть кода //================================GLOBAL VARIABLES============================= CONST ParcelConst =...

Заполнение массива указателей циклом
И снова здравствуйте! Пожалуйста, подробно и доступно объясните почему не работает код #pragma warning(disable : 4996) #include...

Заполнение массива в определённые ячейки (циклом)
Нужно сделать тоже самое (что в приложенном коде), но чтобы это выполнялось в цикле. По сути, надо чтобы матрица 6x6 заполнялась элементами...

Заполнение массива данных циклом с интревалом (15 минут)
День добрый , требуется заполнить массив цифрами в формате времени от 00:00 до 23:45 с интервалом в 15 минут скажем заходим в...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru