Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Сравнение данных (Excel) / 11 сообщений из 11, страница 1 из 1
15.05.2010, 15:48
    #36629959
Сергей846
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение данных (Excel)
Подскажите пожалуйста как можно сравнить значения двух противоположных ячеек. Например есть таблица, в ней две колонки: 1-я ФИО_Ведомость, 2-я ФИО_подгруж., так вот надо 2-ю колонку сравнить с 1-ой. и в отдельной колонке вывести количество допущенных ошибок. Если бы они всегда имели одинаковое кол-во символов, но бывает когда Иванов=Ианов ошибка одна, Иванов=Ивонов тоже одна, Иванов=Еванив 2 ошибки и.т.д. т.е. надо сравнить В1 с А1, В2 с А2 и т.д. Заранее спасибо.
...
Рейтинг: 0 / 0
15.05.2010, 15:52
    #36629961
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение данных (Excel)
Водка и Пиво - это сколько ошибок?
...
Рейтинг: 0 / 0
15.05.2010, 15:57
    #36629964
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение данных (Excel)
Иванов и Иваеенов - сколько ошибок?
Иванов и Иваееноеев - сколько ошибок?

вопрос возникает из-за того, что нужно придумывать алгоритм поиска возобновления правильной комбинации, а это будет довольно непросто
...
Рейтинг: 0 / 0
15.05.2010, 16:09
    #36629969
Сергей846
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение данных (Excel)
Shocker.ProВодка и Пиво - это сколько ошибок?
Здесь ошибок нет
А елс серьезно,сам ломаю голову, если бы было одинаковое кол-во символов то сравнение можно было определить сколько символов в ячейке В различаются с ячейкой А. Основа для сравнения (т.е. правильное ФИО) - это ФИО в ячейке А. Думаю наверное не получится т.к.
Иванов и Иваеенов - можно посчитать и 5 так как изменилось расположение символов "еенов" но для моего случая только 2 т.е. лишние "ее"
Иванов и Иваееноеев - 4
Просто приходится сверять такие ведомости вручную, т.е. глазами а записей в них 3000-5000 штук. Допускается одна ошибка (т.е. 1 пропущенный символ или 1 лишний символ или 1 различающийся). Думал как то реализовать отбор таких ФИО.
...
Рейтинг: 0 / 0
15.05.2010, 16:10
    #36629971
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение данных (Excel)
А вот такую штуку в подарок не желаете?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
?CStr(Round(CompStr("Иванов","Ивонов")* 100 ))+"%"
 60 %
?CStr(Round(CompStr("Иванов","Ивнов")* 100 ))+"%"
 53 %
?CStr(Round(CompStr("Иванов","Петров")* 100 ))+"%"
 20 %
?CStr(Round(CompStr("Иванов","Люся")* 100 ))+"%"
 0 %
?CStr(Round(CompStr("Иванов","Иванов")* 100 ))+"%"
 100 %
...
Рейтинг: 0 / 0
15.05.2010, 16:11
    #36629972
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение данных (Excel)
Сергей846Допускается одна ошибка (т.е. 1 пропущенный символ или 1 лишний символ или 1 различающийся). Думал как то реализовать отбор таких ФИО.

Так вы определитесь.
Если вам нужно посчитать количество ошибок - это одно
Если нужно определить - одна ошибка или несколько - совсем другое!
...
Рейтинг: 0 / 0
15.05.2010, 16:17
    #36629981
Сергей846
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение данных (Excel)
Shocker.ProА вот такую штуку в подарок не желаете?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
?CStr(Round(CompStr("Иванов","Ивонов")* 100 ))+"%"
 60 %
?CStr(Round(CompStr("Иванов","Ивнов")* 100 ))+"%"
 53 %
?CStr(Round(CompStr("Иванов","Петров")* 100 ))+"%"
 20 %
?CStr(Round(CompStr("Иванов","Люся")* 100 ))+"%"
 0 %
?CStr(Round(CompStr("Иванов","Иванов")* 100 ))+"%"
 100 %


Этот метод в полне подходит. Спасибо! То что надо. Только как его реализовать в Excel?
...
Рейтинг: 0 / 0
15.05.2010, 16:27
    #36629990
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение данных (Excel)
Сергей846Этот метод в полне подходит. Спасибо! То что надо. Только как его реализовать в Excel?

А-а-а-а. Это дурацкая функция, придуманная мной на заре учебы программированию
Впрочем с тех пор успешно сравнивающая мне текстовые строки на "похожесть".

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Function CompStr(Str1 As String, Str2 As String) As Single

Dim Word As Integer, likeness As Long, i As Integer
Dim maxn As Integer, k As Integer
Dim s1 As String, s2 As String
Word =  3 : likeness =  0 
s1 = Trim(CutDblSpaces(IIf(Len(Str1) > Len(Str2), Str1, Str2)))
s2 = Trim(CutDblSpaces(IIf(Len(Str1) > Len(Str2), Str2, Str1)))

If Len(s1) < Word +  1  Or Len(s2) < Word +  1  Then
  CompStr = IIf(s1 = s2,  1 ,  0 )
  Exit Function
End If

For i =  1  To Len(s1) - Word +  1 
  maxn =  0 
  k = InStr( 1 , s2, Mid$(s1, i, Word))
  Do Until k =  0 
    If Len(s1) - Abs(k - i) > maxn Then maxn = Len(s1) - Abs(k - i)
    k = InStr(k +  1 , s2, Mid$(s1, i, Word))
  Loop
  likeness = likeness + maxn
Next
CompStr = likeness / (Len(s1) * (Len(s1) - Word +  1 ))
  
End Function

Но есть нюанс. Функцию я эксплуатирую на строках примерно 100-300 символов и заточена она для того, чтобы эффективно сравнивать фразы, слова в которых могут быть переставлены местами.

Для такого короткого сравнения как "Иванов" она достаточно громоздка. Кроме того, если вы все-таки будете ее использовать для коротких строк, поменяйте в начале Word = 3 на Word = 2 .

Но она-таки вам не нужна, если задача стоит определить "одна" или "несколько" ошибок.
...
Рейтинг: 0 / 0
15.05.2010, 16:28
    #36629991
SashaM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение данных (Excel)
Shocker.ProА вот такую штуку в подарок не желаете?
Код: plaintext
?CStr(Round(CompStr("Иванов","воновИ")* 100 ))+"%"

А в таком варианте каков ответ?
...
Рейтинг: 0 / 0
15.05.2010, 16:30
    #36629992
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение данных (Excel)
SashaMShocker.ProА вот такую штуку в подарок не желаете?
Код: plaintext
?CStr(Round(CompStr("Иванов","воновИ")* 100 ))+"%"

А в таком варианте каков ответ?

33%
Как я уже сказал, заточена функция на поиск перестановок, и чем короче строка, тем больше ее неадекватность.
...
Рейтинг: 0 / 0
15.05.2010, 19:25
    #36630089
Ihtiandrus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение данных (Excel)
Сергей,
можно попробовать булево сравнение всех столбцов для выявления некорректных записей
=(A1=B1)*(C1=D1)*(E1=F1)
Потом можно автофильтром найти некорретные записи со значением "0"
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Сравнение данных (Excel) / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]