Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
ДВССЫЛ и имена
 
Добрый день!  
Фугкция ДВССЫЛ позволяет ссылаться на имена, например  
=СУММ(ДВССЫЛ(C4)), где в С4 стоит имя диапазона. Всё работает ОК, пока имя статичное, но если имя динамическое (использует функцию СМЕЩ) - ошибка. Есть ли возможность обойти эту ошибку?  
 
Посмотрите прикрепленный файл.
 
Добрый день!  
Фугкция ДВССЫЛ позволяет ссылаться на имена, например  
=СУММ(ДВССЫЛ(C4)), где в С4 стоит имя диапазона. Всё работает ОК, пока имя статичное, но если имя динамическое (использует функцию СМЕЩ) - ошибка. Есть ли возможность обойти эту ошибку?  
 
Посмотрите прикрепленный файл.
 
а есть необходимость именно через двойную ссылку писать?  
 
просто сумм(имя) не катит?
 
а есть необходимость именно через двойную ссылку писать?  
 
просто сумм(имя) не катит?
 
Это слишком просто :-)  
А если серьёзно - если меняешь текст в ячейке, на которую ссылается ДВССЫЛ - получаешь сумму по другому имени. Еще и с проверкой вводимых значений - очень удобно работать!
 
поставить список(проверка данных) и табличку сумм(имя).  
выбирать с помощью впр или индекс
 
поставить список(проверка данных) и табличку сумм(имя).  
выбирать с помощью впр или индекс
 
Не получится - функции ВПР и Индекс возвращают содержимое ячейки, в данном случае текст, в итоге поллучится    
=СУММ("Статика"), а ДВССЫЛ возвращает    
=СУММ(Статика). Такая вот фигня...  
Может я неудачно объяснил, попробуй - увидишь
 
Не получится - функции ВПР и Индекс возвращают содержимое ячейки, в данном случае текст, в итоге поллучится    
=СУММ("Статика"), а ДВССЫЛ возвращает    
=СУММ(Статика). Такая вот фигня...  
Может я неудачно объяснил, попробуй - увидишь
 
вот что я имею в виду:
 
Всё работает, не спорю, но:  
я делаю таблицу для пользователей, не совсем рубящих в Экселе и им, что вычислить сумму по другому имени, надо редактировать формулу =СУММ(Динамика) например на =СУММ(Статика). Формула на самом деле оч длинная и внутрь их пущать не хочу. Хотел вот сделать через ДВССЫЛ, да не получаецца...
 
Всё работает, не спорю, но:  
я делаю таблицу для пользователей, не совсем рубящих в Экселе и им, что вычислить сумму по другому имени, надо редактировать формулу =СУММ(Динамика) например на =СУММ(Статика). Формула на самом деле оч длинная и внутрь их пущать не хочу. Хотел вот сделать через ДВССЫЛ, да не получаецца...
 
зачем редактировать?  
 
список имен и список сумм(имя) создаете вы сами!  
спрячьте его подальше..  
задача пользователя только выбрать имя из выпадающего списка..
 
зачем редактировать?  
 
список имен и список сумм(имя) создаете вы сами!  
спрячьте его подальше..  
задача пользователя только выбрать имя из выпадающего списка..
 
Ага, попробую так. Спасибо
 
Ага, попробую так. Спасибо
 
Проблема с динамическим именем в том что при обращении к нему ексель должен вычислить определяющую его формулу. В результате ДВССЫЛ(динамическое_имя) не работает так как формула воспринимается как строка и не вычисляется. Чтобы заработало надо принудительно "вычислить" динамическое имя с помощью application.evaluate, что и делает приведённая ниже пользовательская функция.Пример исп. см файл  
   
Function имяадр(ByVal s As String) As String  
Dim finds As Boolean  
Dim nm As Object  
Dim rr As Range  
Dim wb As Workbook  
 
'Application.Volatile True  
 
'ищем s в именах книги откуда вызвана функция  
If IsObject(Application.Caller) Then  
Set wb = Application.Caller.Parent.Parent  
Else  
Set wb = Range("A1").Parent.Parent  
End If  
'проверяем что имя есть  
finds = False  
For Each nm In wb.Names  
If nm.Name = s Then  
finds = True  
Set rr = Evaluate(nm.RefersTo)  
End If  
Next  
'назначаем адрес имени  
If finds Then  
имяадр = rr.Worksheet.Name & "!" & rr.Address  
Else  
имяадр = s & " не определено"  
End If  
End Function  
 
 
Sub test2()  
'просто тест  
Dim Newsheet As Worksheet  
Dim nm As Object  
Dim i As Long  
Dim str1 As String  
Dim rr As Range  
Set rr = Range("A1")  
str1 = rr.Parent.Name  
str1 = rr.Parent.Parent.Name  
 
Set Newsheet = ActiveWorkbook.Worksheets(1)  
i = 1  
For Each nm In ActiveWorkbook.Names  
   Newsheet.Cells(i, 1).Value = nm.NameLocal  
   i = i + 1  
   Newsheet.Cells(i, 1).Value = "'" & nm.RefersToLocal  
   i = i + 1  
   Newsheet.Cells(i, 1).Value = имяадр(nm.Name)  
   i = i + 1  
     
Next  
 
End Sub
 
Проблема с динамическим именем в том что при обращении к нему ексель должен вычислить определяющую его формулу. В результате ДВССЫЛ(динамическое_имя) не работает так как формула воспринимается как строка и не вычисляется. Чтобы заработало надо принудительно "вычислить" динамическое имя с помощью application.evaluate, что и делает приведённая ниже пользовательская функция.Пример исп. см файл  
   
Function имяадр(ByVal s As String) As String  
Dim finds As Boolean  
Dim nm As Object  
Dim rr As Range  
Dim wb As Workbook  
 
'Application.Volatile True  
 
'ищем s в именах книги откуда вызвана функция  
If IsObject(Application.Caller) Then  
Set wb = Application.Caller.Parent.Parent  
Else  
Set wb = Range("A1").Parent.Parent  
End If  
'проверяем что имя есть  
finds = False  
For Each nm In wb.Names  
If nm.Name = s Then  
finds = True  
Set rr = Evaluate(nm.RefersTo)  
End If  
Next  
'назначаем адрес имени  
If finds Then  
имяадр = rr.Worksheet.Name & "!" & rr.Address  
Else  
имяадр = s & " не определено"  
End If  
End Function  
 
 
Sub test2()  
'просто тест  
Dim Newsheet As Worksheet  
Dim nm As Object  
Dim i As Long  
Dim str1 As String  
Dim rr As Range  
Set rr = Range("A1")  
str1 = rr.Parent.Name  
str1 = rr.Parent.Parent.Name  
 
Set Newsheet = ActiveWorkbook.Worksheets(1)  
i = 1  
For Each nm In ActiveWorkbook.Names  
   Newsheet.Cells(i, 1).Value = nm.NameLocal  
   i = i + 1  
   Newsheet.Cells(i, 1).Value = "'" & nm.RefersToLocal  
   i = i + 1  
   Newsheet.Cells(i, 1).Value = имяадр(nm.Name)  
   i = i + 1  
     
Next  
 
End Sub
 
Ну, блин, МОЗГ!!!!!  
Спасибо, как раз в праздники буду переваривать.
 
Ну, блин, МОЗГ!!!!!  
Спасибо, как раз в праздники буду переваривать.
Страницы: 1
Читают тему (гостей: 1)
Наверх