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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2009, 23:53   #1
mchip
Форумчанин
 
Регистрация: 24.06.2008
Сообщений: 516
По умолчанию Работа с массивами

Подскажите как убрать заданную область из массива
Например:

массив(1 to 5, 1 to 3)

как убрать массив (4, 1), массив(4, 2), массив (4,3).

не обнулить а удалить!
Можно сделать все! Было бы время, да деньги...
mchip вне форума Ответить с цитированием
Старый 22.04.2009, 00:02   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

что значит убрать? 5-ю строку сделать четвертой?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 22.04.2009, 00:03   #3
mchip
Форумчанин
 
Регистрация: 24.06.2008
Сообщений: 516
По умолчанию

Да, а 4 удалить
Можно сделать все! Было бы время, да деньги...
mchip вне форума Ответить с цитированием
Старый 22.04.2009, 00:27   #4
HighStar
 
Регистрация: 13.04.2009
Сообщений: 5
По умолчанию

Ну, как я понял, Вы хотите удалить из массива все элементы строки (столбца - не суть). Насколько мне известно, это возможно для динамических массивов и только для последней размерности массива.
То есть, задача была бы разрешима, если поменять размерности местами.
Например,
Dim Ar(1 to 3, 1 to 5)
Удалить 4-й столбец, т.е. Ar(1, 4), Ar(2, 4), Ar (3,4).
Вариант решения -
Код:
Sub Del4Column()
Dim Ar()
ReDim Ar(1 To 3, 1 To 5)
Dim r As Long, c As Long
'массив заполнил для теста, ну и чтоб понятнее было
For r = 1 To 3
  For c = 1 To 5
    Ar(r, c) = r & c
  Next c
Next r
'переносим пятый столбик в четвертый
For r = 1 To 3
  Ar(r, 4) = Ar(r, 5)
Next r
'удаляем пятый столбик
ReDim Preserve Ar(1 To 3, 1 To 4)
End Sub
Да, и если после удаляемого столбца более одного перемещаемого, придется в перенос вложить ещё один цикл.
HighStar вне форума Ответить с цитированием
Старый 22.04.2009, 06:31   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
это возможно для динамических массивов и только для последней размерности массива.
Абсолютно согласен. Но кто нам мешает транспонировать массивы? Удалить 4-ю строку можно так:
Код:
Sub Del4Row()
    Dim r As Long, c As Long, a()
    ReDim a(1 To 5, 1 To 3)
'Заполняем массив (для наглядности)
    For r = 1 To 5
        For c = 1 To 3
            a(r, c) = r + c
        Next
    Next
'Пусть "a" - это данный динамический массив, в котором нужно удалить 4-ю строку.
'переносим пятую строку в четвертую
    For c = 1 To 3
        a(4, c) = a(5, c)
    Next
    a = Application.Transpose(a) 'транспонируем массив
    ReDim Preserve a(1 To 3, 1 To 4) 'удаляем 5-й столбец
    a = Application.Transpose(a) 'транспонируем массив
End Sub
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 22.04.2009 в 06:36.
SAS888 вне форума Ответить с цитированием
Старый 22.04.2009, 11:04   #6
mchip
Форумчанин
 
Регистрация: 24.06.2008
Сообщений: 516
По умолчанию

А если столбиков (строк) сотни (тысячи)?
Можно сделать все! Было бы время, да деньги...
mchip вне форума Ответить с цитированием
Старый 22.04.2009, 11:18   #7
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Существует множество вариантов. Например, очистить все не нужные строки (столбцы), затем передвинуть все пустые строки (столбцы) в конец данной размерности, а затем изменить размерность с сохранением значений элементов массива. Можно применить сортировку и т.д. и т.п. Если же, Вам нужно строго удалить одну строку (столбец), и при этом нет никаких дополнительных, облегчающих (и, следовательно, ускоряющих) работу критериев, то тогда понадобится, как говорил HighStar, дополнительный цикл по передвижке строк (столбцов).
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 22.04.2009, 11:25   #8
mchip
Форумчанин
 
Регистрация: 24.06.2008
Сообщений: 516
По умолчанию

Спасибо! Видимо прийдется форматировать и обрабатывать на листе в ячейках.
Можно сделать все! Было бы время, да деньги...
mchip вне форума Ответить с цитированием
Старый 22.04.2009, 11:46   #9
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Подумайте еще раз...
При больших объемах данных, скорее всего, не смотря на возможно большее количество циклов, работа с массивами будет существенно быстрее, чем непосредственно с ячейками.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с массивами SYurik Microsoft Office Excel 11 21.03.2009 09:00
Работа с массивами MasterofCDM Общие вопросы Delphi 4 27.11.2008 23:45
Работа с массивами Neba Общие вопросы Delphi 7 26.11.2008 21:21
Работа с массивами Stelix Паскаль, Turbo Pascal, PascalABC.NET 1 20.06.2008 11:37
Работа с массивами rexec Microsoft Office Excel 12 21.04.2008 13:29