| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как сделать функцию для вывода матрицы на лист Excel?

Как сделать функцию для вывода матрицы на лист Excel?

Ответ
Поиск в этой теме
Непрочитано 24.01.2023, 14:02 #1
Как сделать функцию для вывода матрицы на лист Excel?
МишаИнженер
 
Регистрация: 14.12.2008
Сообщений: 1,079

В VBA Excel сделал 2 функции для создания матриц 3х3:
Код:
[Выделить все]
Public Function Матрица0() As Variant
Dim dM(1 To 3, 1 To 3) As Double
Dim I As Integer, J As Integer, K As Integer
   K = 1
   For I = 1 To 3
      For J = 1 To 3
         dM(I, J) = K
         K = K + 1
      Next J
   Next I
   Матрица0 = dM
End Function

Public Function Матрица(ix As Integer, jy As Integer) As Variant
Dim dM(1 To 3, 1 To 3) As Double
Dim I As Integer, J As Integer, K As Integer
   K = 1
   For I = 1 To 3
      For J = 1 To 3
         dM(I, J) = K
         K = K + 1
      Next J
   Next I
   Матрица = dM(ix, jy)
End Function
Пробовал вывести эти функции как формулы МАССИВА в ячейки Excel
Функция "Матрица0" выдает ошибку и не работает в формуле массива.
Функция "Матрица" в формуле массива выводит только "1".
А надо чтобы выводились 1,2,3,4,5,6 и тд.
Как вывести матрицу 1,2,3,4,5,6 и тд из функции VBA на лист Excel?

Миниатюры
Нажмите на изображение для увеличения
Название: МатрицаИзVBAExcel.png
Просмотров: 29
Размер:	29.5 Кб
ID:	252803  

Вложения
Тип файла: zip Матрица.zip (16.8 Кб, 7 просмотров)

Просмотров: 1563
 
Непрочитано 24.01.2023, 14:21
#2
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,039


а зачем формула массива? Собираете в массиве типа Variant размерностью (1 To 3, 1 to 3) значения и потом одним присваиванием диапазону выводите на лист

----- добавлено через ~10 мин. -----
типа такого

Код:
[Выделить все]
Public Sub SetMatrix(ByVal aRow As Long, ByVal aColumn As Integer)
  Dim lImg As Variant: Redim lImg(1 To 3, 1 To 3)
  Dim I As Integer, J As Integer, K As Integer
  K = 1
  For I = 1 To 3
     For J = 1 To 3
        lImg(I, J) = K
        K = K + 1
     Next J
  Next I
  ActiveSheet.Range(Cells(aRow, aColumn), Cells(aRow + 2, aColumn + 2)) = lImg
End Sub

Public Sub Test001()
  SetMatrix 10, 10
End Sub

Последний раз редактировалось Сергей812, 24.01.2023 в 14:33.
Сергей812 вне форума  
 
Непрочитано 24.01.2023, 14:41
#3
Петр-и-Алекс


 
Регистрация: 18.01.2021
Сообщений: 404


На мой взгляд, тема должна быть перемещена в раздел "функции".
И вообще, Excel достоен иметь самостоятельный раздел на этом форуме.

----- добавлено через ~6 мин. -----
как по мне, а "матрица" это один объект, а не набор из девяти...
так что... перебирать элементы через For ... некузяво как то

----- добавлено через ~2 ч. -----
Миша, глянте вот это https://excelpedia.ru/makrosi-v-excel/massivi-v-vba
Должно породить новые идеи по работе с матрицами.
Имею ввиду разделы:"For Each" и "Чтение из диапазона ячеек в массив". и еще всякое

Последний раз редактировалось Петр-и-Алекс, 24.01.2023 в 14:48.
Петр-и-Алекс вне форума  
 
Непрочитано 25.01.2023, 10:30
1 | #4
Dinoxromniy


 
Регистрация: 14.09.2020
Санкт-Петербург
Сообщений: 332


Цитата:
Сообщение от МишаИнженер Посмотреть сообщение
Функция "Матрица" в формуле массива выводит только "1".
Потому что у вас в аргументах всех ячеек две единицы, в каждой ячейке и отрабатывается строчка Матрица = dM(1, 1)
По факту формула массива пишется не так, первый аргумент должен содержать диапазон всех Х, второй - диапазон со всеми Y. А ваш код заточен под обработку одной пары индексов: Function Матрица(ix As Integer, jy As Integer) As Variant
Если формулу вводить не как формулу массива, и протянуть аргументы как положено - все работает.

Цитата:
Сообщение от МишаИнженер Посмотреть сообщение
Функция "Матрица0" выдает ошибку и не работает в формуле массива.
... по причине банальной опечатки - должно быть "Матрица0()" со скобками как и у любой другой функции. Если поставить скобки - в актуальном офисе все прекрасно работает (но тут оговорка, что формулы массива в 2021 версии слегка допилили до ума, тестировал на нем).

----- добавлено через ~8 мин. -----
Цитата:
Сообщение от Петр-и-Алекс Посмотреть сообщение
Имею ввиду разделы:"For Each" и "Чтение из диапазона ячеек в массив"
С таким раскладом проще вбить как формулу массива ={1;2;3:4;5;6:7;8;9} и будет ровно нужный результат. Если нужно менять цыферки - значит VBA функция, которая генерирует такую строку.
Dinoxromniy вне форума  
 
Автор темы   Непрочитано 25.01.2023, 13:02
#5
МишаИнженер


 
Регистрация: 14.12.2008
Сообщений: 1,079


Цитата:
Сообщение от Dinoxromniy Посмотреть сообщение
по причине банальной опечатки - должно быть "Матрица0()" со скобками как и у любой другой функции
Спасибо Dinoxromniy Вам большое! Все заработало. Теперь без труда можно выводить матрицы из VBA на лист Excel.
Вложения
Тип файла: zip Матрица.zip (17.0 Кб, 5 просмотров)
МишаИнженер вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как сделать функцию для вывода матрицы на лист Excel?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработка ПОС, искусство проектирования Tyhig Технология и организация строительства 117 25.11.2021 17:38
как сделать твердотельную модель и сделать ее чертеж, потом перенести в солидворкс denya43 AutoCAD 5 24.12.2012 18:42
Excel 2003: Можно ли сделать ссылку на листы в книге. Astartes Прочее. Программное обеспечение 4 12.07.2012 13:42
Как сделать окно Autocad активным при запуске из VBA Excel? AlexV Программирование 1 20.08.2009 12:40
Проблема вставки диаграмм в ACAD 2009 из Excel 2007 ST2 AutoCAD 1 26.05.2009 01:30