powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Пытаюсь сделать Эксель умнее, чем он есть?
39 сообщений из 39, показаны все 2 страниц
Пытаюсь сделать Эксель умнее, чем он есть?
    #34255330
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем мое почтение и всем, кто ответит, моя благодарность. Хочу сделать в Экселе две вещи, но боюсь, что он на такое не очень способен. А именно:

1. Указать порядок вычисления ячеек.
2. Обращаясь к юзерской функции из ячейки, передать в нее параметр типа Range.

Я действительно слишком много хочу?
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34255365
Фотография k-nike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч1. Указать порядок вычисления ячеек.
А можно узнать для чего? Вообще думаю что можно, задействуя событие xlCalculate.
Владимир Саныч2. Обращаясь к юзерской функции из ячейки, передать в нее параметр типа Range.
А в чем собственно проблема?
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34255439
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
k-nike Владимир Саныч1. Указать порядок вычисления ячеек.
А можно узнать для чего? Вообще думаю что можно, задействуя событие xlCalculate.
Владимир Саныч2. Обращаясь к юзерской функции из ячейки, передать в нее параметр типа Range.
А в чем собственно проблема?
согласен и тоже интересно, для чего нужен пункт 1? Неужели результат может зависеть от порядка вычисления?
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34255475
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Есть функция, которая помимо возвращения результата заносит нечто в глобальную переменную. Вторая функция только берет значение из этой переменной и возвращает его (чтобы второй раз не запускать вычисление). И я хочу, чтобы сначала вызывалась первая функция, а потом вторая. А происходит почему-то наоборот (хотя вторая вызывается даже в ячейке, расположенной ниже).

2. Видимо, я просто не знаю синтаксиса. Функция описана так:
Function xxx(r As Range) As Integer
Обращаюсь так:
=xxx(A1:B2)
Выдает ошибку.
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34255511
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч1. Есть функция, которая помимо возвращения результата заносит нечто в глобальную переменную. Вторая функция только берет значение из этой переменной и возвращает его (чтобы второй раз не запускать вычисление). И я хочу, чтобы сначала вызывалась первая функция, а потом вторая. А происходит почему-то наоборот (хотя вторая вызывается даже в ячейке, расположенной ниже).

2. Видимо, я просто не знаю синтаксиса. Функция описана так:
Function xxx(r As Range) As Integer
Обращаюсь так:
=xxx(A1:B2)
Выдает ошибку.

1. а если сделать проверку, проведено ли требуемое вычисление или нет. если нет - насильственно провести и поставить флаг, который снимется только когда изменятся влияющие данные (можно отслешивать и по ячейкам).

2. у меня вот так получилось (поместил в обычном модуле):
Код: plaintext
1.
2.
3.
Public Function xxx(r As Range) As Integer
    Application.Volatile
    xxx = r.Cells.Count
End Function
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34255520
MX -- ALEX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир СанычВсем мое почтение и всем, кто ответит, моя благодарность. Хочу сделать в Экселе две вещи, но боюсь, что он на такое не очень способен. А именно:

1. Указать порядок вычисления ячеек.
2. Обращаясь к юзерской функции из ячейки, передать в нее параметр типа Range.

Я действительно слишком много хочу?

не - не много - нормально

мы например реализовали виртуальный многопользовательский EXCEL
на сервере

он может все и как угодно
а результаты проецируются на реальные EXCELи подключенных клиентов

зверь
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34255547
Бабай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычВсем мое почтение и всем, кто ответит, моя благодарность. Хочу сделать в Экселе две вещи, но боюсь, что он на такое не очень способен. А именно:

1. Указать порядок вычисления ячеек.
2. Обращаясь к юзерской функции из ячейки, передать в нее параметр типа Range.

Я действительно слишком много хочу?
1. косвенно можно реализовать завязавшись на последовательность ссылок.

пусть в а1 сидит число,
в а2 ваша функция1 и формула в а2 комбинирует типа =ф1(параметр) +а1-а1
в а3 формула =ф2()+а2-а2

должна выстрится последовательность вычисления а1->a2->a3
но я бы думал что-то другое - надо задачу видеть.

2. можно. объявляйте параметр функции как вариант или как рэндж и будет щастье.
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34255587
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vbapro1. а если сделать проверку, проведено ли требуемое вычисление или нет. если нет - насильственно провести и поставить флаг, который снимется только когда изменятся влияющие данные (можно отслешивать и по ячейкам).
Не получается, потому что таких пар ячеек много. Одним флагом не обойтись. Нужно еще, чтобы сначала вычислялась одна пара (в нужном порядке), потом следующая и т.д. Грубо говоря: A2, A3, B2, B3, C2, C3 и т.д.

бабай1. косвенно можно реализовать завязавшись на последовательность ссылок.
Да! Похоже, что это оно. Спасибо!

Насчет второго вопроса - вроде всё делаю правильно, а не выходит... Сейчас попробую еще.
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34255652
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, у Range есть метод .Calculate. иожно отключить пересчет на листе, выполнить расчеты в ячейках в требуемойочередности и включить пересчет листа на автомат
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34255658
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычВсем мое почтение и всем, кто ответит, моя благодарность. Хочу сделать в Экселе две вещи, но боюсь, что он на такое не очень способен. А именно:

1. Указать порядок вычисления ячеек.

А такой вариант не подойдет?
Код: plaintext
1.
2.
3.
4.
5.
    Application.Calculation = xlCalculationManual
    Range("D8").Calculate
    MsgBox Range("D8")
    Range("D7").Calculate
    MsgBox Range("D7")
    Application.Calculation = xlCalculationAutomatic
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34255817
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vbapro, vkodor Application.Calculation = xlCalculationManual
Range("D8").Calculate
MsgBox Range("D8")
Range("D7").Calculate
MsgBox Range("D7")
Application.Calculation = xlCalculationAutomatic
Большое спасибо, не знал про такие возможности. Очень подходит.
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34256249
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычНасчет второго вопроса - вроде всё делаю правильно, а не выходит... Сейчас попробую еще.
Понял. Ошибка возникает тогда, когда я пытаюсь что-то заносить в этот рейндж, переданный как параметр. Например:

Код: plaintext
1.
2.
3.
4.
5.
6.
Public Function xxx(r As Range) As Integer
    xxx = r.Cells.Count
    Dim v As Range
    For Each v In r.Cells
        v =  1 
    Next
End Function

Так нельзя?
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34256310
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч Владимир СанычНасчет второго вопроса - вроде всё делаю правильно, а не выходит... Сейчас попробую еще.
Понял. Ошибка возникает тогда, когда я пытаюсь что-то заносить в этот рейндж, переданный как параметр. Например:

Код: plaintext
1.
2.
3.
4.
5.
6.
Public Function xxx(r As Range) As Integer
    xxx = r.Cells.Count
    Dim v As Range
    For Each v In r.Cells
        v =  1 
    Next
End Function

Так нельзя?

хотел найти топик, не нашел. обсуждалось как-то, что пользовательская функция не может менять данных на листе. толmrj возвращать значения себя..
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34256354
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vbaproхотел найти топик, не нашел. обсуждалось как-то, что пользовательская функция не может менять данных на листе. толmrj возвращать значения себя..
Понятно. И как это обойти? Ведь в принципе-то Эксель позволяет менять значения данных программно. Если это нельзя сделать в пользовательской функции, то где? Только в обработчиках событий?
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34256374
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч
Понятно. И как это обойти?
вместо функций использовать процедуры
Код: plaintext
1.
2.
3.
4.
5.
6.
Public Sub xxx(r As Range) As Integer
    xxx = r.Cells.Count
    Dim v As Range
    For Each v In r.Cells
        v =  1 
    Next
End Sub
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34256407
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч vbaproхотел найти топик, не нашел. обсуждалось как-то, что пользовательская функция не может менять данных на листе. толmrj возвращать значения себя..
Понятно. И как это обойти? Ведь в принципе-то Эксель позволяет менять значения данных программно. Если это нельзя сделать в пользовательской функции, то где? Только в обработчиках событий?
или кнопка.. или пересмотреть концепцию..:)
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34256411
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkodor Владимир Саныч
Понятно. И как это обойти?
вместо функций использовать процедуры
Код: plaintext
1.
2.
3.
4.
5.
6.
Public Sub xxx(r As Range) As Integer
    xxx = r.Cells.Count
    Dim v As Range
    For Each v In r.Cells
        v =  1 
    Next
End Sub

как это? шутка?
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34256590
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vbaproкак это? шутка?
Пардон, конечно же "As Interger" - лишнее
я имел ввиду это
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Dim i%
Public Sub xxx(r As Range) 
    i = r.Cells.Count
    Dim v As Range
    For Each v In r.Cells
        v =  1 
    Next
End Sub
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34256698
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkodorвместо функций использовать процедуры
Да, но вызывать-то их откуда?

vbaproили кнопка.. или пересмотреть концепцию..:)
Ну, пересмотреть всегда можно. Это если действительно Эксель не тянет того, что я вздумал на него взвалить.
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34256711
Бабай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч Владимир СанычНасчет второго вопроса - вроде всё делаю правильно, а не выходит... Сейчас попробую еще.
Понял. Ошибка возникает тогда, когда я пытаюсь что-то заносить в этот рейндж, переданный как параметр. Например:

Код: plaintext
1.
2.
3.
4.
5.
6.
Public Function xxx(r As Range) As Integer
    xxx = r.Cells.Count
    Dim v As Range
    For Each v In r.Cells
        v =  1 
    Next
End Function

Так нельзя?

по форме такого сорта функция могла бы быть функцией массива. и возвращать массив значений.

(или она не должна явно вызываться из ячейки листа.
тогда саб или вычисления на како-нибудь событие.
событие придется подобрать или придумать (поместив кнопку на лист, например), иначе там тоже легко можно в цикл попасть без специальных усилий по остановке последовательных событий.
)


но по факту, то, что написано, примененное к самому себе выглядит как бесконечный рекурсивный цикл. т.е. прямо так не только нельзя, но и не должно быть льзя.


может возникнет желание хоть как-то похожую задачу обрисовать?
я хоть не спец не тока по акцессу, а и по екселю тоже не спец, но что-то может быть
и сообразилось разумное...

а про функции массива посмотри, например, здесь:
http://www.sql.ru/forum/actualthread.aspx?tid=369706
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34256751
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч vkodorвместо функций использовать процедуры
Да, но вызывать-то их откуда?

А откудо надо?
можно из реакций
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Private Sub Worksheet_Calculate()
    Application.EnableEvents = False
    Application.Run "xxx", Range("A1:A3")
    MsgBox i
    Call xxx(Range("A1:A4"))
    MsgBox i
    Application.EnableEvents = True
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    Application.Run "xxx", Target
    MsgBox i
    Call xxx(Target)
    MsgBox i
    Application.EnableEvents = True
End Sub

можно из модулей
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Public i%

Sub pr()
    Application.Run "xxx", Range("A1:A3")
    MsgBox i
    xxx Range("A1:A4")
    MsgBox i
End Sub

Sub xxx(r As Range)
    Dim v As Range
    i = r.Cells.Count
    For Each v In r.Cells
        v =  1 
    Next
End Sub
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34256870
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабайпо форме такого сорта функция могла бы быть функцией массива. и возвращать массив значений.
На самом деле у меня и есть массив. И я думал либо функцией с параметром, сидящей в ячейке, выдергивать из массива в ячейку соответствующий элемент (вопрос 1), либо закидывать значения в ячейки по мере вычисления массива (вопрос 2). Согласен, что результат запуска функции с побочным эффектом может быть непредсказуемым, когда функция вызывается неявным образом и неизвестное количество раз.

бабайно по факту, то, что написано, примененное к самому себе выглядит как бесконечный рекурсивный цикл. т.е. прямо так не только нельзя, но и не должно быть льзя.
К самому себе я вроде не собирался. :)))

бабайможет возникнет желание хоть как-то похожую задачу обрисовать?
Учебная программа по морфологии иврита. Есть одна функция, которая строит слово из морфем по известным правилам. Я думал завести массив и в нем по ходу работы функции накапливать комментарии о том, какие правила были задействованы. И тогда бы юзеру выдавалось не только само построенное слово, но и массив комментариев.

vkodorможно из модулей
И тогда кто будет обращаться к процедурам? В конечном счете все равно либо функции (что запрещено), либо обработчики событий. Или есть еще что-то?
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34256891
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычУчебная программа по морфологии иврита. Есть одна функция, которая строит слово из морфем по известным правилам. Я думал завести массив и в нем по ходу работы функции накапливать комментарии о том, какие правила были задействованы. И тогда бы юзеру выдавалось не только само построенное слово, но и массив комментариев.Эта функция от чего работает? От генератора случайных чисел или от чего-то, что ей юзер дает? Если генератора случайных чисел и от юзера ей ничего не нужно, то у вас месье проблема :) А если юзер этой функции что-то дает на вход, ну например корень слова, то можно уже сделать событие Worksheet_Change в котором делаем:
Код: plaintext
1.
2.
3.
if not (intersect(Target, Range("A:A")) is nothing) then
   запускаем процедуру формирования слова используя значение из Target.Range("A1") как параметр
   и пишем результат с коментариями в Target.Range("B1"), Target.Range("C1") и так далее.
end if
Ну и пусть теперь юзер задет корни слов в колонке A, в B он получит итоговое слово, а в C,D,E будут коментарии. Никаких функций листа вообще нет.

Владимир Саныч vkodorможно из модулей
И тогда кто будет обращаться к процедурам? В конечном счете все равно либо функции (что запрещено), либо обработчики событий. Или есть еще что-то?Еще можно из объектов лежащих на листе (кнопки, картинки, различные шейпы), можно добавить кнопку в тулбар или в меню, можно нарисовать пользовательскую модальную форму, а можно просто ткнуть Alt+F8 и запустить sub напрямую.
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34256907
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlЭта функция от чего работает? От генератора случайных чисел или от чего-то, что ей юзер дает?
Юзер дает корень и еще некоторые вещи в определенных ячейках. При изменении значения одной из ячеек функция запускается сама и выдает слово (и комментарии, которые пока еще у меня не работают).

Но у меня два режима работы. В одном на листе всего одно слово, исходный материал для него и вычисленные комментарии. Второй режим - отладочный, в нем вычисляется много слов с разными исходными данными, и там комментарии выводить не нужно. Хотелось бы, чтобы одна функция могла работать в обоих режимах.
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34256963
Бабай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Саныч
вероятно вердихт таков будет: если максимальный размер области результата фиксирован,
то фикнция массива к етому делу может прикрутиться удачнее саба, инкапсулировав в себе всякого рода очистки. Если фиксированной области для результата не получается, то что-то бегом саб только видно пока.

кнопка-педаль типа "вычислить вариантов" должна в твоей задаче смотреться.
или можно заложиться на изменения в фиксированной клетке с проверкой запонения прочих.

С екселем работаю мало и событий на листах не очень люблю.
по памяти - есть там тонкие заморочки с обрывом вычислений при использовании пользовательских волатильных функций. дело прошлое сразу не вспомню и не сформулирую.


слушай - у тебя русский на компуктере есть - табличку с рускими буквами твой ексель съест?

или латиницей все рисовать?

щаз прям малек в заморочке, а вечерком могу попробовать каку пригодну к делу демонстрашку выложил бы

может дашь русскую аналогию - каким боком рама к маме прислоняется на примере единственного и множественного прислоняния.
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34256975
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычЮзер дает корень и еще некоторые вещи в определенных ячейках. При изменении значения одной из ячеек функция запускается сама и выдает слово (и комментарии, которые пока еще у меня не работают).Worksheet_Change с проверкой Target это то самое что тебе нужно. Функции листа - не нужны. Точно-точно, верь мне :)

Владимир СанычНо у меня два режима работы. В одном на листе всего одно слово, исходный материал для него и вычисленные комментарии. Второй режим - отладочный, в нем вычисляется много слов с разными исходными данными, и там комментарии выводить не нужно. Хотелось бы, чтобы одна функция могла работать в обоих режимах.Ну это уж совсем просто.
Разрежь свою большую функцию на три маленьких. Пусть одна маленькая (центральная) функция формирует очередной кусок слова и коментарий почему именно этот кусок слова использован. А две дополнительные функции будут ждать команды пользователя и выводить результаты, одна будет выводить результат с коментарием, вторая только результаты. И запускай их по отдельности.
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34256993
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабайвероятно вердихт таков будет: если максимальный размер области результата фиксирован,
то фикнция массива к етому делу может прикрутиться удачнее саба, инкапсулировав в себе всякого рода очистки. Если фиксированной области для результата не получается, то что-то бегом саб только видно пока.
Какой-то максимальный размер можно придумать, так что будем считать, что размер ограничен. Только я из топика по ссылке ничего не понял. Написать функцию, возвращающую массив, я и раньше умел. Но что с ней делать дальше? Я умею занести ее значение в массив и работать с ним как с массивом. Но как ее значение распихать по ячейкам?

бабайкнопка-педаль типа "вычислить вариантов" должна в твоей задаче смотреться.
или можно заложиться на изменения в фиксированной клетке с проверкой запонения прочих.
У меня второй случай, и он меня вполне устраивает. Кнопка вызвала бы проблемы, когда я на одном листе вычисляю много слов.

бабайС екселем работаю мало и событий на листах не очень люблю.
по памяти - есть там тонкие заморочки с обрывом вычислений при использовании пользовательских волатильных функций. дело прошлое сразу не вспомню и не сформулирую.
Понял, спасибо за предостережение.

бабайслушай - у тебя русский на компуктере есть - табличку с рускими буквами твой ексель съест?
Съест с любыми. В эпоху Юникода живем, как-никак. А русский язык у меня - один из трех установленных (RU/EN/HE).

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

бабайможет дашь русскую аналогию - каким боком рама к маме прислоняется на примере единственного и множественного прислоняния.
За прислоняния я пока не берусь, бо дюже муторно. Хотя в планы и заложено. Пока рисуется только одно слово в одной ячейке. Для упрощенного моделирования сейчас попробую соорудить нечто на русском языке.
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34256999
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlWorksheet_Change с проверкой Target это то самое что тебе нужно.
А это как? Что такое Target?

White OwlПусть одна маленькая (центральная) функция формирует очередной кусок слова и коментарий почему именно этот кусок слова использован. А две дополнительные функции будут ждать команды пользователя и выводить результаты, одна будет выводить результат с коментарием, вторая только результаты. И запускай их по отдельности.
Будем считать, что понял... Но все равно остается вопрос, как выводить результаты функции, которая вычисляет массив.
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34257044
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч White OwlWorksheet_Change с проверкой Target это то самое что тебе нужно.
А это как? Что такое Target?
Параметр события.


Владимир Саныч White OwlПусть одна маленькая (центральная) функция формирует очередной кусок слова и коментарий почему именно этот кусок слова использован. А две дополнительные функции будут ждать команды пользователя и выводить результаты, одна будет выводить результат с коментарием, вторая только результаты. И запускай их по отдельности.
Будем считать, что понял...Ой, ну вот тебе пример. Сделай новую книгу, в самостоятельный модуль положи макрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Option Explicit

Sub StringToCodes(pRoot As Range, pAnswer As Range, Optional pComments As Range)
    Dim i As Integer, c As String
    Dim sAnswer As String
    
    sAnswer = ""
    For i =  1  To Len(pRoot.Text)
        If i >  1  Then
            sAnswer = sAnswer & ", "
        End If
        c = Mid(pRoot.Text, i,  1 )
        sAnswer = sAnswer & Asc(c)
        
        If Not pComments Is Nothing Then
            pComments.Cells(i,  1 ).Value = "ASCII code of '" & c & "' is " & Asc(c)
        End If
    Next
    pAnswer.Value = sAnswer
End Sub
Потом на два разных рабочих листа положи события Worksheet_Change:
Код: plaintext
1.
2.
3.
4.
5.
6.
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then
        StringToCodes pRoot:=Target, pAnswer:=Target.Offset( 0 ,  1 ), pComments:=Target.Offset( 1 ,  1 )
    End If
End Sub
Код: plaintext
1.
2.
3.
4.
5.
6.
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column =  1  Then
        StringToCodes pRoot:=Target, pAnswer:=Target.Offset( 0 ,  1 )
    End If
End Sub
На первом листе макрос вызывается только для одной ячейки, на втором для всех ячеек первой колонки. С первого листа макрос вызывается с третьим параметром, со второго вызывается без третьего параметра. И вся разница.
Теперь замени мой StringToCodes на свой собственный макрос и задача решена.

Владимир СанычНо все равно остается вопрос, как выводить результаты функции, которая вычисляет массив.Да не нужна тебе функция вычисляющая массив. Такая фигня вообще никогда и никем не делается (ну кроме явных чайников :))
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34257074
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlНа первом листе макрос вызывается только для одной ячейки, на втором для всех ячеек первой колонки.
Видимо, к вечеру совсем туплю. Как вызывать такой макрос из ячейки?

===
Вот соорудил нечто похожее, но на примере русского языка и гораздо проще. Зелеными помечены ячейки, которые я вычисляю. Но в функции заполняется еще и коллекция Story. Как ее вывести куда-нибудь?
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34257076
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34257114
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Новая версия - исправлен баг.
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34257132
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч White OwlНа первом листе макрос вызывается только для одной ячейки, на втором для всех ячеек первой колонки.
Видимо, к вечеру совсем туплю. Как вызывать такой макрос из ячейки?Никак. Ничего не надо вызывать из ячейки вообще. Переверни задачу. Сейчас ты пытаешься решить задачу: "как заполнить две ячейки через формулу записаную в одной ячейке" Эта задача решения не имеет. Зато если ты поставишь задачу наоборот: "Как рассчитать несколько значений и раскидать их по разным ячейкам" то все становится просто и легко.
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34258286
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К утру дошло, что из ячейки надо убрать формулу. Спасибо, буду стараться въехать.
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34259791
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ура, получилось ВСЁ. Спасибо ВСЕМ!
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34259952
Бабай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Саныч
поздравляю.

под вечер выбрал время нарисовать пример по твоей русской модели "на массивах"
Сова права в том, что
авторДа не нужна тебе функция вычисляющая массив. Такая фигня вообще никогда и никем не делается (ну кроме явных чайников :))

"В принципе" тут есть предмет для поспора, но тот пример, который выкладывается, более-менее
ясно показывает - почему его слова имеют основание существовать.

Будет интерес глянь. Сам по себбе пример рабочий, но делать так не надо.
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34261219
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабайБудет интерес глянь. Сам по себбе пример рабочий, но делать так не надо.
Честное слово, круто. Впечатляет и дизайн (и ведь не жалко было времени!), и количество кода (в котором я, наверно, никогда не разберусь). На этом фоне нагло лезут в глаза мои баги (например, буква О добавляется после приставок, кончающихся на гласную, и получаются слова типа выогнать или доогнать).
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34261274
Бабай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все бы вам посмеиваться, сударь...
:)
спасибо за отзыв не взирая.


будут вопросы про ексель - постараюсь ответить.
правда знаю я его почти нет. слабовато, то есть.
...
Рейтинг: 0 / 0
Пытаюсь сделать Эксель умнее, чем он есть?
    #34261538
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабайвсе бы вам посмеиваться, сударь...
:)
спасибо за отзыв не взирая.
Эх... Ну почему люди не верят, когда им делают комплименты...
...
Рейтинг: 0 / 0
39 сообщений из 39, показаны все 2 страниц
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Пытаюсь сделать Эксель умнее, чем он есть?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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