Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2012, 14:59   #1
Maxby
Новичок
Джуниор
 
Регистрация: 28.02.2012
Сообщений: 2
По умолчанию Есть массив (1 2 4), нужно получить из него другой массив, путем вычета из следующего числа предыдущее

Доброго времени суток. Мне нужно посчитать первые разности. Например. Есть массив (1 2 4), нужно получить из него другой массив, путем вычета из следующего числа предыдущее, то есть 4-2=2 и 2-1=1, получаем новый массив (2 1). Вот код, выводит ошибку "Type mismatch" ничего не подчеркивая. Не знаю, где там у меня несовпадение.

Код:
Sub m_x()
 
 
Dim Массив_1() As Variant, Массив_2() As Variant
Dim n As Integer, i As Integer, j As Integer, k As Integer
n = 10
ReDim Массив_1(n)
k = 9
ReDim Массив_2(k)
For i = 1 To 10
    Массив_1(i) = Worksheets("Лист1").Range("A1").EntireColumn
Next i
For j = 1 To 10
    Массив_2(j) = Массив_1(j + 1) - Массив_1(j)
Next j
End Sub
Подскажите пожалуйста.
Maxby вне форума Ответить с цитированием
Старый 28.02.2012, 21:04   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Worksheets("Лист1").Range("A1").Ent ireColumn - это массив значений ВСЕГО первого столбца. Вы помещаете его в первый элемент массива Массив_1, и ошибки тут нет: Variant может содержать массив. То же самое Вы помещаете в другие элементы массива.
А вот при вычитании возникает ошибка, т.к. в VBA можно вычитать только единичные значения, а не массивы.

Можно написать
Код:
Массив_1(i) = Worksheets("Лист1").Cells(i, 1) 'массив считывается из столбца
'или
Массив_1(i) = Worksheets("Лист1").Cells(1, i) 'массив считывается из строки
exceleved@yandex.ru Яндекс.Деньги: 410011500007619

Последний раз редактировалось Казанский; 28.02.2012 в 21:07.
Казанский вне форума Ответить с цитированием
Старый 28.02.2012, 21:25   #3
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

А формула листа может работать с диапазоном, и это можно использовать в VBA:
Код:
Sub bb()
Dim Массив_2()
Массив_2() = [A2:A10-A1:A9] 'двумерный массив (1 to 9, 1 to 1)
Массив_2() = Application.Transpose([A2:A10-A1:A9]) 'одномерный массив (1 to 9)
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 03.03.2012, 23:49   #4
Maxby
Новичок
Джуниор
 
Регистрация: 28.02.2012
Сообщений: 2
По умолчанию

Спасибо Вам.
Maxby вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно получить данные из wav-файла в массив. sazca C# (си шарп) 1 22.02.2012 12:08
сформировать массив и получить из него данные по фильтру gramp Microsoft Office Excel 9 10.04.2011 01:17
В один массив нужно переслать чётные, а в другой - нечетные элементы матрицы. ...Diman... Паскаль, Turbo Pascal, PascalABC.NET 4 15.01.2009 15:15
Дан двумерный массив случайных чисел. Построить одномерный из исходного, выбрав из него все числа кратные ProWinD Паскаль, Turbo Pascal, PascalABC.NET 2 16.06.2008 20:12