Страницы: 1
RSS
Как создать формулу в Excel для определения фирмы на основе комбинаций букв в диапазоне ячеек с текстом?, Мне нужна помощь в настройке формулы в Excel, которая будет анализировать группу ячеек с текстовой информацией и определять, к какой фирме она относится на основе комбинаций букв. Если найдена только одна комбинация, формула должна вывести название фирмы.
 

Здравствуйте!

Мне нужна помощь с созданием формулы в Excel. У меня есть две ячейки с маркировками насосов, и каждая маркировка относится к разной фирме. В маркировке насоса содержится комбинация букв, которая указывает на фирму (данные берутся из листа "Лист1").

Я хотел бы создать формулу, которая будет проверять диапазон ячеек с маркировкой насосов и сравнивать их с перечнем комбинаций букв. Если в рассматриваемом диапазоне есть только одна комбинация, например, относящаяся к фирме CNP, то в шапке должно появиться "CNP"(пример). Если есть несколько комбинаций, то в шапке должно быть "CNP+БРАНТ" (пример).

Заранее спасибо за вашу помощь!

P/S

На примете была примерно такая формула "=ЕСЛИ(ЕЧИСЛО(ПОИСК(Фирма!B1;СЦЕПИТЬ($B$11:B12)))=ИСТИНА;"CNP";ЕСЛИ(ЕЧИСЛО(ПОИСК(Фирма!B2;СЦЕПИТЬ($B$11:B12)))=ИСТИНА;"CNP";ЕСЛИ(ЕЧИСЛО(ПОИСК(Фирма!B3;СЦЕПИТЬ($B$11:B12)))=ИСТИНА;"CNP";ЕСЛИ(ЕЧИСЛО(ПОИСК(Фирма!B4;СЦЕПИТЬ($B$11:B12)))=ИСТИНА;"CNP";ЕСЛИ(ЕЧИСЛО(ПОИСК(Фирма!B5;СЦЕПИТЬ($B$11:B12)))=ИСТИНА;"CNP")))))..." - но она:

1. Громоздкая;

2. Есть определенная трудность с маркировкой насоса ...NES80...- суть в том что формула не может найти именно часть текста NES, как следствие пишет "ЛОЖЬ"

Изменено: MaxGromov - 26.09.2023 08:12:04
 
Цитата
MaxGromov написал:
1. Громоздкая
Можно компактной UDF раз уж макросы используете
Код
Function ФИРМА(маркировка As String, таблица_соответствий As Range) As String
Dim arr(), I&
arr = таблица_соответствий.Value
For I = LBound(arr, 1) To UBound(arr, 1)
    If InStr(1, маркировка, arr(I, 2)) <> 0 Then
        If ФИРМА = Empty Then
            ФИРМА = arr(I, 1)
        Else
            ФИРМА = ФИРМА & "+" & arr(I, 1)
        End If
    End If
Next
End Function
Согласие есть продукт при полном непротивлении сторон
 
Код
=ЕСЛИ(СУММ(СТРОКА(1:8)*ЕСЛИОШИБКА(ПОИСК(Лист1!$B$2:$B$9;B11)>0;0))>5;"Брант";"CNP")
&"+"&
ЕСЛИ(СУММ(СТРОКА(1:8)*ЕСЛИОШИБКА(ПОИСК(Лист1!$B$2:$B$9;B12)>0;0))>5;"Брант";"CNP")
Изменено: Тимофеев - 26.09.2023 08:35:46
 
Цитата
написал:
Можно компактной UDF раз уж макросы использует
Код
Function ФИРМА(маркировка As String, таблица_соответствий As Range) As String
Dim arr(), I&
arr = таблица_соответствий.Value
For I = LBound(arr, 1) To UBound(arr, 1)
    If InStr(1, маркировка, arr(I, 2)) <> 0 Then
        If ФИРМА = Empty Then
            ФИРМА = arr(I, 1)
        Else
            ФИРМА = ФИРМА & "+" & arr(I, 1)
        End If
    End If
Next
End Function
Можно ли модернизировать вашу предложенную формулу, чтобы она проводила анализ (маркировок) нескольких ячеек и в зависимости от результатов определяла, к каким фирмам они относятся? Например, если из трех ячеек в диапазоне все маркировки соответствуют фирме CNP, то как можно получить результат "CNP"? И если есть разные маркировки (2 из CNP и 1 из БРАНТ), как получить результат "CNP+БРАНТ"?
 
Цитата
написал:
Код ? 123=ЕСЛИ(СУММ(СТРОКА(1:*ЕСЛИОШИБКА(ПОИСК(Лист1!$B$2:$B$9;B11)>0;0))>5;"Брант";"CNP")&"+"&ЕСЛИ(СУММ(СТРОКА(1:*ЕСЛИОШИБКА(ПОИСК(Лист1!$B$2:$B$9;B12)>0;0))>5;"Брант";"CNP")

Изменено: Тимофеев  - 26.09.2023 08:35:46
Данная формула, к сожалению, не работает с маркировкой фирмы Брант
 
Цитата
MaxGromov написал:
Можно ли модернизировать
Можно
Код
Function ФИРМА(маркировка As Range, таблица_соответствий As Range) As String
Dim arr(), I&
Dim Mark()
Mark = маркировка.Value
arr = таблица_соответствий.Value
For Each iMrk In Mark
For I = LBound(arr, 1) To UBound(arr, 1)
    If InStr(1, iMrk, arr(I, 2)) <> 0 Then
        If InStr(1, ФИРМА, arr(I, 1)) = 0 Then
            If ФИРМА = Empty Then
                ФИРМА = arr(I, 1)
            Else
                ФИРМА = ФИРМА & "+" & arr(I, 1)
            End If
        End If
    End If
Next
Next
End Function
Согласие есть продукт при полном непротивлении сторон
 
Здравствуйте MaxGromov,
вариант
 
Цитата
написал:
Можно
Благодарю! Работает исправно.
Код
Function ФИРМА(маркировка As Range, таблица_соответствий As Range) As String
Dim arr(), I&
Dim Mark()
Mark = маркировка.Value
arr = таблица_соответствий.Value
For Each iMrk In Mark
For I = LBound(arr, 1) To UBound(arr, 1)
    If InStr(1, iMrk, arr(I, 2)) <> 0 Then
        If InStr(1, ФИРМА, arr(I, 1)) = 0 Then
            If ФИРМА = Empty Then
                ФИРМА = arr(I, 1)
            Else
                ФИРМА = ФИРМА & "+" & arr(I, 1)
            End If
        End If
    End If
Next
Next
End Function
 
Цитата
написал:
Здравствуйте  MaxGromov , вариант
Благодарю! Работает исправно
Страницы: 1
Читают тему
Наверх