Добрый день уважаемые Excel-ГУРУ. Нужна помощь в решении нетривиальной задачи, к моему глубокому сожалению моих познаний этой замечательной программы хватает для бытового использования, не более. Исходные данные таковы: есть 1 столбец в 1400 ячеек, в каждой уникальная комбинация (полные совпадения отсутствуют) из шести (проставленных по возрастанию) цифр. Необходимо найти все комбинации с совпадением по 5-ти и 4-м цифрам.
Добрый день уважаемые Excel-ГУРУ. Нужна помощь в решении нетривиальной задачи, к моему глубокому сожалению моих познаний этой замечательной программы хватает для бытового использования, не более. Исходные данные таковы: есть 1 столбец в 1400 ячеек, в каждой уникальная комбинация (полные совпадения отсутствуют) из шести (проставленных по возрастанию) цифр. Необходимо найти все комбинации с совпадением по 5-ти и 4-м цифрам.Shuhard
Shuhard, "Нынче в школах отменили комбинаторику, и напрасно. Прежде в восьмом классе давали азы теории вероятностей. Число сочетаний по 7 из 49 рассчитывается по формуле: C 7...49 = 49!/[7!·(49-7)!] = 85 900 584." Нашел в интернете сколько вариантов... но это 7 из 49 .. при 4 и 5 вроде поменьше будет. какие из них уже выпали в вашей выборке..))) при 5 = 1 906 884.. при 4 = 211 876.
Shuhard, "Нынче в школах отменили комбинаторику, и напрасно. Прежде в восьмом классе давали азы теории вероятностей. Число сочетаний по 7 из 49 рассчитывается по формуле: C 7...49 = 49!/[7!·(49-7)!] = 85 900 584." Нашел в интернете сколько вариантов... но это 7 из 49 .. при 4 и 5 вроде поменьше будет. какие из них уже выпали в вашей выборке..))) при 5 = 1 906 884.. при 4 = 211 876.cmivadwot
Это конечно здорово что вы знаете теорию вероятностей, однако я создал эту тему не для её обсуждения. Мне нужна была помощь, и я за ней обратился - за спрос не бьют. Если кто-нибудь поможет, я буду очень рад и благодарен, ну а на нет и суда нет.
Это конечно здорово что вы знаете теорию вероятностей, однако я создал эту тему не для её обсуждения. Мне нужна была помощь, и я за ней обратился - за спрос не бьют. Если кто-нибудь поможет, я буду очень рад и благодарен, ну а на нет и суда нет.Shuhard
Сообщение отредактировал Shuhard - Вторник, 08.11.2022, 22:16
Shuhard, вот по вариациям и перестановкам по 6. как скомпоновать по 4 и 5 и сколько будет вариантов чет не лезет в голову.... мутная тема. брать и отсекать от получившихся вариантов по 1, 2 последних цифры...или впереди....
Shuhard, вот по вариациям и перестановкам по 6. как скомпоновать по 4 и 5 и сколько будет вариантов чет не лезет в голову.... мутная тема. брать и отсекать от получившихся вариантов по 1, 2 последних цифры...или впереди....cmivadwot
Сообщение отредактировал cmivadwot - Среда, 09.11.2022, 14:21
Sub u_5() '5 Application.ScreenUpdating = False 'левые For Each b In Range("a1:a1400") crow = b.Row cleft = "*" & Left(b, InStrRev(b, ",") - 1) & ",*" g = Application.CountIf(Range("a1:a1400"), cleft) If g > 1 Then e = 1 For h = 1 To g
d = Application.Match(cleft, Range("a" & e & ":a1400"), 0) e = e + d If e - 1 <> crow Then f = Cells(crow, Columns.Count).End(xlToLeft).Column + 1 Cells(crow, f) = Range("a" & e - 1).Value End If
Next End If Next 'правые For Each b In Range("a1:a1400") crow = b.Row cright = "*," & Mid(b, InStr(b, ",") + 1, 17) & "*" g = Application.CountIf(Range("a1:a1400"), cright) If g > 1 Then e = 1 For h = 1 To g d = Application.Match(cright, Range("a" & e & ":a1400"), 0) e = e + d If e - 1 <> crow Then f = Cells(crow, Columns.Count).End(xlToLeft).Column + 1 Cells(crow, f) = Range("a" & e - 1).Value End If Next End If Next Application.ScreenUpdating = True End Sub Sub u_4() '4 Application.ScreenUpdating = False 'левые For Each b In Range("a1:a1400") crow = b.Row cleft = "*" & Left(Left(b, InStrRev(b, ",") - 1), InStrRev(b, ",") - 1) & ",*" g = Application.CountIf(Range("a1:a1400"), cleft) If g > 1 Then e = 1 For h = 1 To g
d = Application.Match(cleft, Range("a" & e & ":a1400"), 0) e = e + d If e - 1 <> crow Then f = Cells(crow, Columns.Count).End(xlToLeft).Column + 1 Cells(crow, f) = Range("a" & e - 1).Value End If
Next End If Next 'правые For Each b In Range("a1:a1400") crow = b.Row cright = "*," & Mid(Mid(b, InStr(b, ",") + 1, 17), InStr(b, ",") + 1, 17) & "*" g = Application.CountIf(Range("a1:a1400"), cright) If g > 1 Then e = 1 For h = 1 To g d = Application.Match(cright, Range("a" & e & ":a1400"), 0) e = e + d If e - 1 <> crow Then f = Cells(crow, Columns.Count).End(xlToLeft).Column + 1 Cells(crow, f) = Range("a" & e - 1).Value End If Next End If Next Application.ScreenUpdating = True End Sub
[/vba]
вдруг правильно
[vba]
Код
Sub u_5() '5 Application.ScreenUpdating = False 'левые For Each b In Range("a1:a1400") crow = b.Row cleft = "*" & Left(b, InStrRev(b, ",") - 1) & ",*" g = Application.CountIf(Range("a1:a1400"), cleft) If g > 1 Then e = 1 For h = 1 To g
d = Application.Match(cleft, Range("a" & e & ":a1400"), 0) e = e + d If e - 1 <> crow Then f = Cells(crow, Columns.Count).End(xlToLeft).Column + 1 Cells(crow, f) = Range("a" & e - 1).Value End If
Next End If Next 'правые For Each b In Range("a1:a1400") crow = b.Row cright = "*," & Mid(b, InStr(b, ",") + 1, 17) & "*" g = Application.CountIf(Range("a1:a1400"), cright) If g > 1 Then e = 1 For h = 1 To g d = Application.Match(cright, Range("a" & e & ":a1400"), 0) e = e + d If e - 1 <> crow Then f = Cells(crow, Columns.Count).End(xlToLeft).Column + 1 Cells(crow, f) = Range("a" & e - 1).Value End If Next End If Next Application.ScreenUpdating = True End Sub Sub u_4() '4 Application.ScreenUpdating = False 'левые For Each b In Range("a1:a1400") crow = b.Row cleft = "*" & Left(Left(b, InStrRev(b, ",") - 1), InStrRev(b, ",") - 1) & ",*" g = Application.CountIf(Range("a1:a1400"), cleft) If g > 1 Then e = 1 For h = 1 To g
d = Application.Match(cleft, Range("a" & e & ":a1400"), 0) e = e + d If e - 1 <> crow Then f = Cells(crow, Columns.Count).End(xlToLeft).Column + 1 Cells(crow, f) = Range("a" & e - 1).Value End If
Next End If Next 'правые For Each b In Range("a1:a1400") crow = b.Row cright = "*," & Mid(Mid(b, InStr(b, ",") + 1, 17), InStr(b, ",") + 1, 17) & "*" g = Application.CountIf(Range("a1:a1400"), cright) If g > 1 Then e = 1 For h = 1 To g d = Application.Match(cright, Range("a" & e & ":a1400"), 0) e = e + d If e - 1 <> crow Then f = Cells(crow, Columns.Count).End(xlToLeft).Column + 1 Cells(crow, f) = Range("a" & e - 1).Value End If Next End If Next Application.ScreenUpdating = True End Sub
Ну вот вроде, что-то получилось. Это в PQ В оранжевой таблице значения, которые похожи по вашим условиям. Всего 52 шт
[vba]
Код
let Источник = Table.FuzzyNestedJoin(Таблица1, {"Столбец1"}, Таблица1, {"Столбец1"}, "Таблица1", JoinKind.Inner, [IgnoreCase=true, IgnoreSpace=true, Threshold=0.75]), #"Развернутый элемент Таблица1" = Table.ExpandTableColumn(Источник, "Таблица1", {"Столбец1"}, {"Таблица1.Столбец1"}) in #"Развернутый элемент Таблица1"
[/vba]
Ну вот вроде, что-то получилось. Это в PQ В оранжевой таблице значения, которые похожи по вашим условиям. Всего 52 шт
[vba]
Код
let Источник = Table.FuzzyNestedJoin(Таблица1, {"Столбец1"}, Таблица1, {"Столбец1"}, "Таблица1", JoinKind.Inner, [IgnoreCase=true, IgnoreSpace=true, Threshold=0.75]), #"Развернутый элемент Таблица1" = Table.ExpandTableColumn(Источник, "Таблица1", {"Столбец1"}, {"Таблица1.Столбец1"}) in #"Развернутый элемент Таблица1"
Итак господа EXCELэнтузиасты, выражаю вам свою искреннюю благодарность за помощь и отзывчивость. Я очень рад что есть ещё люди готовые помочь, просто так, потому что могут. Ещё раз всем огромное спасибо) Ожидаемый результат подтверждён).
Итак господа EXCELэнтузиасты, выражаю вам свою искреннюю благодарность за помощь и отзывчивость. Я очень рад что есть ещё люди готовые помочь, просто так, потому что могут. Ещё раз всем огромное спасибо) Ожидаемый результат подтверждён).Shuhard
Сообщение отредактировал Shuhard - Среда, 09.11.2022, 18:58