Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / функция для excel не изменяет значение явно указанной ячейки / 17 сообщений из 17, страница 1 из 1
26.07.2013, 10:09
    #38344702
killer_zon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функция для excel не изменяет значение явно указанной ячейки
Пытаюсь написать функцию для EXCEL, но она у меня возвращает более одного значения.
каким образом можно заполнить ячейки соседние (к примеру планирую передавать в функцию координаты ячеек для заполнения, которые необходимо будет заполнить), если не научусь сдвигаться относительно текущей ячейки. хотя сейчас пока не получается даже статично задать координаты ячейки и заполнить ее значением.
...
Рейтинг: 0 / 0
26.07.2013, 11:28
    #38344858
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функция для excel не изменяет значение явно указанной ячейки
killer_zon,

Функции не могут изменять данные и форматы других ячеек(за некоторыми исключениями). Они всего лишь возвращают значение в ту ячейку, в которую записаны.
Если хотите вернуть значение в несколько ячеек - пишите функцию, которая могла бы работать как формула массива. Хотя по скрину я не увидел, чтобы Ваша функция нуждалась во внесении результата в несколько ячеек.
...
Рейтинг: 0 / 0
26.07.2013, 14:46
    #38345296
killer_zon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функция для excel не изменяет значение явно указанной ячейки
The_Prist
спасибо за ответ, подскажите пожалуйста как организовать возврат в из функции в формулу массива.
на скрине там пример без подробностей. В реале там из базы выборка нескольких полей)
допустим передается ид человека, а нужно возвратить ФИО в три колонки)
...
Рейтинг: 0 / 0
26.07.2013, 16:13
    #38345538
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функция для excel не изменяет значение явно указанной ячейки
killer_zon,

т.е. Вы предлагаете мне сейчас выдумать для Вас функцию на основе Вашего скрина? :-) мало желания.
Вот Вам пример того, как это делается:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Function MultiplyVal(rR As Range, lMultVal As Long)
    Dim avArr, lr As Long, lc As Long, avRes()
    avArr = rR.Value
    If Not IsArray(avArr) Then ReDim avArr(1 To 1, 1 To 1): avArr(1, 1) = rR.Value
    ReDim avRes(1 To UBound(avArr, 1), 1 To UBound(avArr, 2))
    For lr = 1 To UBound(avArr, 1)
        For lc = 1 To UBound(avArr, 2)
            avRes(lr, lc) = avArr(lr, lc) * lMultVal
        Next lc
    Next lr
    MultiplyVal = avRes
End Function


По сути никаких сложностей. Необходимо лишь, чтобы функция могла возвращать массив значений. Естественно, подобную функцию необходимо вводить в ячейку как формулу массива .
Во вложении файл с функцией.
...
Рейтинг: 0 / 0
26.07.2013, 17:48
    #38345779
killer_zon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функция для excel не изменяет значение явно указанной ячейки
The_Prist,
а понял) спасибо. теперь понял о чем речь) я вначале не понял как вообще возможно реализовать
...
Рейтинг: 0 / 0
27.07.2013, 11:56
    #38346252
killer_zon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функция для excel не изменяет значение явно указанной ячейки
я что-то видмо где-то не учитываю, но обратиться явно к Range не удается, даже если просто туда передаю одну ячейку и присваиваю ей просто значение (rng.Value = ), не выберая строку и колонку в ренже

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

Код: vbnet
1.
2.
3.
4.
5.
6.
Public Function m_f(x As String, rng As Range) As String
m_f = x + "ff"
rng.Cells(1, 1).Value(1, 1).Value = "33"
'rng.Cells(1, 2).Value = 44
'rng.Cells(1, 2).Value = 55
End Function
...
Рейтинг: 0 / 0
27.07.2013, 12:15
    #38346261
killer_zon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функция для excel не изменяет значение явно указанной ячейки
*выбирая
...
Рейтинг: 0 / 0
27.07.2013, 13:47
    #38346299
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функция для excel не изменяет значение явно указанной ячейки
killer_zon,

Видимо, Вам надо изучать самые азы и следовать синтаксису, а не выдумывать новый, непонятный VBA.
rng.Cells(1, 1).Value(1, 1).Value = "33" - что это?
Я же уже сказал - функция только возвращает значение, а не изменяет значение других ячеек. Даже если Вы их в качестве параметра передаете.
изучите функцию в моем файле внимательно и подумайте - я там изменяю где-то значения ячеек?
...
Рейтинг: 0 / 0
27.07.2013, 15:19
    #38346335
killer_zon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функция для excel не изменяет значение явно указанной ячейки
это была проба всех потенциально адекватных комбинаций, которая могла бы привести к результату.

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

попробовал два варианта ниже, но они не работают.

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

содержимое модуля
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Public Function m_f(x As String, rng As Range) As String

m_f = x + "ff7"
'Call Ëèñò1.set_valf7
Call Module1.set_val_9
'm_f = x + "ff8"
'Call Ëèñò1.set_valf8

End Function


Public Sub set_val_9()
    Range("F9").Value = 7 'Range("C2").Value
End Sub



содержимое функций для лист1
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Public Sub set_valf7()
    Range("F7").Value = 7 'Range("C2").Value
End Sub

Public Sub set_valf8()
    Range("F8").Value = 5 'Range("C2").Value
End Sub
...
Рейтинг: 0 / 0
27.07.2013, 15:55
    #38346345
killer_zon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функция для excel не изменяет значение явно указанной ячейки
я нашел решение.
это возможно :)

функция tst1 воздействует на передаваемый ей диапазон, а tst изменяет значение в ячейке "B2"

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Function tst()
      Range("B7").Cells(1, 1).Replace IIf(Len(Range("B7").Cells(1, 1).Value), "*", ""), 223
    tst = 1
End Function

Function tst1(tt As Range)
      tt.Cells(1, 1).Replace IIf(Len(tt.Cells(1, 1).Value), "*", ""), 223
    tst1 = 1
End Function
...
Рейтинг: 0 / 0
27.07.2013, 16:07
    #38346349
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функция для excel не изменяет значение явно указанной ячейки
killer_zon,

Да, возможно. Я этого не отрицал(еще в первом посте написал, что есть исключения). Но как правило это очень неэффективно и я бы этим не пользовался. В случае воздействия на пустые ячейки можете получить не тот результат, что ожидаете. Т.к. есть понятие нулевой строки и пустого значения. И это разные значения. Учитесь разрабатывать функции сразу правильно, а не в обход. Хотя, если Вам так необходимо было из функции изменить значение ячейки...

P.S. Решение не на msexcel нашли, случаем? :-)
...
Рейтинг: 0 / 0
27.07.2013, 16:18
    #38346354
killer_zon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функция для excel не изменяет значение явно указанной ячейки
есть решение альтернативное, через загрузку еселя в БД гетерогенным сервисом через cscript и батники модифицирующие одибиси источники но не самое удобное и иногда слетающее, когда несколько оле объектов работает.
такой бы способ предполагал разгрузку механизма.

для каждого значения написать отдельную формулу тоже выход (или в зависимости от передаваемых параметров разное возвращать), но вместо одного раза запускать три раза скрипт подтяжки по идентификатору ФИО, к примеру - перебор)) (в реальности там более 30 полей для заполнения)

спасибо Вам за комментарии) вдохновили меня найти таки решение, хоть и не самое лучшее, но работающее, и вряд ли подойдет для применения :))
...
Рейтинг: 0 / 0
13.01.2014, 12:06
    #38524083
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функция для excel не изменяет значение явно указанной ячейки
killer_zon,

С прошедшими праздниками господа !

Необходимо аналогичное решением, хочу функцией пользователя СКОПИРОВАТЬ набор данных
Код: vbnet
1.
2.
3.
4.
Function MultiplyVal(rS As Range,rD as Range) as Integer
    Call Range("P1").Copy(Range("P2"))
    MultiplyVal = 125 'Кол-во ячек 
End Function



Єто можно реализовать ?
Модератор: Учимся использовать тэги оформления кода - FAQ
...
Рейтинг: 0 / 0
13.01.2014, 13:29
    #38524255
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функция для excel не изменяет значение явно указанной ячейки
А зачем это делать функцией ?
Вы желате вызывать это копирование прямо при расчетах на рабочем листе? Великий смысл этого?
А как вы собираетесь контролировать, в какой момент исполнится это копирование?
Такие действия обычно оформляются в виде процедур, исполняющихся по определенным событиям (нажали кнопку, перешли в другое место, изменили значение...)
...
Рейтинг: 0 / 0
13.01.2014, 16:40
    #38524707
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функция для excel не изменяет значение явно указанной ячейки
AndreTM,

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

Насчет контроля, пока ответить не могу
У меня идет четкий и последовательный алгоритм пересчета листа

Соответственно пока интересуюсь самым кодом, потом обдумаю остальное
Если можите подсказать как решить буду признателен

Call Range("P1").Copy(Range("P2"))
...
Рейтинг: 0 / 0
13.01.2014, 17:15
    #38524776
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функция для excel не изменяет значение явно указанной ячейки
Так и я тем же самым интересуюсь...
Внутри функции , да ещё вызванной с листа - это не сделать (ну, без совсем уж извращённых выделываний).
Но раз есть "чёткий алгоритм" - то перехватывайте событие (например, изменение определенной ячейки), и уже в обработчике вызывайте процедуру копирования диапазона.
...
Рейтинг: 0 / 0
13.01.2014, 19:26
    #38524953
HOME_X
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
функция для excel не изменяет значение явно указанной ячейки
AndreTM,

А QueryTables приспособить под это дело нельзя ?
Фактически это потоковый визуализатор данных
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / функция для excel не изменяет значение явно указанной ячейки / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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