Как удалить ненужные элементы массива?

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Vaseninbox
Сообщения: 34
Зарегистрирован: 05 сен 2008, 15:11
Контактная информация:

Допустим, что имеется массив 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
Аватара пользователя
EducatedFool
Сообщения: 197
Зарегистрирован: 06 апр 2008, 14:03
Откуда: Россия, Урал
Контактная информация:

нужно получить укороченный массив MyArray(10)
Определитесь, что надо получить:
УКОРОЧЕННЫЙ массив MyArray(7) или неукороченный массив MyArray(10), где вместо нулей будет находиться пустая строка
Макросы для Excel, Word, CorelDRAW. Быстро, профессионально, недорого. http://ExcelVBA.ru/

Благодарности принимаются на кошелёк WebMoney: R318574877619 и Яндекс.Деньги: 41001335672216
Vaseninbox
Сообщения: 34
Зарегистрирован: 05 сен 2008, 15:11
Контактная информация:

Определитесь, что надо получить:
Спасибо за поправку.
Требуется получить укороченный массив MyArray(10), где вместо нулей, в элементах 8, 9 и 10, будет находится пустая строка. А ненулевые элементы должны быть упорядочены (смещены) как показано на примере. Спасибо.
nilem
Сообщения: 112
Зарегистрирован: 14 ноя 2008, 01:59
Откуда: Уфа

Вот файлик недавно делал (удаляем в массивах пусто и нули). Может, подойдет?
Вложения
Array EmptyZero.zip
(27.43 КБ) 63 скачивания
Vaseninbox
Сообщения: 34
Зарегистрирован: 05 сен 2008, 15:11
Контактная информация:

Спасибо за ответ. ) Но в этом примере проводятся операции над числами,которые находятся в ячейках на листе Excel...
Я же пишу пользовательскую функцию, в которой сначала все данные из нужных пользователю ячеек копируются в числовой массив (например, MyArray(10)), который обрабатывается не на листе, а в оперативной памяти. Потом над этим числовым массивом производится множество операций и результат вычислений выводится в какой-то ячейке.
Вот одна из производимых операций - это как раз удаление из массива пустых элементов и сортировка оставшихся элементов по порядку и без пробелов.
nilem
Сообщения: 112
Зарегистрирован: 14 ноя 2008, 01:59
Откуда: Уфа

А в примере разве не массивы? Диапазон ячеек сначала переносится в массив, убираются в массиве (именно в виртуальном массиве, а не на листе) пустые значения, а потом результат записывается на лист.
В обоих кодах есть циклы, которые как раз и делают это удаление. Т.е. для вашей обработки можно выдернуть только эти циклы.
Впрочем, может требуется что-то другое...
SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

Можно так:

Код: Выделить всё

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
Ответить