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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2010, 11:29   #1
Tomoa
Пользователь
 
Регистрация: 27.11.2009
Сообщений: 31
Вопрос как присвоить все три значения вектору В и вывести его как массив столбец при вызове функции

Доброго времени суток!
Помогите с выводом текста на лист Экселя.
Имеется следующий программный код:
Public Function ser(A)
Dim i As Integer, j As Integer, n As Integer, q As Integer, w As Integer, d As Integer
n = A.Rows.Count
Dim B() As Double
ReDim B(1 To 3, 1 To 1)
For i = 1 To n
For j = 1 To n
Select Case i
Case Is > j
q = q + A(i, j)
Case Is = j
w = w + A(i, j)
Case Is < j
d = d + A(i, j)
End Select
Next j
Next i
End Function

А вот как присвоить все три значения вектору В и вывести его как массив столбец при помощи вызова функции на листе Эксель не знаю... Подскажите пожалуйста
Tomoa вне форума Ответить с цитированием
Старый 07.03.2010, 13:31   #2
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Начну по порядку.Насклько мне известно в Ёкселе функция возвращает только одно значение в данном случае "ser" только в ту ячейку, в которой функция вызвана. И как правило именно аргументы (в данном случае он один и не объявлен его тип) участвуют при расчётах. То есть в функции должно присутсвовать "ser =".
i = A(i, j) вряд ли прокатит. Если A объявить как Range, то можно взять так: i = A.Formula(i, j)
Зачем объявлен и определён его размер массив B
Озвучте задачу полностью
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru

Последний раз редактировалось alex77755; 07.03.2010 в 14:12.
alex77755 вне форума Ответить с цитированием
Старый 07.03.2010, 14:06   #3
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Не знаю твоего условия. Выбери, что тебе нужно. Но вывод всё равно в одну ячейку.
Код:
Public Function ser(A As Range)
Dim i As Integer, j As Integer, n As Integer, q As Integer, w As Integer, d As Integer
''''''''Dim B() As Double
'''''''''n = A.Rows.Count
'''''''''ReDim B(1 To 3, 1 To 1)????????'
For i = 1 To A.Rows.Count
For j = 1 To A.Columns.Count
Select Case i
Case Is > j
q = q + A(i, j)
Case Is = j
w = w + A(i, j)
Case Is < j
d = d + A(i, j)
End Select
Next j
Next i
ser = q & ":" & w & ":" & d
End Function
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Старый 07.03.2010, 14:08   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

2 Tomoa:
см. вложение. Откройте код, там приведен пример - две элементарные функции. В первой колонке результат выведен, как функция, в 4-й колонке и дальше, как массив. Чтобы вывести данные как массив, в любой ячейке пишем =f1 (выбираем из функций, определенных пользователем), затем отмечаем эту ячейку и две правее, жмем F2, Ctrl+Shift+Enter. Как поправить ваш код, надеюсь сами разберетесь...

2 alex77755:
Цитата:
Насклько мне известно в Ёкселе функция возвращает только одно значение
сомнения были правильными из стандарных функций, например ЛИНЕЙН тоже может возвращать массив данных (если они затребованы).
Вложения
Тип файла: rar Книга268.rar (7.3 Кб, 13 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 07.03.2010 в 14:10.
IgorGO вне форума Ответить с цитированием
Старый 07.03.2010, 14:09   #5
Tomoa
Пользователь
 
Регистрация: 27.11.2009
Сообщений: 31
По умолчанию

Вот полное условие:
Составить программу вычисления сумм элементов матрицы А размера n x n, лежащих выше, ниже и на главной диагонали. Результат вычислений записать в одномерный массив.

"i = A(i, j) вряд ли прокатит. Если A объявить как Range, то можно взять так: i = A.Formula(i, j)"

если честно, то не совсем вас поняла
Tomoa вне форума Ответить с цитированием
Старый 07.03.2010, 14:22   #6
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Как вариан можно в качестве второго аргумента использовать предыдущую ячейку с нужной в ней буквой. И вызвать функцию во всех трёх ячейках
Код:
Public Function ser(A, v)
-------------------------
-------------------------
Select Case v
Case "q"
ser = q

Case "w"
ser = w

Case "d"
ser = d
End Select
End Function
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Старый 07.03.2010, 15:27   #7
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

IgorGO
Поражаюсь как хорошо ты знаешь формулы. Не сомневаюсь, что и всё задание сможешь решить с помощью формул без программы.
Но вопрос "составить программу". Так вот вопрос: как вывести програмно массив из функции: Sub может делать с ячейками што угодно, и массив вывести одним движением, а функция - нет. Даже если из функции вызвать процедуру и попытаться записать в другую ячейку - вываливатся. По крайне мере я пока не смог.
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Старый 07.03.2010, 17:26   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
Так вот вопрос: как вывести програмно массив из функции: Sub может делать с ячейками што угодно, и массив вывести одним движением, а функция - нет
1.А что мешает использовать в функции тот же код что и в процедуре и сделать "с ячейками што угодно"?
2.Я же привел пример, чуть выше, и на словах обьяснил, как этим пользоваться. Что там не выходит вывести данные в другую ячейку?
3.И последнее касательно начального вопроса: в самом конце, перед строкой End Function ser = array(q,w,d). Повторюсь, как вывести результаты в три отдельных ячейки - писал.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 08.03.2010, 20:42   #9
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Цитата:
Function ser = array(q,w,d)
Да это срабатывает. Но почему-то не всегда. Раз десять делал - не срабатывало. Попробовал правыми сонтрл-шифт - сработало. Снова левыми - работает. Причины не срабатывания не понял
Цитата:
А что мешает использовать в функции тот же код что и в процедуре и сделать "с ячейками што угодно"?
Не знаю что, но из процедуры выкидывает(без сообщения об ошибке) и выводит типа нет значения.
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как присвоить значение функции? boris-blade Microsoft Office Word 3 17.01.2010 17:09
Как передать адрес метода из dll в приложение и присвоить его событию OnClick? puga555 Общие вопросы Delphi 1 22.12.2009 17:04
неубиваемый вирус! все антивирусы не находят его! кто знает как его убрать? Yury111 Безопасность, Шифрование 12 05.06.2009 11:19
Как вывести один столбец в несколько??? M&Ms Microsoft Office Excel 9 21.07.2008 14:19
Как мне сделать так штоби при вводе массива все значения сами переносились по словам. Помогити плиз KSP Общие вопросы Delphi 7 24.09.2007 22:44