Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Массив на основе диапазона из одной ячейки - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Массив на основе диапазона из одной ячейки (Макросы/Sub)
Массив на основе диапазона из одной ячейки
fairylive Дата: Суббота, 05.11.2016, 21:11 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
Есть макрос в котором массивы задаются диапазонами Excel. Например:
[vba]
Код
arrTemp = Range("A1:C5").value
[/vba]
Тут всё ок. Массив получается двумерный. В данном случае arrTemp (1 to 5, 1 to 3)
Можно задать например и один столбец:
[vba]
Код
arrTemp = Range("A1:A5").value
[/vba]
Массив опять будет двумерным (правда уже не так понятно почему). В окне Locals мы увидим arrTemp Variant(1 to 5, 1 to 1). Допускаю что это просто такая запись одномерного массива. Не суть важно. Хотя если попытаться посчитать размерность массива (примеров функций в интернете много) то размерность будет 2. Допускаю что функции написаны не верно и не учитывают подобную запись.

Но вот когда массив уже задается диапазоном из одной ячейки появляется ошибка о не соответствии типов. Как её победить? Спотыкается если вдруг запись окажется вида:
[vba]
Код
arrTemp = Range("A1").value
[/vba]

В макросе есть необходимость в массив запихивать и много ячеек сразу и одну.
PS диапазоны задаются пользователем через Application.Inputbox


Сообщение отредактировал fairylive - Суббота, 05.11.2016, 22:37
 
Ответить
СообщениеЕсть макрос в котором массивы задаются диапазонами Excel. Например:
[vba]
Код
arrTemp = Range("A1:C5").value
[/vba]
Тут всё ок. Массив получается двумерный. В данном случае arrTemp (1 to 5, 1 to 3)
Можно задать например и один столбец:
[vba]
Код
arrTemp = Range("A1:A5").value
[/vba]
Массив опять будет двумерным (правда уже не так понятно почему). В окне Locals мы увидим arrTemp Variant(1 to 5, 1 to 1). Допускаю что это просто такая запись одномерного массива. Не суть важно. Хотя если попытаться посчитать размерность массива (примеров функций в интернете много) то размерность будет 2. Допускаю что функции написаны не верно и не учитывают подобную запись.

Но вот когда массив уже задается диапазоном из одной ячейки появляется ошибка о не соответствии типов. Как её победить? Спотыкается если вдруг запись окажется вида:
[vba]
Код
arrTemp = Range("A1").value
[/vba]

В макросе есть необходимость в массив запихивать и много ячеек сразу и одну.
PS диапазоны задаются пользователем через Application.Inputbox

Автор - fairylive
Дата добавления - 05.11.2016 в 21:11
Karataev Дата: Суббота, 05.11.2016, 21:16 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 641
Репутация: 226 ±
Замечаний: 0% ±

Excel
По такому принципу: проверяете, сколько ячеек в диапазоне, если одна ячейка, то одно действие, если несколько ячеек, то другое действие.
[vba]
Код
Sub Мой_макрос()

    Dim arr()
    
    If Range("A1").Cells.Count = 1 Then
        ReDim arr(1 To 1, 1 To 1)
        arr(1, 1) = Range("A1").Value
    Else
        arr() = Range("A1:A2").Value
    End If

End Sub
[/vba]
Массив опять будет двумерным (правда уже не так понятно почему).

Одномерный массив нельзя записать на лист столбиком, одномерный массив будет записываться в строчку. Поэтому используется двумерный массив с одним столбцом.




Сообщение отредактировал Karataev - Суббота, 05.11.2016, 21:20
 
Ответить
СообщениеПо такому принципу: проверяете, сколько ячеек в диапазоне, если одна ячейка, то одно действие, если несколько ячеек, то другое действие.
[vba]
Код
Sub Мой_макрос()

    Dim arr()
    
    If Range("A1").Cells.Count = 1 Then
        ReDim arr(1 To 1, 1 To 1)
        arr(1, 1) = Range("A1").Value
    Else
        arr() = Range("A1:A2").Value
    End If

End Sub
[/vba]
Массив опять будет двумерным (правда уже не так понятно почему).

Одномерный массив нельзя записать на лист столбиком, одномерный массив будет записываться в строчку. Поэтому используется двумерный массив с одним столбцом.

Автор - Karataev
Дата добавления - 05.11.2016 в 21:16
fairylive Дата: Суббота, 05.11.2016, 22:40 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
Karataev, спасибо! Так действительно работает. А я пытался ввести ещё одну переменную. В проекте их так уже хоть отбавляй. Ваш способ проще.
 
Ответить
СообщениеKarataev, спасибо! Так действительно работает. А я пытался ввести ещё одну переменную. В проекте их так уже хоть отбавляй. Ваш способ проще.

Автор - fairylive
Дата добавления - 05.11.2016 в 22:40
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Массив на основе диапазона из одной ячейки (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2016 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!