VBA: Формирование и преобразование массивов

Автор Александр, 11 ноября 2017, 17:23

Александр

Попытался считать массив с первого столбца 15 ячеек и отобрать только чётные индексы и вставить в третий столбец, но что-то напутал, что теперь ошибка...

Макрос
Public Sub M()
Dim x(1 To 15) As Integer
Dim a As Integer
Dim i As Integer
Dim j As Integer
For i = 1 To 15
x(i) = Cells(i, "A").Value
Next i
j = 1
For i = 1 To 15
If i Mod 2 = 0 Then
a(j) = x(i)
j = j + 1
End If
Next i
For j = 1 To UBound(x)
Cells(j, "C").Value = a(j)
Next j
End Sub
[свернуть]

Администратор

Не ответ на ваш вопрос, я увидел неточность. В столбце A находятся дробные числа.
Вы копируете числа из столбца A в массив "x". У массива "x" тип данных "Integer". Это означает, что в массиве могут быть только целые числа.

Администратор

В макросе используется массив "A". Но создаёте вы его как переменную. Правильно массив создавать так:
Dim A() As Integer
То есть нужно добавлять после имени массива круглые скобки.

Администратор

Прежде чем записать данные в ячейку массива, нужно создать ячейки.
Ячейки в массиве создаются так:
ReDim A(1 To 15)

Не путайте с копированием данных из экселя: если нужно скопировать данные из нескольких эксель-ячеек, то в этом случае не нужно создавать ячейки в массиве.

Администратор

Исправьте пока эти ошибки, потом дальше может быть посмотрю.

Александр

Вот, я исправил. Столбик со значениями появился, но после того, как все числа были отобраны, остальные ячейки (до 15) были заполнены нулями. Как исправить ситуацию?

Макрос
Public Sub M()
Dim x(1 To 15) As Single
Dim A() As Integer
Dim i As Integer
Dim j As Integer
ReDim A(1 To 15)
For i = 1 To 15
x(i) = Cells(i, "A").Value
Next i
j = 1
For i = 1 To 15
If i Mod 2 = 0 Then
A(j) = x(i)
j = j + 1
End If
Next i
For j = 1 To UBound(x)
Cells(j, "C").Value = A(j)
Next j
End Sub
[свернуть]

Администратор

Нужно рассчитать, сколько нужно ячеек в массиве "Y" и создавайте в массиве "Y" не 15 ячеек, а столько, сколько нужно.
А чтобы записывать в ячейки массива "Y", сделайте ещё одну переменную и увеличивайте её отдельно от переменной "i".