powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Функция Ексел с результом в нескольких ячейках.
20 сообщений из 20, страница 1 из 1
Функция Ексел с результом в нескольких ячейках.
    #36241638
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужна функция, которая сама определяет конец массива в столбце (столбцах) и пишет вычисляемое значение в соседнем столбце (столбцах).
В поцедуре все просто. Здесь все работает.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Public Sub FilB()
Dim i As Integer
Dim X As Range
Dim Y As Range
Set X = Sheets("Лист2").Range("b5")
Set Y = Sheets("Лист2").Range("c5")
i =  1 
Do While X.Cells(i,  1 ) <> ""
Y.Cells(i,  1 ) = X.Cells(i,  1 ) *  2 #
i = i +  1 
Loop
End Sub
Пишем аналогичную функцию.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Function FilterB(Tc As Double, X As Range) As Range
Dim i As Integer
i =  1 
Do While X.Cells(i,  1 ) <> ""
FilterB.Cells(i,  1 ) = X.Cells(i,  1 ) *  2 #
i = i +  1 
Loop
End Function
Этот код уже не работает.
Однако нужна именно функция.
Как-бы ее такую сделать?

"Есть многое на свете, друг Горацио, что и не сразу в голову придет."
М. Твен "Приключения Геккельбери Финна"
...
Рейтинг: 0 / 0
Функция Ексел с результом в нескольких ячейках.
    #36241650
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не работает при вызове из ячейки листа типа =FilterB(с1). Что, собственно и нужно.


"Есть многое на свете, друг Горацио, что и не сразу в голову придет."
М. Твен "Приключения Геккельбери Финна"
...
Рейтинг: 0 / 0
Функция Ексел с результом в нескольких ячейках.
    #36242021
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а шо в ошибке пишет?
...
Рейтинг: 0 / 0
Функция Ексел с результом в нескольких ячейках.
    #36242066
Korcar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
короч, так работает:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Function FilterB(Tc As Double, X As Range) As Range
  Dim i As Integer
  i =  1 
  Do While X.Cells(i,  1 ) <> ""
    X.Cells(i,  2 ) = X.Cells(i,  1 ) *  2 #
    i = i +  1 
  Loop
  Set FilterB = X.Cells.SpecialCells(xlLastCell)
End Function
только не ясно назначение переменной Тс
...
Рейтинг: 0 / 0
Функция Ексел с результом в нескольких ячейках.
    #36242255
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Korcarкороч, так работает:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Function FilterB(Tc As Double, X As Range) As Range
  Dim i As Integer
  i =  1 
  Do While X.Cells(i,  1 ) <> ""
    X.Cells(i,  2 ) = X.Cells(i,  1 ) *  2 #
    i = i +  1 
  Loop
  Set FilterB = X.Cells.SpecialCells(xlLastCell)
End Function
только не ясно назначение переменной Тс
У меня это не работает. Пишет, что циклическая ссылка. Но эт не выход. X и Y соовершенно необязательно рядом и м.б где угодно. Помог бы некий виртуальный Range, но я такого не знаю.
Переменнная Тс это просто случайные остатки реальной программы. Пробуем на кошках.:)
...
Рейтинг: 0 / 0
Функция Ексел с результом в нескольких ячейках.
    #36242896
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAОднако нужна именно функция.
Как-бы ее такую сделать?Никак. Функция не может изменять значения ячеек. Это осознанный запрет введеный разработчиками. Читай справку.
...
Рейтинг: 0 / 0
Функция Ексел с результом в нескольких ячейках.
    #36243222
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я это знаю. Однако адресом, ИМХО, м.б. Range. Скажем, как будем, например, делать операции с матрицами? В каждую ячейку свою функцию пихать? ИМХО, бред.
И, самое интересное, такие функции существуют - откройте встроенные функции.

"Есть многое на свете, друг Горацио, что и не сразу в голову придет."
М. Твен "Приключения Геккельбери Финна"
...
Рейтинг: 0 / 0
Функция Ексел с результом в нескольких ячейках.
    #36243246
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlYUBAОднако нужна именно функция.
Как-бы ее такую сделать?Никак. Функция не может изменять значения ячеек. Это осознанный запрет введеный разработчиками. Читай справку. Ладно. Давайте запустим макрос, начинающийся с инпутбокса, аналогичного вызову функции. Форму сделаем, а какие туда ставить элементы для ввода ячеек? - эт не знаю. :(
...
Рейтинг: 0 / 0
Функция Ексел с результом в нескольких ячейках.
    #36243258
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗЫ И еще передать туда щелчок мыши на листе?
...
Рейтинг: 0 / 0
Функция Ексел с результом в нескольких ячейках.
    #36243281
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAЯ это знаю. Однако адресом, ИМХО, м.б. Range. Скажем, как будем, например, делать операции с матрицами? В каждую ячейку свою функцию пихать? ИМХО, бред.Твое О не верно.
Хочешь с матрицами работать, делай sub или в каждую ячейку итоговой матрицы пиши вызов функции.

YUBAИ, самое интересное, такие функции существуют - откройте встроенные функции.Ну открой... Покажи конкретно, какая функция умеет изменять значение чужих ячеек.

YUBAЛадно. Давайте запустим макрос, начинающийся с инпутбокса, аналогичного вызову функции. Форму сделаем, а какие туда ставить элементы для ввода ячеек? - эт не знаю. :(Это уже другой разговор.
Код: plaintext
1.
2.
sub aaa()
     set myRange = InputBox(Prompt:="Укажи область", Type:= 8 )
     ' и работаешь с областью
YUBAИ еще передать туда щелчок мыши на листе?Куда "туда"? В работающий макрос? Никак. Пока макрос не закончится, никаких щелчков мыши на листе быть не может.
Хочешь запускать свой макрос по щелчку мыши - перехватывай Worksheet_SelectionChange. Примеров тут на форуме полно.
...
Рейтинг: 0 / 0
Функция Ексел с результом в нескольких ячейках.
    #36243368
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl[
Код: plaintext
1.
2.
sub aaa()
     set myRange = InputBox(Prompt:="Укажи область", Type:= 8 )
     ' и работаешь с областью
Нет такого

Код: plaintext
1.
'Syntax
InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])
...
Рейтинг: 0 / 0
Функция Ексел с результом в нескольких ячейках.
    #36243377
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlYUBA

[quot YUBA]И, самое интересное, такие функции существуют - откройте встроенные функции.Ну открой... Покажи конкретно, какая функция умеет изменять значение чужих ячеек. ТРАНСП
...
Рейтинг: 0 / 0
Функция Ексел с результом в нескольких ячейках.
    #36243483
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
YUBAИ еще передать туда щелчок мыши на листе?Куда "туда"? В работающий макрос? Никак. Пока макрос не закончится, никаких щелчков мыши на листе быть не может.
Хочешь запускать свой макрос по щелчку мыши - перехватывай Worksheet_SelectionChange. Примеров тут на форуме полно. Когда форма открыта для ввода, с листом можно делать что угодно, Хотя находишься в макросе.
...
Рейтинг: 0 / 0
Функция Ексел с результом в нескольких ячейках.
    #36243601
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется что вполне можно стандартными функциями обойтись и ничего не городить своего. Опишите задачу с примером если хотите.
...
Рейтинг: 0 / 0
Функция Ексел с результом в нескольких ячейках.
    #36243984
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Функция может возвращать массив.
Но ее нужно и вводить как функцию массива по Ctrl-Shift-Enter. Об этом, кстати, упоминается и в справке по штатной функции ТРАНСП(), которая приводилась здесь как пример.

Вот пример кода пользовательской функции транспонирования массива, выдающая результат сразу в несколько ячеек:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
' Функция транспонирорвания массива Rng
' Ввод формулы в ячейки должен завершаться Ctr-Shift-Enter вместо Enter
Function MTransp(Rng As Range)
  Dim rs&, cs&, r&, c&, Matrix1(), Matrix2()
  Matrix1() = Rng.Value
  rs = UBound(Matrix1,  1 )
  cs = UBound(Matrix1,  2 )
  ReDim Matrix2( 1  To cs,  1  To rs)
  For r =  1  To rs
    For c =  1  To cs
      Matrix2(c, r) = Matrix1(r, c)
    Next
  Next
  MTransp = Matrix2()
End Function

Файл примера прилагается.
Аналогично можно выпонить и другие функции, результатом которых будет массив
...
Рейтинг: 0 / 0
Функция Ексел с результом в нескольких ячейках.
    #36246500
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAWhite Owl[
Код: plaintext
1.
2.
sub aaa()
     set myRange = InputBox(Prompt:="Укажи область", Type:= 8 )
     ' и работаешь с областью
Нет такого

Код: plaintext
1.
'Syntax
InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])
У Экселя существует две разные функции InputBox.
Та которая принадлежит библиотеке VBA (и является общей с остальными продуктами Офиса) не имеет параметра Type. А тот InputBox который принадлежит самому Экселю и является методом объекта Application имеет параметр Type...
...
Рейтинг: 0 / 0
Функция Ексел с результом в нескольких ячейках.
    #36246510
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAWhite OwlYUBA

[quot YUBA]И, самое интересное, такие функции существуют - откройте встроенные функции.Ну открой... Покажи конкретно, какая функция умеет изменять значение чужих ячеек. ТРАНСПИ где там изменение ЧУЖИХ ячеек?
Каждая из ячеек получающая результат будет имеет в себе копию функции.
...
Рейтинг: 0 / 0
Функция Ексел с результом в нескольких ячейках.
    #36246573
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeggasadМне кажется что вполне можно стандартными функциями обойтись и ничего не городить своего. Опишите задачу с примером если хотите.
повторюсь, но третий раз предлагать не буду
чтобы вы зря не спорили: никакая функция листа, в т.ч. самописная не может изменять значений других ячеек или прочих объектов Эксель. По моему есть какое-то исключение, запамятовал (нужно на форуме поискать, то ли примечания менять можно, то ли что-то такое), но вспоминать не буду, т.к. это дела не меняет.
Если хотите выложите пример той задачки, которую нужно решать.
...
Рейтинг: 0 / 0
Функция Ексел с результом в нескольких ячейках.
    #36246730
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlYUBA
ТРАНСП

И где там изменение ЧУЖИХ ячеек?
Каждая из ячеек получающая результат будет имеет в себе копию функции.
Чужих ячеек функция изменять не может, это правда, но может менять сразу несколько своих, если она введена как (одна) функция массива.

Функция массива, введенная не в одну ячейку, а в диапазон ячеек (выделить диапазон, ввести формулу массива одну для всего диапазона, нажать Ctrl-Shift-Enter - см. приложенный выше пример) - это не одно и то же, как если бы ввести функцию в каждую из ячеек этого диапазона. То есть, утверждение , что «каждая из ячеек получающая результат будет иметь в себе копию функции» некорректно.

Главное отличие и преимущество функции массива, возвращающей массив, заключается в том, что медленный вызов пользовательской VBA-функции из объектной модели Excel выполняется один раз для заполнения всего диапазона, в отличие от многократного (медленного) вызова пользовательской функции из каждой ячейки этого диапазона. Чем больше размер массива, тем больше выигрыш в быстродействии функции массива, возвращающей массив по сравнению с вариантом вызова обычной пользовательской функции из каждой ячейки массива.
...
Рейтинг: 0 / 0
Функция Ексел с результом в нескольких ячейках.
    #36248417
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача в том, что как входной и так и выходной массивы определяются автоматом по первой ячейке (см Sub в 1-м посту темы). Думаю, что с функцией это действительно невозможно.
Решение вижу в Sub с формой ввода имитирующей форму при вводе функции. Т.е. с возможностью выбора необходимых входных и выходных параметров щелчком на ячейке и/или выделением диапазона.
Ручной ввод адресов не подходит.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Функция Ексел с результом в нескольких ячейках.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]