Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/UDF в диспетечере имен и динамический график по фильтру - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
UDF в диспетечере имен и динамический график по фильтру
dilius Дата: Понедельник, 11.12.2017, 06:56 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 38
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день!
Интересует несколько вопросов:

1) Можно ли использовать UDF в именованном диапазоне в диспетчере имен?
2) Сейчас реализован динамический график через именованный диапазон по общей сумме по пар_1 между двумя датами, есть необходимость сделать тоже самое, но по фильтру. Вижу решение только через UDF, возрашающую диапазон. Рыбу функции я в принципе сделал, но не могу понять почему у меня не вычисляется формула на данном участке кода:

[vba]
Код
                If .HasFormula Then
                
                    .Formula = .Formula & _
                    "+СМЕЩ(src!$C$1;ПОИСКПОЗ(" & Table(i) & ";src!$B:$B;0)-1;" & Date_2 - Date1 & ";1;1)"
                
                Else
                
                    .Formula = "=" & .Formula & _
                    "СМЕЩ(src!$C$1;ПОИСКПОЗ(" & Table(i) & ";src!$B:$B;0)-1;" & Date_2 - Date1 & ";1;1)"
                
                End If
[/vba]
Хотелось бы ещё узнать есть ли какая-нибудь возможность вычислить какую-либо формулу не через запись результата в ячейку.
К сообщению приложен файл: ___.xlsm (25.2 Kb)


Nothing personal
 
Ответить
СообщениеДобрый день!
Интересует несколько вопросов:

1) Можно ли использовать UDF в именованном диапазоне в диспетчере имен?
2) Сейчас реализован динамический график через именованный диапазон по общей сумме по пар_1 между двумя датами, есть необходимость сделать тоже самое, но по фильтру. Вижу решение только через UDF, возрашающую диапазон. Рыбу функции я в принципе сделал, но не могу понять почему у меня не вычисляется формула на данном участке кода:

[vba]
Код
                If .HasFormula Then
                
                    .Formula = .Formula & _
                    "+СМЕЩ(src!$C$1;ПОИСКПОЗ(" & Table(i) & ";src!$B:$B;0)-1;" & Date_2 - Date1 & ";1;1)"
                
                Else
                
                    .Formula = "=" & .Formula & _
                    "СМЕЩ(src!$C$1;ПОИСКПОЗ(" & Table(i) & ";src!$B:$B;0)-1;" & Date_2 - Date1 & ";1;1)"
                
                End If
[/vba]
Хотелось бы ещё узнать есть ли какая-нибудь возможность вычислить какую-либо формулу не через запись результата в ячейку.

Автор - dilius
Дата добавления - 11.12.2017 в 06:56
Gustav Дата: Понедельник, 11.12.2017, 09:22 | Сообщение № 2
Группа: Админы
Ранг: Участник клуба
Сообщений: 2877
Репутация: 1217 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
почему у меня не вычисляется формула на данном участке кода

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


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
почему у меня не вычисляется формула на данном участке кода

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

Автор - Gustav
Дата добавления - 11.12.2017 в 09:22
Gustav Дата: Понедельник, 11.12.2017, 09:53 | Сообщение № 3
Группа: Админы
Ранг: Участник клуба
Сообщений: 2877
Репутация: 1217 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
есть ли какая-нибудь возможность вычислить какую-либо формулу не через запись результата в ячейку

Есть. В примере функции ниже можно использовать любой из трёх вариантов:
[vba]
Код
Function ddd()
    ddd = [SUM(A1:A10)]
    'ddd = Application.Evaluate([SUM(A1:A10)])
    'ddd = Application.WorksheetFunction.Sum(Range("A1:A10"))
End Function
[/vba]


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
есть ли какая-нибудь возможность вычислить какую-либо формулу не через запись результата в ячейку

Есть. В примере функции ниже можно использовать любой из трёх вариантов:
[vba]
Код
Function ddd()
    ddd = [SUM(A1:A10)]
    'ddd = Application.Evaluate([SUM(A1:A10)])
    'ddd = Application.WorksheetFunction.Sum(Range("A1:A10"))
End Function
[/vba]

Автор - Gustav
Дата добавления - 11.12.2017 в 09:53
dilius Дата: Понедельник, 11.12.2017, 10:31 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 38
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Gustav, спасибо за отклик!
Попробывал FormulaLocal - результат такой же , переделал на запись в переменную возвращает Error 2015 т.е. #ЗНАЧ, хотя формула должна возвращать значение.

[vba]
Код
Public Function uni_agregat(Table As Range, Date_1 As Variant, Date_2 As Variant) As Variant
Dim Val As Variant

'Здесь будет цикл по датам от Date_1 до Date_2

    For i = 1 To Table.Count  'Цикл по данным на конкретную дату

        If Not Table(i).EntireRow.Hidden = True Then ' Если не скрыта строка фильтром
    
            'With Workbooks("Доделать то что хотел.xlsm").Worksheets("Лист3").Cells(1, 1)
            
                'If .HasFormula Then
                
                    
                    
                    '.FormulaLocal = .FormulaLocal & _
                    '"+СМЕЩ(src!$C$1;ПОИСКПОЗ(" & Table(i) & ";src!$B:$B;0)-1;" & Date_2 - Date_1 & ";1;1)"
                
                'Else
                
                
                    
                    '.FormulaLocal = "=" & .FormulaLocal & _
                    '"СМЕЩ(src!$C$1;ПОИСКПОЗ(" & Table(i) & ";src!$B:$B;0)-1;" & Date_2 - Date_1 & ";1;1)"
                
                'End If
            
            'End With
     
            Val = Application.Evaluate(["СМЕЩ(src!$C$1;ПОИСКПОЗ(" & Table(i) & ";src!$B:$B;0)-1;" & (Date_2 - Date_1) & ";1;1)"])
    
        End If
        
    Next
    
    
uni_agregat = Val

End Function

[/vba]
К сообщению приложен файл: 4488146.xlsm (25.4 Kb)


Nothing personal

Сообщение отредактировал dilius - Понедельник, 11.12.2017, 10:32
 
Ответить
СообщениеGustav, спасибо за отклик!
Попробывал FormulaLocal - результат такой же , переделал на запись в переменную возвращает Error 2015 т.е. #ЗНАЧ, хотя формула должна возвращать значение.

[vba]
Код
Public Function uni_agregat(Table As Range, Date_1 As Variant, Date_2 As Variant) As Variant
Dim Val As Variant

'Здесь будет цикл по датам от Date_1 до Date_2

    For i = 1 To Table.Count  'Цикл по данным на конкретную дату

        If Not Table(i).EntireRow.Hidden = True Then ' Если не скрыта строка фильтром
    
            'With Workbooks("Доделать то что хотел.xlsm").Worksheets("Лист3").Cells(1, 1)
            
                'If .HasFormula Then
                
                    
                    
                    '.FormulaLocal = .FormulaLocal & _
                    '"+СМЕЩ(src!$C$1;ПОИСКПОЗ(" & Table(i) & ";src!$B:$B;0)-1;" & Date_2 - Date_1 & ";1;1)"
                
                'Else
                
                
                    
                    '.FormulaLocal = "=" & .FormulaLocal & _
                    '"СМЕЩ(src!$C$1;ПОИСКПОЗ(" & Table(i) & ";src!$B:$B;0)-1;" & Date_2 - Date_1 & ";1;1)"
                
                'End If
            
            'End With
     
            Val = Application.Evaluate(["СМЕЩ(src!$C$1;ПОИСКПОЗ(" & Table(i) & ";src!$B:$B;0)-1;" & (Date_2 - Date_1) & ";1;1)"])
    
        End If
        
    Next
    
    
uni_agregat = Val

End Function

[/vba]

Автор - dilius
Дата добавления - 11.12.2017 в 10:31
Gustav Дата: Понедельник, 11.12.2017, 10:51 | Сообщение № 5
Группа: Админы
Ранг: Участник клуба
Сообщений: 2877
Репутация: 1217 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Val = Application.Evaluate(["СМЕЩ(src!$C$1;ПОИСКПОЗ(" & Table(i) & ";src!$B:$B;0)-1;" & (Date_2 - Date_1) & ";1;1)"])

Ну ёпрст!! Вы у меня в Evaluate где-то увидели двойные кавычки или русские названия функций?? Не надо самодеятельности! И точек с запятой тоже! Всё должно быть в исходном формате вероятного противника. Сделайте запись макрорекордером - что он Вам напишет в свойство Formula по-английски, то и бережно перенесите в свой код.

P.S. Впрочем, уточнил - можно двойные кавычке в Evaluate ВМЕСТО квадратных скобок:
[vba]
Код
ddd = Application.Evaluate("SUM(A1:A10)")
[/vba]


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Понедельник, 11.12.2017, 11:52
 
Ответить
Сообщение
Val = Application.Evaluate(["СМЕЩ(src!$C$1;ПОИСКПОЗ(" & Table(i) & ";src!$B:$B;0)-1;" & (Date_2 - Date_1) & ";1;1)"])

Ну ёпрст!! Вы у меня в Evaluate где-то увидели двойные кавычки или русские названия функций?? Не надо самодеятельности! И точек с запятой тоже! Всё должно быть в исходном формате вероятного противника. Сделайте запись макрорекордером - что он Вам напишет в свойство Formula по-английски, то и бережно перенесите в свой код.

P.S. Впрочем, уточнил - можно двойные кавычке в Evaluate ВМЕСТО квадратных скобок:
[vba]
Код
ddd = Application.Evaluate("SUM(A1:A10)")
[/vba]

Автор - Gustav
Дата добавления - 11.12.2017 в 10:51
dilius Дата: Понедельник, 11.12.2017, 11:49 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 38
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Gustav, можете мне помочь пожалуйста написать этот участок так, чтобы в переменную Val вычислялась динамическая формула с параметрами Table(i) , Date_2, Date_1.
Английская также возвращает Error 2015
[vba]
Код
Public Function uni_agregat(Table As Range, Date_1 As Variant, Date_2 As Variant) As Variant
Dim Val As Variant

'Здесь будет цикл по датам от Date_1 до Date_2

    For i = 1 To Table.Count  'Цикл по данным на конкретную дату

        If Not Table(i).EntireRow.Hidden = True Then ' Если не скрыта строка фильтром
    
            'With Workbooks("Доделать то что хотел.xlsm").Worksheets("Лист3").Cells(1, 1)
            
            '    If .HasFormula Then
                
                    
                    
             '       .FormulaLocal = .FormulaLocal & _
             '       "+OFFSET(src!$C$1,MATCH(" & Table(i) & ",src!$B:$B;0)-1," & Date_2 - Date_1 & ",1,1)"
                
             '   Else
                
                
                    
             '       .FormulaLocal = "=" & .FormulaLocal & _
             '       "OFFSET(src!$C$1,ПОИСКПОЗ(" & Table(i) & ",src!$B:$B,0)-1," & Date_2 - Date_1 & ",1,1)"
                
             '   End If
            
             ' End With
     
            Val = Val + Application.Evaluate([OFFSET(src!$C$1,MATCH($A$3,src!$B:$B,0)-1,Svod!C2-src!$C$1,1,1)])
    
        End If
        
    Next
    
    
uni_agregat = Val

End Function

[/vba]


Nothing personal
 
Ответить
СообщениеGustav, можете мне помочь пожалуйста написать этот участок так, чтобы в переменную Val вычислялась динамическая формула с параметрами Table(i) , Date_2, Date_1.
Английская также возвращает Error 2015
[vba]
Код
Public Function uni_agregat(Table As Range, Date_1 As Variant, Date_2 As Variant) As Variant
Dim Val As Variant

'Здесь будет цикл по датам от Date_1 до Date_2

    For i = 1 To Table.Count  'Цикл по данным на конкретную дату

        If Not Table(i).EntireRow.Hidden = True Then ' Если не скрыта строка фильтром
    
            'With Workbooks("Доделать то что хотел.xlsm").Worksheets("Лист3").Cells(1, 1)
            
            '    If .HasFormula Then
                
                    
                    
             '       .FormulaLocal = .FormulaLocal & _
             '       "+OFFSET(src!$C$1,MATCH(" & Table(i) & ",src!$B:$B;0)-1," & Date_2 - Date_1 & ",1,1)"
                
             '   Else
                
                
                    
             '       .FormulaLocal = "=" & .FormulaLocal & _
             '       "OFFSET(src!$C$1,ПОИСКПОЗ(" & Table(i) & ",src!$B:$B,0)-1," & Date_2 - Date_1 & ",1,1)"
                
             '   End If
            
             ' End With
     
            Val = Val + Application.Evaluate([OFFSET(src!$C$1,MATCH($A$3,src!$B:$B,0)-1,Svod!C2-src!$C$1,1,1)])
    
        End If
        
    Next
    
    
uni_agregat = Val

End Function

[/vba]

Автор - dilius
Дата добавления - 11.12.2017 в 11:49
dilius Дата: Понедельник, 11.12.2017, 11:54 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 38
Репутация: 0 ±
Замечаний: 0% ±

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


Nothing personal
 
Ответить
Сообщениеиз файла выше хочу, чтобы по произвольному фильтру по столбцу Данные лист Svod строился график по Пар_1 из исходных данных с листа src.
соотвественно нужен динамический график по возможности задавать даты. Сейчас сделано просто сумма по Пар_1 через именнованый диапазон, необходимо тоже самое только с возможностью произвольного фильтра.

Автор - dilius
Дата добавления - 11.12.2017 в 11:54
Gustav Дата: Понедельник, 11.12.2017, 11:54 | Сообщение № 8
Группа: Админы
Ранг: Участник клуба
Сообщений: 2877
Репутация: 1217 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
dilius, посмотрите выше мою дописку про кавычки - можно их, только уберите тогда квадратные скобки.


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщениеdilius, посмотрите выше мою дописку про кавычки - можно их, только уберите тогда квадратные скобки.

Автор - Gustav
Дата добавления - 11.12.2017 в 11:54
dilius Дата: Понедельник, 11.12.2017, 12:10 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 38
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Gustav, [vba]
Код
Val = Application.Evaluate("OFFSET(src!$C$1,MATCH(" & Table(i) & ",src!$B:$B,0)-1," & Date_2 - Date_1 & ",1,1)")
[/vba]
Вот такое показывает, что это Error 2029 т.е. #ИМЯ
К сообщению приложен файл: 0441893.xlsm (26.8 Kb)


Nothing personal
 
Ответить
СообщениеGustav, [vba]
Код
Val = Application.Evaluate("OFFSET(src!$C$1,MATCH(" & Table(i) & ",src!$B:$B,0)-1," & Date_2 - Date_1 & ",1,1)")
[/vba]
Вот такое показывает, что это Error 2029 т.е. #ИМЯ

Автор - dilius
Дата добавления - 11.12.2017 в 12:10
_Boroda_ Дата: Понедельник, 11.12.2017, 12:15 | Сообщение № 10
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Не очень понял Ваше пояснение, Так?
К сообщению приложен файл: -5-1.xlsm (24.5 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеНе очень понял Ваше пояснение, Так?

Автор - _Boroda_
Дата добавления - 11.12.2017 в 12:15
dilius Дата: Понедельник, 11.12.2017, 12:23 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 38
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, все так только теперь если сделать фильтр на допусти Ан-1, Ан-2, Ан-3 необходимо, чтобы график перестроился на сумму по Пар_1 только этих трех.
К сообщению приложен файл: 5676670.xlsm (23.3 Kb)


Nothing personal
 
Ответить
Сообщение_Boroda_, все так только теперь если сделать фильтр на допусти Ан-1, Ан-2, Ан-3 необходимо, чтобы график перестроился на сумму по Пар_1 только этих трех.

Автор - dilius
Дата добавления - 11.12.2017 в 12:23
_Boroda_ Дата: Понедельник, 11.12.2017, 12:43 | Сообщение № 12
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
А, вон чего Вы хотите!
Ловите
К сообщению приложен файл: 5676670_1.xlsm (25.6 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеА, вон чего Вы хотите!
Ловите

Автор - _Boroda_
Дата добавления - 11.12.2017 в 12:43
dilius Дата: Понедельник, 11.12.2017, 12:59 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 38
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, спасибо вроде то, что нужно буду вникать.


Nothing personal
 
Ответить
Сообщение_Boroda_, спасибо вроде то, что нужно буду вникать.

Автор - dilius
Дата добавления - 11.12.2017 в 12:59
dilius Дата: Понедельник, 11.12.2017, 13:26 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 38
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, спасибо вам за формулу. А можете подсказать аналогичную только если один параметр допустим будет текстовый.
График по нему естественно не нужен.
К сообщению приложен файл: 5676670_21.xlsm (25.4 Kb)


Nothing personal
 
Ответить
Сообщение_Boroda_, спасибо вам за формулу. А можете подсказать аналогичную только если один параметр допустим будет текстовый.
График по нему естественно не нужен.

Автор - dilius
Дата добавления - 11.12.2017 в 13:26
_Boroda_ Дата: Понедельник, 11.12.2017, 13:55 | Сообщение № 15
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Так?
=ЕСЛИ((C$1>=Svod!$B$2)*
Код
(C$1<=Svod!$C$2);СУММПРОИЗВ(($A$2:$A$26=$A2)*ТЕКСТ(C$2:C$26;"0;;0;\0")*ЕЧИСЛО(ПОИСКПОЗ(ПРОСМОТР(СТРОКА($2:$26);СТРОКА($2:$26)/($B$2:$B$26<>"");$B$2:$B$26);ЕСЛИ(ПРОМЕЖУТОЧНЫЕ.ИТОГИ(3;ДВССЫЛ("Svod!A"&СТРОКА(Svod!$4:$8)));Svod!$A$4:$A$8);)));"")
К сообщению приложен файл: 5676670_22.xlsm (26.1 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеТак?
=ЕСЛИ((C$1>=Svod!$B$2)*
Код
(C$1<=Svod!$C$2);СУММПРОИЗВ(($A$2:$A$26=$A2)*ТЕКСТ(C$2:C$26;"0;;0;\0")*ЕЧИСЛО(ПОИСКПОЗ(ПРОСМОТР(СТРОКА($2:$26);СТРОКА($2:$26)/($B$2:$B$26<>"");$B$2:$B$26);ЕСЛИ(ПРОМЕЖУТОЧНЫЕ.ИТОГИ(3;ДВССЫЛ("Svod!A"&СТРОКА(Svod!$4:$8)));Svod!$A$4:$A$8);)));"")

Автор - _Boroda_
Дата добавления - 11.12.2017 в 13:55
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2026 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!