Здравствуйте гуру Может ли Excel при сравнении текста в двух ячейках (=А1=В1) кроме результата "Истина" и "Ложь", показать что же в этих ячейках различается. Пример файлика прицепляю. Это простейший пример а нужно отслеживать более объемные наименования и указывать в чем ошибка.
еще самое элементарное можно посчитать количество знаков в в той и другой строке и сравнить А побуквенное сравнение нужен макрос и довольно сложный Возможно есть готовое решение в других программах
anvg прикольно, а что это за функция Difference в справочнике эксель не могу найти, какова логика работы почему она в одном месте показывает "ВД" в данном случае в сравниваемых ячейках есть два разных слова "рыбоводство" и "рыболовство" но в другом случае отражаетмя результат "А РОСИЙСКОЙ ФЕДЕРАЦИ И МУНИЦИПАЛЬНЫХ ОБРАЗОВАНИЙ (проверяемая короче эталона)" при этом тут так же есть два разных слова "субъекта" и "субъектов". PS Но данная функция не решает всей проблемы все равно текст надо сравнивать глазами что там не так например по строкам 5 и 45 в одном случае не хватает слова и формула пишет (проверяемая короче эталона), в другом случае присутствует лишний пробел и результат тогда такой " ДЕЯТЕЛЬНОСТИ ФИНАНСОВЫХ, НАЛОГОВЫХ И ТАМОЖЕНЫХ ОРГАНОВ И ОРГАНОВ ФИНАНСОВОГО (ФИНАНСОВО-БЮДЖЕТНОГО) НАДЗОРА (проверяемая длиннее эталона)"
В файле макрос-функция Difference - поэтому и нет её описания в справке. Выдаёт различие между исследуемой строкой и эталонной + сравнение по длине. Как дополнение к вариантам Z есть ещё надстройка, найденная Владимиром (ZVI), которая по приблизительному совпадению выдаст, на манер ВПР, правильное значение по приблизительно похожему.
anvg пытаюсь понять логику вашего макроса (хотя в макросах :o нихт ферштейн) как он выводит результат 1. в случае с 5 строкой до лишнего пробела у макроса все совпадало но лишний пробел сместил значения и пошел бардак для кода (я так понимаю), вследствии чего отразился такой результат в ячейке контроля (в смысле несовпадение в проверяемых ячейках) и (проверяемая длиннее эталона) это лишний пробел 2. по строке 15 по количеству знаков все ОК но содержание макрос напрягло типа в эталоне рыбоЛоВство а в проверяемом рыбоВоДство и эти буквы ВД несоответствуют эталону 3. по строке 45 количество знаков посчитал их мало (проверяемая короче эталона) далее я так понимаю в проверяемой ячейке проверил совпадения которые нашел в эталоне а что не нашел типа ну на нет и суда нет 4. по строке 52 количество знаков посчитал их мало (проверяемая короче эталона), далее пошел сравнивать текстовку дошел до контрольного слова субъектОВ и начался бардак вместо буквы О (эталон) в проверяемой ячейке идет буква А, вместо буквы В идет пробел и после пробела код теряется в ориентации и для него все становитсмя не то.
Вот вроде все прально делает макрос находит косяки но как то он спотыкается об пробел, это просто мое мнение не претендующее на правильное
PS просто понравился макрос может его как то доработать можно
Еще мысли в слух может ему дать такое условие если это вообще возможно что текст сравнивается не учитывая пробел. А в вывод результата добавить колличество знаков на которые разница типа (проверяемая длиннее эталона 3) глядя на результат если других ошибок нет можно предположить что это по тексту лишние пробелы, а если (проверяемая длиннее эталона 20) то явно впендюрили какое то лишнее слово или в случае (проверяемая короче эталона 20) явно что то удалили
seregeyss, вообще Ваша идея изначально плоха. Не будет пробела, будут знаки препинания, любые символы, сдвоенные буквы, перестановки букв. Эксель не умеет мыслить абстрактно, только вычислять. Может сравнить длину строк, вычислить позицию первого несовпадения и т.д. А так, как Вам хочется, не получится.
Z спасиб за ссылка пытался но не смог контора связана с финансами пользователи урезаны в правах на установку ПО чего либо сами, все через админа а у них установка "ни фига не ставить кроме как официально разрешенного" вот таки дела
Лишние пробелы можно и побороть, функция будет такой
Скрытый текст
Код
Public Function Difference(ByVal inspectStr As String, ByVal etalonStr As String) As Variant
Dim vLen1 As Long, vLen2 As Long
Dim vLen, i As Long, sAdd As String
Dim sDif As String, sChar As String
With Application.WorksheetFunction
inspectStr = .Trim(inspectStr)
etalonStr = .Trim(etalonStr)
End With
If VBA.StrComp(inspectStr, etalonStr, vbTextCompare) = 0 Then
Difference = True
Else
vLen1 = Len(inspectStr): vLen2 = Len(etalonStr): vLen = vLen1
If vLen1 > vLen2 Then
vLen = vLen2
sAdd = " (проверяемая длиннее эталона)"
ElseIf vLen1 < vLen2 Then
sAdd = " (проверяемая короче эталона)"
End If
inspectStr = UCase$(inspectStr): etalonStr = UCase$(etalonStr)
For i = 1 To vLen1
sChar = Mid$(inspectStr, i, 1)
If sChar <> Mid$(etalonStr, i, 1) Then sDif = sDif & sChar
Next
Difference = sDif & sAdd
End If
End Function
А по поводу проблемы лицензирования для администраторов, то Fuzzy Lookup Add-In for Excel бесплатна при наличии легальной лицензии Offce.