Страницы: 1
RSS
Формула в функции
 
Как заставить функцию с формулой внутри работать:

Код
Public Function ОБРЕЗАТЬ(SelectCell As Range, First As String, Last As String)

    ОБРЕЗАТЬ = "=LEFT(REPLACE(" + SelectCell.Address + ";1;SEARCH(""" + First + """;" + SelectCell.Address + ")+6;"""");SEARCH(""" + Last + """;REPLACE(" + SelectCell.Address + ";1;SEARCH(""" + First + """;" + SelectCell.Address + ")+6;"""")))"
    
End Function


Код
Public Function ОБРЕЗАТЬ(SelectCell As Range, First As String, Last As String)

    ОБРЕЗАТЬ = "=ЛЕВСИМВ(ЗАМЕНИТЬ(" + SelectCell.Address + ";1;ПОИСК(""" + First + """;" + SelectCell.Address + ")+6;"""");ПОИСК(""" + Last + """;ЗАМЕНИТЬ(" + SelectCell.Address + ";1;ПОИСК(""" + First + """;" + SelectCell.Address + ")+6;"""")))"

End Function


При использовании в ячейке появляется сама формула, а нужен результат. Как правильно сделать??
 
tchack,
пример бы не помешал
Код
Public Function ОБРЕЗАТЬ2(SelectCell As Range, First As String, Last As String)
ОБРЕЗАТЬ2 = Left(Mid(SelectCell, InStr(1, SelectCell, "1", vbTextCompare) + 7, Len(SelectCell) - InStr(1, SelectCell, "1", vbTextCompare) + 6), InStr(1, Mid(SelectCell, InStr(1, SelectCell, "1", vbTextCompare) + 7, Len(SelectCell) - InStr(1, SelectCell, "1", vbTextCompare) + 6), "2", vbTextCompare) + 6)
End Function

а лучше так:
Код
Public Function ОБРЕЗАТЬ2(SelectCell As Range, First As String, Last As String)
Dim a As Integer
a = Mid(SelectCell, InStr(1, SelectCell, "1", vbTextCompare) + 7, Len(SelectCell) - InStr(1, SelectCell, "1", vbTextCompare) + 6)
ОБРЕЗАТЬ2 = Left(a, InStr(1, a, "2", vbTextCompare) + 6)
End Function
Изменено: evgeniygeo - 05.08.2022 11:31:21
 
Цитата
evgeniygeo написал:
tchack,
пример бы не помешал
Код
    [URL=#]?[/URL]       1  2  3      Public   Function   ОБРЕЗАТЬ2(SelectCell   As   Range, First   As   String  , Last   As   String  )    ОБРЕЗАТЬ2 = Left(Mid(SelectCell, InStr(1, SelectCell,   "1"  , vbTextCompare) + 7, Len(SelectCell) - InStr(1, SelectCell,   "1"  , vbTextCompare) + 6), InStr(1, Mid(SelectCell, InStr(1, SelectCell,   "1"  , vbTextCompare) + 7, Len(SelectCell) - InStr(1, SelectCell,   "1"  , vbTextCompare) + 6),   "2"  , vbTextCompare) + 6)    End   Function   
 

Бузусловно спасибо, но я интересовался как заставить формулу работать внутри функции (макроса).
 
tchack,
ни как, Вы же сами вставляете в ячейку текст формулы
Изменено: evgeniygeo - 05.08.2022 11:32:22
 
tchack, почитайте про WorksheetFunction или ТУТ
Изменено: Msi2102 - 05.08.2022 12:29:09
 
tchack,  не цитируйте код - посмотрите, что получилось в #3. Читабельность нормальная?
 
Сам справился:

Код
A1 = "Пейте, дети, молоко, будете здоровы."

=ОБРЕЗАТЬ(A1;"дети, ";) ' A1 = "молоко, будете здоровы."
=ОБРЕЗАТЬ(A1;;", будете") ' A1 = "Пейте, дети, молоко"
=ОБРЕЗАТЬ(A1;"дети, ";", будете") ' A1 = "молоко"


Код
Public Function ОБРЕЗАТЬ(ByVal SelectCell As Range, Optional ByVal First As String, Optional ByVal Last As String)

    Dim FirstJob As String, LastJob As String
    
    If First <> "" And Last = "" Then
        ОБРЕЗАТЬ = Right(SelectCell, Len(SelectCell) - (InStr(1, SelectCell, First, vbTextCompare) + Len(First) - 1))
    ElseIf Last <> "" And First = "" Then
        ОБРЕЗАТЬ = Left(SelectCell, InStr(1, SelectCell, Last, vbTextCompare) - 1)
    ElseIf First <> "" And Last <> "" Then
        FirstJob = Right(SelectCell, Len(SelectCell) - (InStr(1, SelectCell, First, vbTextCompare) + Len(First) - 1))
        LastJob = Left(FirstJob, InStr(1, FirstJob, Last, vbTextCompare) - 1)
        ОБРЕЗАТЬ = LastJob
    Else: ОБРЕЗАТЬ = "ОШИБКА!"
    End If
     
End Function
Изменено: tchack - 05.08.2022 18:30:13
 
Может Вы опишите для чего вы хотите использовать эти функции и тогда вам дадут совет как это лучше сделать?
 
безусловно, но вот только не так, как хотели изначально)
Цитата
Msi2102 написал:
Сам справился:
Страницы: 1
Наверх