Проверить набор цифр по определенным параметрам.
bmv98rus
Дата: Воскресенье, 02.12.2018, 23:22 |
Сообщение № 21
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4106
Репутация:
768
±
Замечаний:
0% ±
Excel 2013/2016
Да, с нулями не учел, но не проблемана наличие идущих подряд 3 или более одинаковых цифр
это не включая контрольную сумму?Код
=IFERROR(LEN((RIGHT(0&MOD(SUM(MID(SUBSTITUTE(A1;"-";"");ROW($1:$9);1)*(10-ROW($1:$9)));101);2)=RIGHT(A1;2))*(SUM(--ISERR(FIND(REPT(ROW($1:$10)-1;3);A1)))>0)*(1&SUBSTITUTE(A1;"-";"")))=12;1=0)
Если не включая и только в групах тоКод
=IFERROR(LEN((RIGHT(0&MOD(SUM(MID(SUBSTITUTE(A6;"-";"");ROW($1:$9);1)*(10-ROW($1:$9)));101);2)=RIGHT(A6;2))*(SUM(--ISERR(FIND(REPT(ROW($1:$10)-1;3);LEFT(A6;11))))>0)*(1&SUBSTITUTE(A6;"-";"")))=12;1=0)
Если подряд через - считать, то такКод
=IFERROR(LEN((RIGHT(0&MOD(SUM(MID(SUBSTITUTE(A1;"-";);ROW($1:$9);1)*(10-ROW($1:$9)));101);2)=RIGHT(A1;2))*(SUM(--ISERR(FIND(REPT(ROW($1:$10)-1;3);LEFT(SUBSTITUTE(A1;"-";);9))))>0)*(1&SUBSTITUTE(A1;"-";)))=12;1=0)
Код
=IFERROR((RIGHT(0&MOD(SUM(MID(SUBSTITUTE(A1;"-";);ROW($1:$9);1)*(10-ROW($1:$9)));101);2)=RIGHT(A1;2))*(SUM(--ISERR(FIND(REPT(ROW($1:$10)-1;3);LEFT(SUBSTITUTE(A1;"-";);9))))>0)*(LEN(SUBSTITUTE(A1;"-";))=11);)=1
Да, с нулями не учел, но не проблемана наличие идущих подряд 3 или более одинаковых цифр
это не включая контрольную сумму?Код
=IFERROR(LEN((RIGHT(0&MOD(SUM(MID(SUBSTITUTE(A1;"-";"");ROW($1:$9);1)*(10-ROW($1:$9)));101);2)=RIGHT(A1;2))*(SUM(--ISERR(FIND(REPT(ROW($1:$10)-1;3);A1)))>0)*(1&SUBSTITUTE(A1;"-";"")))=12;1=0)
Если не включая и только в групах тоКод
=IFERROR(LEN((RIGHT(0&MOD(SUM(MID(SUBSTITUTE(A6;"-";"");ROW($1:$9);1)*(10-ROW($1:$9)));101);2)=RIGHT(A6;2))*(SUM(--ISERR(FIND(REPT(ROW($1:$10)-1;3);LEFT(A6;11))))>0)*(1&SUBSTITUTE(A6;"-";"")))=12;1=0)
Если подряд через - считать, то такКод
=IFERROR(LEN((RIGHT(0&MOD(SUM(MID(SUBSTITUTE(A1;"-";);ROW($1:$9);1)*(10-ROW($1:$9)));101);2)=RIGHT(A1;2))*(SUM(--ISERR(FIND(REPT(ROW($1:$10)-1;3);LEFT(SUBSTITUTE(A1;"-";);9))))>0)*(1&SUBSTITUTE(A1;"-";)))=12;1=0)
Код
=IFERROR((RIGHT(0&MOD(SUM(MID(SUBSTITUTE(A1;"-";);ROW($1:$9);1)*(10-ROW($1:$9)));101);2)=RIGHT(A1;2))*(SUM(--ISERR(FIND(REPT(ROW($1:$10)-1;3);LEFT(SUBSTITUTE(A1;"-";);9))))>0)*(LEN(SUBSTITUTE(A1;"-";))=11);)=1
bmv98rus
Замечательный Временно просто медведь , процентов на 20 .
Сообщение отредактировал bmv98rus - Понедельник, 03.12.2018, 08:00
Ответить
Сообщение Да, с нулями не учел, но не проблемана наличие идущих подряд 3 или более одинаковых цифр
это не включая контрольную сумму?Код
=IFERROR(LEN((RIGHT(0&MOD(SUM(MID(SUBSTITUTE(A1;"-";"");ROW($1:$9);1)*(10-ROW($1:$9)));101);2)=RIGHT(A1;2))*(SUM(--ISERR(FIND(REPT(ROW($1:$10)-1;3);A1)))>0)*(1&SUBSTITUTE(A1;"-";"")))=12;1=0)
Если не включая и только в групах тоКод
=IFERROR(LEN((RIGHT(0&MOD(SUM(MID(SUBSTITUTE(A6;"-";"");ROW($1:$9);1)*(10-ROW($1:$9)));101);2)=RIGHT(A6;2))*(SUM(--ISERR(FIND(REPT(ROW($1:$10)-1;3);LEFT(A6;11))))>0)*(1&SUBSTITUTE(A6;"-";"")))=12;1=0)
Если подряд через - считать, то такКод
=IFERROR(LEN((RIGHT(0&MOD(SUM(MID(SUBSTITUTE(A1;"-";);ROW($1:$9);1)*(10-ROW($1:$9)));101);2)=RIGHT(A1;2))*(SUM(--ISERR(FIND(REPT(ROW($1:$10)-1;3);LEFT(SUBSTITUTE(A1;"-";);9))))>0)*(1&SUBSTITUTE(A1;"-";)))=12;1=0)
Код
=IFERROR((RIGHT(0&MOD(SUM(MID(SUBSTITUTE(A1;"-";);ROW($1:$9);1)*(10-ROW($1:$9)));101);2)=RIGHT(A1;2))*(SUM(--ISERR(FIND(REPT(ROW($1:$10)-1;3);LEFT(SUBSTITUTE(A1;"-";);9))))>0)*(LEN(SUBSTITUTE(A1;"-";))=11);)=1
Автор - bmv98rus Дата добавления - 02.12.2018 в 23:22
Mark1976
Дата: Понедельник, 03.12.2018, 05:28 |
Сообщение № 22
Группа: Проверенные
Ранг: Ветеран
Сообщений: 738
Репутация:
3
±
Замечаний:
0% ±
Excel 2010, 2013
Доброе утро. Для 10000 строк и более как применить формулу? В ней надо менять диапазон данных?
Доброе утро. Для 10000 строк и более как применить формулу? В ней надо менять диапазон данных? Mark1976
Ответить
Сообщение Доброе утро. Для 10000 строк и более как применить формулу? В ней надо менять диапазон данных? Автор - Mark1976 Дата добавления - 03.12.2018 в 05:28
Mark1976
Дата: Понедельник, 03.12.2018, 07:47 |
Сообщение № 23
Группа: Проверенные
Ранг: Ветеран
Сообщений: 738
Репутация:
3
±
Замечаний:
0% ±
Excel 2010, 2013
bmv98rus, Цитата
это не включая контрольную сумму?
включая.
bmv98rus, Цитата
это не включая контрольную сумму?
включая. Mark1976
Ответить
Сообщение bmv98rus, Цитата
это не включая контрольную сумму?
включая. Автор - Mark1976 Дата добавления - 03.12.2018 в 07:47
bmv98rus
Дата: Понедельник, 03.12.2018, 07:59 |
Сообщение № 24
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4106
Репутация:
768
±
Замечаний:
0% ±
Excel 2013/2016
Mark1976 , не строчите вы очередями, сообщения можно дополнять и исправлять. С учетом последнего Код
=IFERROR((RIGHT(0&MOD(SUM(MID(SUBSTITUTE(A1;"-";);ROW($1:$9);1)*(10-ROW($1:$9)));101);2)=RIGHT(A1;2))*(SUM(--ISERR(FIND(REPT(ROW($1:$10)-1;3);SUBSTITUTE(A1;"-";))))>0)*(LEN(SUBSTITUTE(A1;"-";))=11);)=1
Тянуть можно сколь угодно.
Mark1976 , не строчите вы очередями, сообщения можно дополнять и исправлять. С учетом последнего Код
=IFERROR((RIGHT(0&MOD(SUM(MID(SUBSTITUTE(A1;"-";);ROW($1:$9);1)*(10-ROW($1:$9)));101);2)=RIGHT(A1;2))*(SUM(--ISERR(FIND(REPT(ROW($1:$10)-1;3);SUBSTITUTE(A1;"-";))))>0)*(LEN(SUBSTITUTE(A1;"-";))=11);)=1
Тянуть можно сколь угодно.bmv98rus
Замечательный Временно просто медведь , процентов на 20 .
Ответить
Сообщение Mark1976 , не строчите вы очередями, сообщения можно дополнять и исправлять. С учетом последнего Код
=IFERROR((RIGHT(0&MOD(SUM(MID(SUBSTITUTE(A1;"-";);ROW($1:$9);1)*(10-ROW($1:$9)));101);2)=RIGHT(A1;2))*(SUM(--ISERR(FIND(REPT(ROW($1:$10)-1;3);SUBSTITUTE(A1;"-";))))>0)*(LEN(SUBSTITUTE(A1;"-";))=11);)=1
Тянуть можно сколь угодно.Автор - bmv98rus Дата добавления - 03.12.2018 в 07:59
Светлый
Дата: Понедельник, 03.12.2018, 08:34 |
Сообщение № 25
Группа: Друзья
Ранг: Старожил
Сообщений: 1829
Репутация:
510
±
Замечаний:
0% ±
Excel 2013, 2016
У меня была недоработка с контрольной суммой, когда получалось 100. Исправленная формула:Код
=ЕСЛИ(И(ДЛСТР(A1)=14;ОСТАТ(ПСТР(ПОДСТАВИТЬ(A1;"-";);СТРОКА($1:$7);3)/111;1)<>0;-ПРАВБ(ОСТАТ(СУММПРОИЗВ(ПСТР(ПОДСТАВИТЬ(A1;"-";);СТРОКА($1:$9);1)*(10-СТРОКА($1:$9)));101);2)=-ПРАВБ(A1;2);ЕЧИСЛО(-ПОДСТАВИТЬ(A1;"-";)));"ОК";"Ошибка")
У меня была недоработка с контрольной суммой, когда получалось 100. Исправленная формула:Код
=ЕСЛИ(И(ДЛСТР(A1)=14;ОСТАТ(ПСТР(ПОДСТАВИТЬ(A1;"-";);СТРОКА($1:$7);3)/111;1)<>0;-ПРАВБ(ОСТАТ(СУММПРОИЗВ(ПСТР(ПОДСТАВИТЬ(A1;"-";);СТРОКА($1:$9);1)*(10-СТРОКА($1:$9)));101);2)=-ПРАВБ(A1;2);ЕЧИСЛО(-ПОДСТАВИТЬ(A1;"-";)));"ОК";"Ошибка")
Светлый
Программировать проще, чем писать стихи.
Ответить
Сообщение У меня была недоработка с контрольной суммой, когда получалось 100. Исправленная формула:Код
=ЕСЛИ(И(ДЛСТР(A1)=14;ОСТАТ(ПСТР(ПОДСТАВИТЬ(A1;"-";);СТРОКА($1:$7);3)/111;1)<>0;-ПРАВБ(ОСТАТ(СУММПРОИЗВ(ПСТР(ПОДСТАВИТЬ(A1;"-";);СТРОКА($1:$9);1)*(10-СТРОКА($1:$9)));101);2)=-ПРАВБ(A1;2);ЕЧИСЛО(-ПОДСТАВИТЬ(A1;"-";)));"ОК";"Ошибка")
Автор - Светлый Дата добавления - 03.12.2018 в 08:34
bmv98rus
Дата: Понедельник, 03.12.2018, 10:51 |
Сообщение № 26
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4106
Репутация:
768
±
Замечаний:
0% ±
Excel 2013/2016
Светлый , не корректно проверять на длинну в 14 исходный 009-897-510000 - выдаст корректный результат.Код
=MOD(MID(SUBSTITUTE(A1,"-",),ROW($1:$7),3)/111,1)<>0
почему не просто Код
=MOD(MID(SUBSTITUTE(A1,"-",),ROW($1:$7),3);111)<>0
Короткий русский Код
=IFERROR((RIGHTB(0&MOD(SUM(MID(SUBSTITUTE(A1;"-";);ROW($1:$9);1)*(10-ROW($1:$9)));101);2)=RIGHTB(A1;2))*(SUM(--ISERR(FIND(REPT(ROW($1:$10)-1;3);SUBSTITUTE(A1;"-";))))>0)*(LEN(SUBSTITUTE(A1;"-";))=11);)=1
Светлый , не корректно проверять на длинну в 14 исходный 009-897-510000 - выдаст корректный результат.Код
=MOD(MID(SUBSTITUTE(A1,"-",),ROW($1:$7),3)/111,1)<>0
почему не просто Код
=MOD(MID(SUBSTITUTE(A1,"-",),ROW($1:$7),3);111)<>0
Короткий русский Код
=IFERROR((RIGHTB(0&MOD(SUM(MID(SUBSTITUTE(A1;"-";);ROW($1:$9);1)*(10-ROW($1:$9)));101);2)=RIGHTB(A1;2))*(SUM(--ISERR(FIND(REPT(ROW($1:$10)-1;3);SUBSTITUTE(A1;"-";))))>0)*(LEN(SUBSTITUTE(A1;"-";))=11);)=1
bmv98rus
Замечательный Временно просто медведь , процентов на 20 .
Ответить
Сообщение Светлый , не корректно проверять на длинну в 14 исходный 009-897-510000 - выдаст корректный результат.Код
=MOD(MID(SUBSTITUTE(A1,"-",),ROW($1:$7),3)/111,1)<>0
почему не просто Код
=MOD(MID(SUBSTITUTE(A1,"-",),ROW($1:$7),3);111)<>0
Короткий русский Код
=IFERROR((RIGHTB(0&MOD(SUM(MID(SUBSTITUTE(A1;"-";);ROW($1:$9);1)*(10-ROW($1:$9)));101);2)=RIGHTB(A1;2))*(SUM(--ISERR(FIND(REPT(ROW($1:$10)-1;3);SUBSTITUTE(A1;"-";))))>0)*(LEN(SUBSTITUTE(A1;"-";))=11);)=1
Автор - bmv98rus Дата добавления - 03.12.2018 в 10:51
StoTisteg
Дата: Понедельник, 03.12.2018, 12:15 |
Сообщение № 27
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация:
103
±
Замечаний:
0% ±
Excel 2010
Для разнообразия сделал макросом...[vba]Код
Sub CheckSums() Dim i As Long Dim j As Integer Dim bErr As Boolean Dim s As String Dim cs As Integer, csm As Integer For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row bErr = False Do s = Cells(i, 1).Value bErr = Not (Len(s) = 14) If bErr Then Exit Do bErr = Not (Mid(s, 4, 1) = "-" And Mid(s, 8, 1) = "-" And Mid(s, 12, 1) = "-") If bErr Then Exit Do cs = Val(Right(s, 2)) s = Left(Replace(s, "-", "", 1, -1, vbTextCompare), 9) bErr = Not IsNumeric(s) If bErr Then Exit Do For j = 0 To 9 bErr = InStr(1, s, i & i & i, vbTextCompare) > 0 If bErr Then Exit For Next j If bErr Then Exit Do csm = 0 For j = 8 To 1 Step -1 csm = csm + Val(Left(s, 1)) * (j + 1) s = Right(s, j) Next j csm = csm + Val(s) csm = IIf(csm Mod 101 = 100, 0, csm Mod 101) bErr = Not csm = cs Exit Do Loop If bErr Then Cells(i, 3) = "ошибка" Next i End Sub
[/vba][p.s.]исправил погрешность во вложенном цикле, файл не перевкладывал
Для разнообразия сделал макросом...[vba]Код
Sub CheckSums() Dim i As Long Dim j As Integer Dim bErr As Boolean Dim s As String Dim cs As Integer, csm As Integer For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row bErr = False Do s = Cells(i, 1).Value bErr = Not (Len(s) = 14) If bErr Then Exit Do bErr = Not (Mid(s, 4, 1) = "-" And Mid(s, 8, 1) = "-" And Mid(s, 12, 1) = "-") If bErr Then Exit Do cs = Val(Right(s, 2)) s = Left(Replace(s, "-", "", 1, -1, vbTextCompare), 9) bErr = Not IsNumeric(s) If bErr Then Exit Do For j = 0 To 9 bErr = InStr(1, s, i & i & i, vbTextCompare) > 0 If bErr Then Exit For Next j If bErr Then Exit Do csm = 0 For j = 8 To 1 Step -1 csm = csm + Val(Left(s, 1)) * (j + 1) s = Right(s, j) Next j csm = csm + Val(s) csm = IIf(csm Mod 101 = 100, 0, csm Mod 101) bErr = Not csm = cs Exit Do Loop If bErr Then Cells(i, 3) = "ошибка" Next i End Sub
[/vba][p.s.]исправил погрешность во вложенном цикле, файл не перевкладывал StoTisteg
Интуитивно понятный код - это когда интуитивно понятно, что это код.
Сообщение отредактировал StoTisteg - Понедельник, 03.12.2018, 12:58
Ответить
Сообщение Для разнообразия сделал макросом...[vba]Код
Sub CheckSums() Dim i As Long Dim j As Integer Dim bErr As Boolean Dim s As String Dim cs As Integer, csm As Integer For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row bErr = False Do s = Cells(i, 1).Value bErr = Not (Len(s) = 14) If bErr Then Exit Do bErr = Not (Mid(s, 4, 1) = "-" And Mid(s, 8, 1) = "-" And Mid(s, 12, 1) = "-") If bErr Then Exit Do cs = Val(Right(s, 2)) s = Left(Replace(s, "-", "", 1, -1, vbTextCompare), 9) bErr = Not IsNumeric(s) If bErr Then Exit Do For j = 0 To 9 bErr = InStr(1, s, i & i & i, vbTextCompare) > 0 If bErr Then Exit For Next j If bErr Then Exit Do csm = 0 For j = 8 To 1 Step -1 csm = csm + Val(Left(s, 1)) * (j + 1) s = Right(s, j) Next j csm = csm + Val(s) csm = IIf(csm Mod 101 = 100, 0, csm Mod 101) bErr = Not csm = cs Exit Do Loop If bErr Then Cells(i, 3) = "ошибка" Next i End Sub
[/vba][p.s.]исправил погрешность во вложенном цикле, файл не перевкладывал Автор - StoTisteg Дата добавления - 03.12.2018 в 12:15
Mark1976
Дата: Понедельник, 03.12.2018, 12:36 |
Сообщение № 28
Группа: Проверенные
Ранг: Ветеран
Сообщений: 738
Репутация:
3
±
Замечаний:
0% ±
Excel 2010, 2013
StoTisteg, огромное спасибо.
Ответить
Сообщение StoTisteg, огромное спасибо. Автор - Mark1976 Дата добавления - 03.12.2018 в 12:36
StoTisteg
Дата: Понедельник, 03.12.2018, 13:01 |
Сообщение № 29
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация:
103
±
Замечаний:
0% ±
Excel 2010
Ну или UDF, если блямба посреди листа не нужна:[vba]Код
Function КСУММА(s As String) As String Dim i As Integer, cs As Integer, csm As Integer Dim bErr As Boolean КСУММА = "" Do If Not (Len(s) = 14) Then КСУММА = "#ДЛИНА" Exit Do End If If Not (Mid(s, 4, 1) = "-" And Mid(s, 8, 1) = "-" And Mid(s, 12, 1) = "-") Then КСУММА = "#РАЗДЕЛИТЕЛИ" Exit Do End If cs = Val(Right(s, 2)) s = Left(Replace(s, "-", "", 1, -1, vbTextCompare), 9) If Not IsNumeric(s) Then КСУММА = "#НЕЧИСЛО" Exit Do End If bErr = False For i = 0 To 9 bErr = InStr(1, s, i & i & i, vbTextCompare) > 0 If bErr Then Exit For Next i If bErr Then КСУММА = "#ПОДРЯД" Exit Do End If csm = 0 For i = 8 To 1 Step -1 csm = csm + Val(Left(s, 1)) * (i + 1) s = Right(s, i) Next i csm = csm + Val(s) csm = IIf(csm Mod 101 = 100, 0, csm Mod 101) If Not csm = cs Then КСУММА = "#КСУММА" Exit Do Loop End Function
[/vba]
Ну или UDF, если блямба посреди листа не нужна:[vba]Код
Function КСУММА(s As String) As String Dim i As Integer, cs As Integer, csm As Integer Dim bErr As Boolean КСУММА = "" Do If Not (Len(s) = 14) Then КСУММА = "#ДЛИНА" Exit Do End If If Not (Mid(s, 4, 1) = "-" And Mid(s, 8, 1) = "-" And Mid(s, 12, 1) = "-") Then КСУММА = "#РАЗДЕЛИТЕЛИ" Exit Do End If cs = Val(Right(s, 2)) s = Left(Replace(s, "-", "", 1, -1, vbTextCompare), 9) If Not IsNumeric(s) Then КСУММА = "#НЕЧИСЛО" Exit Do End If bErr = False For i = 0 To 9 bErr = InStr(1, s, i & i & i, vbTextCompare) > 0 If bErr Then Exit For Next i If bErr Then КСУММА = "#ПОДРЯД" Exit Do End If csm = 0 For i = 8 To 1 Step -1 csm = csm + Val(Left(s, 1)) * (i + 1) s = Right(s, i) Next i csm = csm + Val(s) csm = IIf(csm Mod 101 = 100, 0, csm Mod 101) If Not csm = cs Then КСУММА = "#КСУММА" Exit Do Loop End Function
[/vba] StoTisteg
Интуитивно понятный код - это когда интуитивно понятно, что это код.
Сообщение отредактировал StoTisteg - Понедельник, 03.12.2018, 13:11
Ответить
Сообщение Ну или UDF, если блямба посреди листа не нужна:[vba]Код
Function КСУММА(s As String) As String Dim i As Integer, cs As Integer, csm As Integer Dim bErr As Boolean КСУММА = "" Do If Not (Len(s) = 14) Then КСУММА = "#ДЛИНА" Exit Do End If If Not (Mid(s, 4, 1) = "-" And Mid(s, 8, 1) = "-" And Mid(s, 12, 1) = "-") Then КСУММА = "#РАЗДЕЛИТЕЛИ" Exit Do End If cs = Val(Right(s, 2)) s = Left(Replace(s, "-", "", 1, -1, vbTextCompare), 9) If Not IsNumeric(s) Then КСУММА = "#НЕЧИСЛО" Exit Do End If bErr = False For i = 0 To 9 bErr = InStr(1, s, i & i & i, vbTextCompare) > 0 If bErr Then Exit For Next i If bErr Then КСУММА = "#ПОДРЯД" Exit Do End If csm = 0 For i = 8 To 1 Step -1 csm = csm + Val(Left(s, 1)) * (i + 1) s = Right(s, i) Next i csm = csm + Val(s) csm = IIf(csm Mod 101 = 100, 0, csm Mod 101) If Not csm = cs Then КСУММА = "#КСУММА" Exit Do Loop End Function
[/vba] Автор - StoTisteg Дата добавления - 03.12.2018 в 13:01
Mark1976
Дата: Понедельник, 03.12.2018, 13:05 |
Сообщение № 30
Группа: Проверенные
Ранг: Ветеран
Сообщений: 738
Репутация:
3
±
Замечаний:
0% ±
Excel 2010, 2013
StoTisteg, файл открывается с ошибкой. Сразу с редактора.
StoTisteg, файл открывается с ошибкой. Сразу с редактора. Mark1976
Ответить
Сообщение StoTisteg, файл открывается с ошибкой. Сразу с редактора. Автор - Mark1976 Дата добавления - 03.12.2018 в 13:05
StoTisteg
Дата: Понедельник, 03.12.2018, 13:12 |
Сообщение № 31
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация:
103
±
Замечаний:
0% ±
Excel 2010
Перевложил, посмотрите сейчас. УМВР.
Перевложил, посмотрите сейчас. УМВР. StoTisteg
Интуитивно понятный код - это когда интуитивно понятно, что это код.
Ответить
Сообщение Перевложил, посмотрите сейчас. УМВР. Автор - StoTisteg Дата добавления - 03.12.2018 в 13:12
Светлый
Дата: Понедельник, 03.12.2018, 17:59 |
Сообщение № 32
Группа: Друзья
Ранг: Старожил
Сообщений: 1829
Репутация:
510
±
Замечаний:
0% ±
Excel 2013, 2016
почему не просто =ОСТАТ(ПСТР(ПОДСТАВИТЬ(A1;"-";);СТРОКА($1:$7);3);111)<>0
Действительно! Как-то замылился глаз. Оптимизировать не стал. Тогда и <>0 тоже не нужно.Код
=И(ОСТАТ(ПСТР(ПОДСТАВИТЬ(A1;"-";);СТРОКА($1:$9);3);111))
И причёсанная массивная формула:Код
=ЕСЛИ(И(ДЛСТР(A1)=14;ДЛСТР(ПОДСТАВИТЬ(A1;"-";))=11;ОСТАТ(ПСТР(ПОДСТАВИТЬ(A1;"-";);СТРОКА($1:$9);3);111);ПРАВБ(0&ОСТАТ(СУММ(ПСТР(ПОДСТАВИТЬ(A1;"-";);10-СТРОКА($1:$9);1)*СТРОКА($1:$9));101);2)=ПРАВБ(A1;2));"ОК";"Ошибка")
почему не просто =ОСТАТ(ПСТР(ПОДСТАВИТЬ(A1;"-";);СТРОКА($1:$7);3);111)<>0
Действительно! Как-то замылился глаз. Оптимизировать не стал. Тогда и <>0 тоже не нужно.Код
=И(ОСТАТ(ПСТР(ПОДСТАВИТЬ(A1;"-";);СТРОКА($1:$9);3);111))
И причёсанная массивная формула:Код
=ЕСЛИ(И(ДЛСТР(A1)=14;ДЛСТР(ПОДСТАВИТЬ(A1;"-";))=11;ОСТАТ(ПСТР(ПОДСТАВИТЬ(A1;"-";);СТРОКА($1:$9);3);111);ПРАВБ(0&ОСТАТ(СУММ(ПСТР(ПОДСТАВИТЬ(A1;"-";);10-СТРОКА($1:$9);1)*СТРОКА($1:$9));101);2)=ПРАВБ(A1;2));"ОК";"Ошибка")
Светлый
Программировать проще, чем писать стихи.
Ответить
Сообщение почему не просто =ОСТАТ(ПСТР(ПОДСТАВИТЬ(A1;"-";);СТРОКА($1:$7);3);111)<>0
Действительно! Как-то замылился глаз. Оптимизировать не стал. Тогда и <>0 тоже не нужно.Код
=И(ОСТАТ(ПСТР(ПОДСТАВИТЬ(A1;"-";);СТРОКА($1:$9);3);111))
И причёсанная массивная формула:Код
=ЕСЛИ(И(ДЛСТР(A1)=14;ДЛСТР(ПОДСТАВИТЬ(A1;"-";))=11;ОСТАТ(ПСТР(ПОДСТАВИТЬ(A1;"-";);СТРОКА($1:$9);3);111);ПРАВБ(0&ОСТАТ(СУММ(ПСТР(ПОДСТАВИТЬ(A1;"-";);10-СТРОКА($1:$9);1)*СТРОКА($1:$9));101);2)=ПРАВБ(A1;2));"ОК";"Ошибка")
Автор - Светлый Дата добавления - 03.12.2018 в 17:59
bmv98rus
Дата: Понедельник, 03.12.2018, 21:57 |
Сообщение № 33
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4106
Репутация:
768
±
Замечаний:
0% ±
Excel 2013/2016
Светлый ,не корректно проверять на длинну в 14 исходный 009-897-510000 - выдаст корректный результат
Код
=IF(IFERROR((RIGHTB(0&MOD(SUM(MID(SUBSTITUTE(A1;"-";);ROW($1:$9);1)*(10-ROW($1:$9)));101);2)=RIGHTB(A1;2))*SUM(--ISERR(FIND(REPT(ROW($1:$10)-1;3);SUBSTITUTE(A1;"-";))))*(LEN(SUBSTITUTE(A1;"-";))=11););"Ок";"Ошибка")
Светлый ,не корректно проверять на длинну в 14 исходный 009-897-510000 - выдаст корректный результат
Код
=IF(IFERROR((RIGHTB(0&MOD(SUM(MID(SUBSTITUTE(A1;"-";);ROW($1:$9);1)*(10-ROW($1:$9)));101);2)=RIGHTB(A1;2))*SUM(--ISERR(FIND(REPT(ROW($1:$10)-1;3);SUBSTITUTE(A1;"-";))))*(LEN(SUBSTITUTE(A1;"-";))=11););"Ок";"Ошибка")
bmv98rus
Замечательный Временно просто медведь , процентов на 20 .
Сообщение отредактировал bmv98rus - Понедельник, 03.12.2018, 21:58
Ответить
Сообщение Светлый ,не корректно проверять на длинну в 14 исходный 009-897-510000 - выдаст корректный результат
Код
=IF(IFERROR((RIGHTB(0&MOD(SUM(MID(SUBSTITUTE(A1;"-";);ROW($1:$9);1)*(10-ROW($1:$9)));101);2)=RIGHTB(A1;2))*SUM(--ISERR(FIND(REPT(ROW($1:$10)-1;3);SUBSTITUTE(A1;"-";))))*(LEN(SUBSTITUTE(A1;"-";))=11););"Ок";"Ошибка")
Автор - bmv98rus Дата добавления - 03.12.2018 в 21:57