Страница 1 из 1
Как удалить ненужные элементы массива?
Добавлено: 27 авг 2010, 14:18
Vaseninbox
Допустим, что имеется массив MyArray(10), объявленный As Variant. Из него, убрав элементы, равные 0, нужно получить укороченный массив MyArray(10). В массиве MyArray(10) элементы 8, 9 и 10 могут оставаться пустыми или равными 0.
Как это сделать? Спасибо.
Код: Выделить всё
До После
MyArray(10) MyArray(10)
1 1
0 5
5 6
6 8
0 6
8 4
6 5
0
4
5
Re: Как удалить ненужные элементы массива?
Добавлено: 27 авг 2010, 14:55
EducatedFool
нужно получить укороченный массив MyArray(10)
Определитесь, что надо получить:
УКОРОЧЕННЫЙ массив MyArray(7) или неукороченный массив MyArray(10), где вместо нулей будет находиться пустая строка
Re: Как удалить ненужные элементы массива?
Добавлено: 27 авг 2010, 15:05
Vaseninbox
Определитесь, что надо получить:
Спасибо за поправку.
Требуется получить укороченный массив MyArray(10), где вместо нулей, в элементах 8, 9 и 10, будет находится пустая строка. А ненулевые элементы должны быть упорядочены (смещены) как показано на примере. Спасибо.
Re: Как удалить ненужные элементы массива?
Добавлено: 27 авг 2010, 18:47
nilem
Вот файлик недавно делал (удаляем в массивах пусто и нули). Может, подойдет?
Re: Как удалить ненужные элементы массива?
Добавлено: 30 авг 2010, 14:29
Vaseninbox
Спасибо за ответ. ) Но в этом примере проводятся операции над числами,которые находятся в ячейках на листе Excel...
Я же пишу пользовательскую функцию, в которой сначала все данные из нужных пользователю ячеек копируются в числовой массив (например, MyArray(10)), который обрабатывается не на листе, а в оперативной памяти. Потом над этим числовым массивом производится множество операций и результат вычислений выводится в какой-то ячейке.
Вот одна из производимых операций - это как раз удаление из массива пустых элементов и сортировка оставшихся элементов по порядку и без пробелов.
Re: Как удалить ненужные элементы массива?
Добавлено: 30 авг 2010, 15:34
nilem
А в примере разве не массивы? Диапазон ячеек сначала переносится в массив, убираются в массиве (именно в виртуальном массиве, а не на листе) пустые значения, а потом результат записывается на лист.
В обоих кодах есть циклы, которые как раз и делают это удаление. Т.е. для вашей обработки можно выдернуть только эти циклы.
Впрочем, может требуется что-то другое...
Re: Как удалить ненужные элементы массива?
Добавлено: 01 сен 2010, 10:34
SAS888
Можно так:
Код: Выделить всё
Option Base 1
Sub Main()
Dim i As Integer, j As Integer, myArray, temp()
myArray = Array(1, 0, 5, 6, 0, 8, 6, 0, 4, 5)
ReDim temp(LBound(myArray) To UBound(myArray)): j = 1
For i = LBound(temp) To UBound(temp)
If myArray(i) <> 0 And myArray(i) <> "" Then
temp(j) = myArray(i): j = j + 1
End If: Next: myArray = temp
End Sub