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

Вход

Регистрация

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

 

= Мир MS Excel/Массив с массивами или его аналогия - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Массив с массивами или его аналогия (Макросы/Sub)
Массив с массивами или его аналогия
Space240 Дата: Понедельник, 07.08.2017, 15:30 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Доброго времени суток. Есть вопрос, как можно практично реализовать присвоение массиву значений других массивов?
Если есть альтернативные варианты решения - буду рад их узнать.
Пример:
Есть массивы с животными, и их годовыми расходами по месяцам(1 To 12), плановыми и фактическими (0 To 1), где 0 - план, 1 - факт
[vba]
Код
Dim Lion(1 To 12, 0 To 1) As Integer
Dim Turtle(1 To 12, 0 To 1) As Integer
Dim Giraffe(1 To 12, 0 To 1) As Integer
[/vba]
Собираюсь для вывода таблицы создать массив, который будет собирать в себя эти массивы, чтобы не писать для каждого одно и тоже (такого плана?):
[vba]
Код
Dim Animals(1 To 3, 1 To 12, 0 To 1)
[/vba]
Первый уровень - имя массива животного, второй - месяц, третий - план\факт
Как можно реализовать в этот массив?
Конструкция вывода массива Animals примерно такая(это лишь приблизительный набросок, критика приветствуется):
(Ai - Массив с животным, Mi - Месяц, PFi - план\факт, Pos_y - строки, Pos_x - столбцы)
[vba]
Код
For Ai = 1 To 3
    For PFi = 0 To 1
        For Mi = 1 To 12
            Cells(Pos_y, Pos_x).Value = Arr_Y(Ai, Mi, PFi)
            Pos_x = Pos_x + 1
        Next Mi
        Pos_y = Pos_y + 1
    Next PFi
    Pos_y = Pos_y + 2
Next Ai
[/vba]
Вид таблицы:


Сообщение отредактировал Space240 - Понедельник, 07.08.2017, 16:18
 
Ответить
СообщениеДоброго времени суток. Есть вопрос, как можно практично реализовать присвоение массиву значений других массивов?
Если есть альтернативные варианты решения - буду рад их узнать.
Пример:
Есть массивы с животными, и их годовыми расходами по месяцам(1 To 12), плановыми и фактическими (0 To 1), где 0 - план, 1 - факт
[vba]
Код
Dim Lion(1 To 12, 0 To 1) As Integer
Dim Turtle(1 To 12, 0 To 1) As Integer
Dim Giraffe(1 To 12, 0 To 1) As Integer
[/vba]
Собираюсь для вывода таблицы создать массив, который будет собирать в себя эти массивы, чтобы не писать для каждого одно и тоже (такого плана?):
[vba]
Код
Dim Animals(1 To 3, 1 To 12, 0 To 1)
[/vba]
Первый уровень - имя массива животного, второй - месяц, третий - план\факт
Как можно реализовать в этот массив?
Конструкция вывода массива Animals примерно такая(это лишь приблизительный набросок, критика приветствуется):
(Ai - Массив с животным, Mi - Месяц, PFi - план\факт, Pos_y - строки, Pos_x - столбцы)
[vba]
Код
For Ai = 1 To 3
    For PFi = 0 To 1
        For Mi = 1 To 12
            Cells(Pos_y, Pos_x).Value = Arr_Y(Ai, Mi, PFi)
            Pos_x = Pos_x + 1
        Next Mi
        Pos_y = Pos_y + 1
    Next PFi
    Pos_y = Pos_y + 2
Next Ai
[/vba]
Вид таблицы:

Автор - Space240
Дата добавления - 07.08.2017 в 15:30
_Boroda_ Дата: Понедельник, 07.08.2017, 15:40 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Space240, Приложите файл в Excel и опишите что Вы конкретно хотите. Не просто всунуть что-то куда-то, а что в итоге нужно получить.
Ну и название темы тогда уж соответственно новому описанию поменяйте


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеSpace240, Приложите файл в Excel и опишите что Вы конкретно хотите. Не просто всунуть что-то куда-то, а что в итоге нужно получить.
Ну и название темы тогда уж соответственно новому описанию поменяйте

Автор - _Boroda_
Дата добавления - 07.08.2017 в 15:40
Udik Дата: Понедельник, 07.08.2017, 15:52 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Дык сделайте массив массивов
[vba]
Код

Dim arrAll(1 To 3)

    arrAll(1) = Lion
    arrAll(2) = Turtle
    arrAll(3) = Giraffe
    Debug.Print arrAll(1)(1, 0)' выводим для Lion первый месяц, план
[/vba]


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
СообщениеДык сделайте массив массивов
[vba]
Код

Dim arrAll(1 To 3)

    arrAll(1) = Lion
    arrAll(2) = Turtle
    arrAll(3) = Giraffe
    Debug.Print arrAll(1)(1, 0)' выводим для Lion первый месяц, план
[/vba]

Автор - Udik
Дата добавления - 07.08.2017 в 15:52
Space240 Дата: Понедельник, 07.08.2017, 16:01 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Приложите файл в Excel

Боюсь, файл приложить не смогу - это только фрагмент
название темы

Предложите пример ;)

Дык сделайте массив массивов

Не подумал, что так будет работать, сейчас опробую
 
Ответить
Сообщение
Приложите файл в Excel

Боюсь, файл приложить не смогу - это только фрагмент
название темы

Предложите пример ;)

Дык сделайте массив массивов

Не подумал, что так будет работать, сейчас опробую

Автор - Space240
Дата добавления - 07.08.2017 в 16:01
Space240 Дата: Понедельник, 07.08.2017, 16:06 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Не подумал, что так будет работать, сейчас опробую
Работать не хочет, Type mistmatch при присвоении YA(1) = Animal
[vba]
Код
Dim Animal(1 To 12, 0 To 1) As String
Dim YA(1 To 3) As String
Dim Res As String
Animal(1, 0) = 425
Animal(2, 0) = 375
YA(1) = Animal
Res = YA(1)(1, 0)
Debug.Print Res
[/vba]


Сообщение отредактировал Space240 - Понедельник, 07.08.2017, 16:15
 
Ответить
Сообщение
Не подумал, что так будет работать, сейчас опробую
Работать не хочет, Type mistmatch при присвоении YA(1) = Animal
[vba]
Код
Dim Animal(1 To 12, 0 To 1) As String
Dim YA(1 To 3) As String
Dim Res As String
Animal(1, 0) = 425
Animal(2, 0) = 375
YA(1) = Animal
Res = YA(1)(1, 0)
Debug.Print Res
[/vba]

Автор - Space240
Дата добавления - 07.08.2017 в 16:06
Udik Дата: Понедельник, 07.08.2017, 16:14 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Type mistmatch при присвоении новому массиву названий массивов


Быть не может, у меня работает.
К сообщению приложен файл: 2986307.xlsm (13.6 Kb)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
Сообщение
Type mistmatch при присвоении новому массиву названий массивов


Быть не может, у меня работает.

Автор - Udik
Дата добавления - 07.08.2017 в 16:14
Space240 Дата: Понедельник, 07.08.2017, 16:17 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
у меня работает

Да, убрал тип из Dim YA(1 To 3) и заработало
 
Ответить
Сообщение
у меня работает

Да, убрал тип из Dim YA(1 To 3) и заработало

Автор - Space240
Дата добавления - 07.08.2017 в 16:17
Space240 Дата: Понедельник, 07.08.2017, 16:19 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Udik, Спасибо за вариант решения :)
 
Ответить
СообщениеUdik, Спасибо за вариант решения :)

Автор - Space240
Дата добавления - 07.08.2017 в 16:19
_Boroda_ Дата: Понедельник, 07.08.2017, 16:40 | Сообщение № 9
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
файл приложить не смогу - это только фрагмент
А нам весь Ваш файл и не нужен. Нужен кусок, позволяющий понять причину появления такой Вашей хотелки
Предложите пример
Если Вас устроил массив массивов, то все нормально.
Я, прочитав Ваше первоначальное название, именно так Вас и понял и даже именно это и предложить хотел, но потом, внимательно прочитав текст темы и посмотрев под лупой картинку, очень усомнился в том, что Вам именно это нужно и потому файл-пример и попросил.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
файл приложить не смогу - это только фрагмент
А нам весь Ваш файл и не нужен. Нужен кусок, позволяющий понять причину появления такой Вашей хотелки
Предложите пример
Если Вас устроил массив массивов, то все нормально.
Я, прочитав Ваше первоначальное название, именно так Вас и понял и даже именно это и предложить хотел, но потом, внимательно прочитав текст темы и посмотрев под лупой картинку, очень усомнился в том, что Вам именно это нужно и потому файл-пример и попросил.

Автор - _Boroda_
Дата добавления - 07.08.2017 в 16:40
Space240 Дата: Среда, 09.08.2017, 13:52 | Сообщение № 10
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
кусок, позволяющий понять причину

Если вкратце, из базы собираются массивы, а потом просто годовой вывод, чтобы потом не путаться, решил сделать для каждого типа отдельный массив, вместо объединения всего в один, т.к., потом с ним будут работать другие люди, решил не усложнять:
[vba]
Код
Public T1_Year(1 To 12, 0 To 1) As Integer
Public T1_Week(0 To 4, 0 To 1) As Integer
Public T2_Year(1 To 12, 0 To 1) As Integer
Public T2_Week(0 To 4, 0 To 1) As Integer
Public T2_Year_L1(1 To 12, 0 To 1) As Integer
Public T2_Week_L1(0 To 4, 0 To 1) As Integer
Public T2_Year_L2(1 To 12, 0 To 1) As Integer
Public T2_Week_L2(0 To 4, 0 To 1) As Integer
Public T2_Year_L3(1 To 12, 0 To 1) As Integer
Public T2_Week_L3(0 To 4, 0 To 1) As Integer
[/vba]
 
Ответить
Сообщение
кусок, позволяющий понять причину

Если вкратце, из базы собираются массивы, а потом просто годовой вывод, чтобы потом не путаться, решил сделать для каждого типа отдельный массив, вместо объединения всего в один, т.к., потом с ним будут работать другие люди, решил не усложнять:
[vba]
Код
Public T1_Year(1 To 12, 0 To 1) As Integer
Public T1_Week(0 To 4, 0 To 1) As Integer
Public T2_Year(1 To 12, 0 To 1) As Integer
Public T2_Week(0 To 4, 0 To 1) As Integer
Public T2_Year_L1(1 To 12, 0 To 1) As Integer
Public T2_Week_L1(0 To 4, 0 To 1) As Integer
Public T2_Year_L2(1 To 12, 0 To 1) As Integer
Public T2_Week_L2(0 To 4, 0 To 1) As Integer
Public T2_Year_L3(1 To 12, 0 To 1) As Integer
Public T2_Week_L3(0 To 4, 0 To 1) As Integer
[/vba]

Автор - Space240
Дата добавления - 09.08.2017 в 13:52
InExSu Дата: Среда, 09.08.2017, 20:39 | Сообщение № 11
Группа: Друзья
Ранг: Ветеран
Сообщений: 648
Репутация: 96 ±
Замечаний: 0% ±

Excel 2010, 365
Усложнять просто, упрощать сложно.
Может два измерения за глаза?
К сообщению приложен файл: 8904414.png (29.1 Kb)


Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac
 
Ответить
СообщениеУсложнять просто, упрощать сложно.
Может два измерения за глаза?

Автор - InExSu
Дата добавления - 09.08.2017 в 20:39
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Массив с массивами или его аналогия (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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