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

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

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

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

Нужно заполнить массив из ячеек с шагом из определённого листа. Просто ячейки заполняются, а вот массиву тем же образом значения не присваиваются. Вообще на нашёл описания, чтобы циклом 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.12.2020, 10:24
Ответы с готовыми решениями:

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

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

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

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

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

Добавлено через 1 минуту
Цитата Сообщение от Vlad999 Посмотреть сообщение
в файле покажите что да как.
Выслал принскрин и в экселе. Размер массивов заранее неизвестен. Массивов будет много и из разных листов.
0
66 / 59 / 14
Регистрация: 17.11.2013
Сообщений: 233
16.12.2020, 11:14 7
Цитата Сообщение от Lorenss Посмотреть сообщение
Размер массивов заранее неизвестен.
Смотрите объявление и использование динамических массивов.
0
Часто онлайн
917 / 620 / 276
Регистрация: 09.01.2017
Сообщений: 2,052
16.12.2020, 11:18 8
Лучший ответ Сообщение было отмечено 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
11517 / 3803 / 681
Регистрация: 13.02.2009
Сообщений: 11,222
16.12.2020, 11:24 9
Начать лучше с того что надо получить в итоге
Т.е. показать что есть и что надо получить
1
0 / 0 / 0
Регистрация: 19.11.2020
Сообщений: 23
16.12.2020, 11:38  [ТС] 10
Цитата Сообщение от КостяФедореев Посмотреть сообщение
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
Часто онлайн
917 / 620 / 276
Регистрация: 09.01.2017
Сообщений: 2,052
16.12.2020, 11:53 11
Цитата Сообщение от 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  [ТС] 12
Цитата Сообщение от КостяФедореев Посмотреть сообщение
если знаете сколько будет значений во второй размерности, то не надо можно сразу указать сколько должно быть
Понятно.

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

На что заменить End(xlUp) ?
0
Часто онлайн
917 / 620 / 276
Регистрация: 09.01.2017
Сообщений: 2,052
16.12.2020, 13:42 13
Лучший ответ Сообщение было отмечено 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  [ТС] 14
Цитата Сообщение от КостяФедореев Посмотреть сообщение
Lorenss, Вы определите конечную задачу, иначе переделывать и доделывать можно бесконечно...
Согласен. Вы полностью осветили мой вопрос. Сейчас использую одномерные массивы и теперь всё стабильно работает. Благодарю.
0
19.12.2020, 14:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.12.2020, 14:33
Помогаю со студенческими работами здесь

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

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

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

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

Заполнение массива числами типа double с шагом
Скажите пожалуйста как заполнить массив числами типа double от 0 до 4 с шагом 0.16, в этом примере...

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru