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

Вход

Регистрация

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

 

= Мир MS Excel/Можно ли создать массив с различными типами данных? - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Можно ли создать массив с различными типами данных? (Макросы/Sub)
Можно ли создать массив с различными типами данных?
Юрий_Нд Дата: Воскресенье, 10.11.2019, 10:36 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 441
Репутация: 19 ±
Замечаний: 0% ±

Excel 2013
Доброго дня Всем.
Можно ли создать массив с различными типами данных?
Допустим имеется массив 3 на 4. Три строки и четыре колонки.
Хотелось бы, чтобы первая и вторая строка были типа по дабл, а третья строка типа string.
Я знаю, что можно создать массив с универсальными типами данных.
Но мне это "не подходит".
Спасибо _______________ Юрий.
 
Ответить
СообщениеДоброго дня Всем.
Можно ли создать массив с различными типами данных?
Допустим имеется массив 3 на 4. Три строки и четыре колонки.
Хотелось бы, чтобы первая и вторая строка были типа по дабл, а третья строка типа string.
Я знаю, что можно создать массив с универсальными типами данных.
Но мне это "не подходит".
Спасибо _______________ Юрий.

Автор - Юрий_Нд
Дата добавления - 10.11.2019 в 10:36
bmv98rus Дата: Воскресенье, 10.11.2019, 11:43 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4099
Репутация: 766 ±
Замечаний: 0% ±

Excel 2013/2016
Цитата Юрий_Нд, 10.11.2019 в 10:36, в сообщении № 1 ()
Но мне это "не подходит".
Почему?


Замечательный Временно просто медведь , процентов на 20.
 
Ответить
Сообщение
Цитата Юрий_Нд, 10.11.2019 в 10:36, в сообщении № 1 ()
Но мне это "не подходит".
Почему?

Автор - bmv98rus
Дата добавления - 10.11.2019 в 11:43
doober Дата: Воскресенье, 10.11.2019, 12:01 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте.
Этот вариант не подходит?
К сообщению приложен файл: 7291792.png (17.9 Kb)


 
Ответить
СообщениеЗдравствуйте.
Этот вариант не подходит?

Автор - doober
Дата добавления - 10.11.2019 в 12:01
Gustav Дата: Воскресенье, 10.11.2019, 12:51 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2706
Репутация: 1123 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Если предполагается обмен с рабочим листом, то нет смысла уходить от двумерного массива типа Variant ("универсального"). При этом в процессе обработки можно повышенно контролировать тип присваиваемых значений при помощи конвертирующих функций и таким образом обеспечить построчную "однотипность" элементов массива:
[vba]
Код
arr(1, 1) = CDbl(...)
arr(2, 1) = CDbl(...)
arr(3, 1) = CStr(...)
[/vba]
Тип любого имеющегося элемента массива можно проверить при помощи функций VarType() или TypeName().

Если обмен с рабочим листом не предполагается, то имхо проще создать отдельные массивы соответствующего типа для каждой строки. Либо, если ТС расскажет о задаче подробнее, может, вообще нарисуется решение в кардинально другой плоскости.


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Воскресенье, 10.11.2019, 12:52
 
Ответить
СообщениеЕсли предполагается обмен с рабочим листом, то нет смысла уходить от двумерного массива типа Variant ("универсального"). При этом в процессе обработки можно повышенно контролировать тип присваиваемых значений при помощи конвертирующих функций и таким образом обеспечить построчную "однотипность" элементов массива:
[vba]
Код
arr(1, 1) = CDbl(...)
arr(2, 1) = CDbl(...)
arr(3, 1) = CStr(...)
[/vba]
Тип любого имеющегося элемента массива можно проверить при помощи функций VarType() или TypeName().

Если обмен с рабочим листом не предполагается, то имхо проще создать отдельные массивы соответствующего типа для каждой строки. Либо, если ТС расскажет о задаче подробнее, может, вообще нарисуется решение в кардинально другой плоскости.

Автор - Gustav
Дата добавления - 10.11.2019 в 12:51
Юрий_Нд Дата: Воскресенье, 10.11.2019, 13:21 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 441
Репутация: 19 ±
Замечаний: 0% ±

Excel 2013
Почему?

Мне хотелось бы, чтобы это было дополнительной подсказкой от ошибок.
Если я, допустим, захочу случайно записать стринговую переменную в тип данных Double, Excel подскажет мне, что "здесь что-то не в порядке".
-----------------------------------------------------------------
Этот вариант не подходит?

Насколько я понимаю, Excel самостоятельно определяет тип данных.
В любом случае большое спасибо, но к сожалению, повторюсь, что мне хотелось бы самостоятельно и заранее определять тип данных.


Сообщение отредактировал Юрий_Нд - Воскресенье, 10.11.2019, 13:26
 
Ответить
Сообщение
Почему?

Мне хотелось бы, чтобы это было дополнительной подсказкой от ошибок.
Если я, допустим, захочу случайно записать стринговую переменную в тип данных Double, Excel подскажет мне, что "здесь что-то не в порядке".
-----------------------------------------------------------------
Этот вариант не подходит?

Насколько я понимаю, Excel самостоятельно определяет тип данных.
В любом случае большое спасибо, но к сожалению, повторюсь, что мне хотелось бы самостоятельно и заранее определять тип данных.

Автор - Юрий_Нд
Дата добавления - 10.11.2019 в 13:21
Юрий_Нд Дата: Воскресенье, 10.11.2019, 14:39 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 441
Репутация: 19 ±
Замечаний: 0% ±

Excel 2013
Уважаемые bmv98rus, doober, Gustav.
Спасибо за ответы.
... создать отдельные массивы соответствующего типа для каждой строки
Так я и делал, до обращения на форум. Но сегодня подумал, возможно можно сделать как-то лучше...
Получается что нельзя. В любом случае большое спасибо.
 
Ответить
СообщениеУважаемые bmv98rus, doober, Gustav.
Спасибо за ответы.
... создать отдельные массивы соответствующего типа для каждой строки
Так я и делал, до обращения на форум. Но сегодня подумал, возможно можно сделать как-то лучше...
Получается что нельзя. В любом случае большое спасибо.

Автор - Юрий_Нд
Дата добавления - 10.11.2019 в 14:39
bmv98rus Дата: Воскресенье, 10.11.2019, 15:57 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4099
Репутация: 766 ±
Замечаний: 0% ±

Excel 2013/2016
Цитата Юрий_Нд, 10.11.2019 в 14:39, в сообщении № 6 ()
Получается что нельзя
ну не совсем так, можно, но немного иначе, массив массивов в помощь.
[vba]
Код
Dim a(2)
Dim a1(2) As Double
Dim a2(2) As Integer
Dim a3(2) As String
a(0) = a1
a(1) = a2
a(2) = a3
a(2)(0) = "kjkj"
a(0)(0) = "kjkj"
[/vba]


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rus - Воскресенье, 10.11.2019, 15:59
 
Ответить
Сообщение
Цитата Юрий_Нд, 10.11.2019 в 14:39, в сообщении № 6 ()
Получается что нельзя
ну не совсем так, можно, но немного иначе, массив массивов в помощь.
[vba]
Код
Dim a(2)
Dim a1(2) As Double
Dim a2(2) As Integer
Dim a3(2) As String
a(0) = a1
a(1) = a2
a(2) = a3
a(2)(0) = "kjkj"
a(0)(0) = "kjkj"
[/vba]

Автор - bmv98rus
Дата добавления - 10.11.2019 в 15:57
Юрий_Нд Дата: Воскресенье, 10.11.2019, 18:21 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 441
Репутация: 19 ±
Замечаний: 0% ±

Excel 2013
bmv98rus, спасибо.
 
Ответить
Сообщениеbmv98rus, спасибо.

Автор - Юрий_Нд
Дата добавления - 10.11.2019 в 18:21
Апострофф Дата: Воскресенье, 10.11.2019, 19:04 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 444
Репутация: 122 ±
Замечаний: 0% ±

Excel 1997
Так ещё делают -
[vba]
Код
Type TA
  DBL As Double
  STR As String
  DT As Date
End Type

Sub ZXC()
Dim A(2) As TA
A(0).DBL = 0.1
A(1).DT = Now
End Sub
[/vba]
 
Ответить
СообщениеТак ещё делают -
[vba]
Код
Type TA
  DBL As Double
  STR As String
  DT As Date
End Type

Sub ZXC()
Dim A(2) As TA
A(0).DBL = 0.1
A(1).DT = Now
End Sub
[/vba]

Автор - Апострофф
Дата добавления - 10.11.2019 в 19:04
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Можно ли создать массив с различными типами данных? (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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