Новости:

Теперь на форум можно залогиниться / зарегистрироваться с помощью ВКонтакте. Уже существующие пользователи могут связать свою учетную запись с аккаунтом ВКонтакте одним кликом в профиле пользователя http://forum.msexcel.ru/index.php?action=profile;area=account

Главное меню

Ошибка вставки массива в диапазон

Автор NataliXXX, 08.07.2015, 15:28

« назад - далее »

NataliXXX

Добрый день, знатоки. Прошу помощи. У меня есть маленькая табличка. Она состоит из двух массивов - Массива Дат и Массива Данных. Надо, чтобы код, обрабатывающий табличку не зависел от количества строк и столбцов. Код написала, но работает только наполовину.
Казалось бы вставляются оба массива в одном цикле , переменные вставки - одни и те же, но Массив данных по циклу вставляется, а Даты - ни в какую. К тому же, месяц в каждой дате при каждом повторении должен увеличиваться на 1, использована функция - может быть из-за нее не работает код?
Проблема в том, что дебаггер не ругается, так что после долгого поиска ошибки решила обратиться к вам. В файле есть исходная табличка на 1 листе, на 2 должна быть последовательная вставка, на 3 - как это вообще все должно выглядеть в идеале. Помогите, кто, чем сможет, пожалуйста.

cheshiki1

#1
1. у вас массив DatArr после объявления получается 7 значений т.к. при таком объявлении как у вас он начинается с 0 по 6, объявите DatArr (1 To y)
2. одномерный массив выводится так Worksheets("2").Range("A1").Resize(y, 1).Offset(j + k, 0) = WorksheetFunction.Transpose(DatArr)
если с данными для массива ни чего делать не нужно то можно их заносить без цикла, так -
mass = Range("B1", Cells(y, x)).Value

Sub МассивПоЦиклу4()
Dim mass(), DatArr(), y, x, c, a, t, k As Integer
Worksheets("2").Cells.Clear
Worksheets("1").Activate
'-------
y = Range("A1").End(xlDown).Row
x = Range("A1").End(xlToRight).Column
mass = Range("B1", Cells(y, x)).Value
ReDim DatArr(1 To y)
For a = 1 To y 'для строк
' присваиваем данные в массивы дат и данных
DatArr(a) = DateAdd("m", 1, CDate(Cells(a, 1)))
Next

t = 4
k = 0 'первая вставка производится без сдвига
For j = 0 To t 'цикл вставки. Объявляем, сколько раз будем производить вставку
Worksheets("2").Range("B1").Resize(y, x - 1).Offset(j + k, 0) = mass ' вставляем массив данных в одну ячейку с ее расширением до размеров массива данных y,x и с учетом сдвига по строкам на k
Worksheets("2").Range("A1").Resize(y, 1).Offset(j + k, 0) = WorksheetFunction.Transpose(DatArr) 'вставляем массив дат в одну ячейку с ее расширением до размеров массива дат y,x и со сдвигом по строкам на k
k = k + y - 1 'увеличиваем следующий сдвиг от начальной ячейки заданного диапазона на y
Next j
Worksheets("2").Activate
End Sub