Страницы: 1
RSS
Объединить две ячейки, создав правило при объединение в них
 
Добрый день, идут две ячейки в которых содержится 15 значений, нужно объединить каждое с каждым, при этом создать правило, если разные значения то начальная значение в 0,5 увеличивается в два раза.
строка 1 X2121XX1X2XXXX1
строка 2 11X21XX1X2X2X21
объединяем их  и получаем
1-(1,X);2-(1,2);3-(1,X);4-(2);5-(1);6-(X);7-(X);8-(1);9-(X);10-(2);11-(X);12-(X,2);13-(X);14-(X,2);15-(1).
как видим тут получилось в 5 события 5 разных исходов, итого получается
0,5*2=1
1*2=2
2*2=4
4*2=8
8*2= 16
в итоге нужно чтобы получилась такая строка:
16.00;1-(1,X);2-(1,2);3-(1,X);4-(2);5-(1);6-(X);7-(X);8-(1);9-(X);10-(2);11-(X);12-(X,2);13-(X);14-(X,2);15-(1).

это можно как то создать правилом, формулой если количество строк начальных будет к примеру = 200 ?

во вложении файл пример.
 
Вариант с дополнительными столбцами. Искомое значение в BJ2.
Код
C2            =ПСТР($A2;СТОЛБЕЦ(A:A);1)
D2            =ПСТР($A2;СТОЛБЕЦ(B:B);1)
E2            =ПСТР($A2;СТОЛБЕЦ(C:C);1)
F2            =ПСТР($A2;СТОЛБЕЦ(D:D);1)
G2            =ПСТР($A2;СТОЛБЕЦ(E:E);1)
H2            =ПСТР($A2;СТОЛБЕЦ(F:F);1)
I2            =ПСТР($A2;СТОЛБЕЦ(G:G);1)
J2            =ПСТР($A2;СТОЛБЕЦ(H:H);1)
K2            =ПСТР($A2;СТОЛБЕЦ(I:I);1)
L2            =ПСТР($A2;СТОЛБЕЦ(J:J);1)
M2            =ПСТР($A2;СТОЛБЕЦ(K:K);1)
N2            =ПСТР($A2;СТОЛБЕЦ(L:L);1)
O2            =ПСТР($A2;СТОЛБЕЦ(M:M);1)
P2            =ПСТР($A2;СТОЛБЕЦ(N:N);1)
Q2            =ПСТР($A2;СТОЛБЕЦ(O:O);1)
R2            =ПСТР($B2;СТОЛБЕЦ(A:A);1)
S2            =ПСТР($B2;СТОЛБЕЦ(B:B);1)
T2            =ПСТР($B2;СТОЛБЕЦ(C:C);1)
U2            =ПСТР($B2;СТОЛБЕЦ(D:D);1)
V2            =ПСТР($B2;СТОЛБЕЦ(E:E);1)
W2            =ПСТР($B2;СТОЛБЕЦ(F:F);1)
X2            =ПСТР($B2;СТОЛБЕЦ(G:G);1)
Y2            =ПСТР($B2;СТОЛБЕЦ(H:H);1)
Z2            =ПСТР($B2;СТОЛБЕЦ(I:I);1)
AA2           =ПСТР($B2;СТОЛБЕЦ(J:J);1)
AB2           =ПСТР($B2;СТОЛБЕЦ(K:K);1)
AC2           =ПСТР($B2;СТОЛБЕЦ(L:L);1)
AD2           =ПСТР($B2;СТОЛБЕЦ(M:M);1)
AE2           =ПСТР($B2;СТОЛБЕЦ(N:N);1)
AF2           =ПСТР($B2;СТОЛБЕЦ(O:O);1)
AG2           =СТОЛБЕЦ(A:A)&"-("&ЕСЛИ(C2=R2;C2;СИМВОЛ(МИН(КОДСИМВ(C2);КОДСИМВ(R2)))&";"&СИМВОЛ(МАКС(КОДСИМВ(C2);КОДСИМВ(R2))))&")"
AH2           =СТОЛБЕЦ(B:B)&"-("&ЕСЛИ(D2=S2;D2;СИМВОЛ(МИН(КОДСИМВ(D2);КОДСИМВ(S2)))&";"&СИМВОЛ(МАКС(КОДСИМВ(D2);КОДСИМВ(S2))))&")"
AI2           =СТОЛБЕЦ(C:C)&"-("&ЕСЛИ(E2=T2;E2;СИМВОЛ(МИН(КОДСИМВ(E2);КОДСИМВ(T2)))&";"&СИМВОЛ(МАКС(КОДСИМВ(E2);КОДСИМВ(T2))))&")"
AJ2           =СТОЛБЕЦ(D:D)&"-("&ЕСЛИ(F2=U2;F2;СИМВОЛ(МИН(КОДСИМВ(F2);КОДСИМВ(U2)))&";"&СИМВОЛ(МАКС(КОДСИМВ(F2);КОДСИМВ(U2))))&")"
AK2           =СТОЛБЕЦ(E:E)&"-("&ЕСЛИ(G2=V2;G2;СИМВОЛ(МИН(КОДСИМВ(G2);КОДСИМВ(V2)))&";"&СИМВОЛ(МАКС(КОДСИМВ(G2);КОДСИМВ(V2))))&")"
AL2           =СТОЛБЕЦ(F:F)&"-("&ЕСЛИ(H2=W2;H2;СИМВОЛ(МИН(КОДСИМВ(H2);КОДСИМВ(W2)))&";"&СИМВОЛ(МАКС(КОДСИМВ(H2);КОДСИМВ(W2))))&")"
AM2           =СТОЛБЕЦ(G:G)&"-("&ЕСЛИ(I2=X2;I2;СИМВОЛ(МИН(КОДСИМВ(I2);КОДСИМВ(X2)))&";"&СИМВОЛ(МАКС(КОДСИМВ(I2);КОДСИМВ(X2))))&")"
AN2           =СТОЛБЕЦ(H:H)&"-("&ЕСЛИ(J2=Y2;J2;СИМВОЛ(МИН(КОДСИМВ(J2);КОДСИМВ(Y2)))&";"&СИМВОЛ(МАКС(КОДСИМВ(J2);КОДСИМВ(Y2))))&")"
AO2           =СТОЛБЕЦ(I:I)&"-("&ЕСЛИ(K2=Z2;K2;СИМВОЛ(МИН(КОДСИМВ(K2);КОДСИМВ(Z2)))&";"&СИМВОЛ(МАКС(КОДСИМВ(K2);КОДСИМВ(Z2))))&")"
AP2           =СТОЛБЕЦ(J:J)&"-("&ЕСЛИ(L2=AA2;L2;СИМВОЛ(МИН(КОДСИМВ(L2);КОДСИМВ(AA2)))&";"&СИМВОЛ(МАКС(КОДСИМВ(L2);КОДСИМВ(AA2))))&")"
AQ2           =СТОЛБЕЦ(K:K)&"-("&ЕСЛИ(M2=AB2;M2;СИМВОЛ(МИН(КОДСИМВ(M2);КОДСИМВ(AB2)))&";"&СИМВОЛ(МАКС(КОДСИМВ(M2);КОДСИМВ(AB2))))&")"
AR2           =СТОЛБЕЦ(L:L)&"-("&ЕСЛИ(N2=AC2;N2;СИМВОЛ(МИН(КОДСИМВ(N2);КОДСИМВ(AC2)))&";"&СИМВОЛ(МАКС(КОДСИМВ(N2);КОДСИМВ(AC2))))&")"
AS2           =СТОЛБЕЦ(M:M)&"-("&ЕСЛИ(O2=AD2;O2;СИМВОЛ(МИН(КОДСИМВ(O2);КОДСИМВ(AD2)))&";"&СИМВОЛ(МАКС(КОДСИМВ(O2);КОДСИМВ(AD2))))&")"
AT2           =СТОЛБЕЦ(N:N)&"-("&ЕСЛИ(P2=AE2;P2;СИМВОЛ(МИН(КОДСИМВ(P2);КОДСИМВ(AE2)))&";"&СИМВОЛ(МАКС(КОДСИМВ(P2);КОДСИМВ(AE2))))&")"
AU2           =СТОЛБЕЦ(O:O)&"-("&ЕСЛИ(Q2=AF2;Q2;СИМВОЛ(МИН(КОДСИМВ(Q2);КОДСИМВ(AF2)))&";"&СИМВОЛ(МАКС(КОДСИМВ(Q2);КОДСИМВ(AF2))))&")"
AV2           =AG2
AW2           =AV2&";"&AH2
AX2           =AW2&";"&AI2
AY2           =AX2&";"&AJ2
AZ2           =AY2&";"&AK2
BA2           =AZ2&";"&AL2
BB2           =BA2&";"&AM2
BC2           =BB2&";"&AN2
BD2           =BC2&";"&AO2
BE2           =BD2&";"&AP2
BF2           =BE2&";"&AQ2
BG2           =BF2&";"&AR2
BH2           =BG2&";"&AS2
BI2           =BH2&";"&AT2
BJ2           =BI2&";"&AU2
 
МатросНаЗебре,  8-0  :D
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
не понимаю общее между строками элементы 1 и 2 сцепка второй и первой строки, а элемент 3 сцепка первой и второй строки - что там за логика?
Код
D:
=ОБЪЕДИНИТЬ(";";1;ПОСЛЕД(15)&"-("&ПСТР(A2;ПОСЛЕД(15);1)&")")&"."
E:
=ОБЪЕДИНИТЬ(";";1;ПОСЛЕД(15)&"-("&ПСТР(B2;ПОСЛЕД(15);1)&")")&"."
Изменено: Тимофеев - 02.09.2021 11:51:59
 
МатросНаЗебре
Спасибо за помощь, но формула не законченная, на выходе получилось:
1-(1;X);2-(1;2);3-(1;X);4-(2);5-(1);6-(X);7-(X);8-(1);9-(X);10-(2);11-(X);12-(2;X);13-(X);14-(2;X);15-(1)

как теперь добавить вначале 16 ?
вот конечный вид который нужен на примере первой строки.
16.00;1-(1,X);2-(1,2);3-(1,X);4-(2);5-(1);6-(X);7-(X);8-(1);9-(X);10-(2);11-(X);12-(X,2);13-(X);14-(X,2);15-(1).
Изменено: DJMC - 02.09.2021 13:47:58
 
Цитата
DJMC написал:
как теперь добавить вначале 16 ?
Код
BK2    ="16.00;"&BJ2&"."
 
Вариант через пользовательскую функцию.
Код
Function Преобразовать15(строка1 As String, строка2 As String) As String
    Dim res As String
    If Len(строка1) <> 15 Then
        res = "#ОШИБКА строка 1 <> 15"
    ElseIf Len(строка2) <> 15 Then
        res = "#ОШИБКА строка 2 <> 15"
    Else
        Dim arr As Variant
        ReDim arr(1 To 15)
        Dim x As Long
        Dim s1 As String
        Dim s2 As String
        For x = 1 To UBound(arr)
            s1 = Mid(строка1, x, 1)
            s2 = Mid(строка2, x, 1)
            If s1 = s2 Then
                arr(x) = s1
            Else
                arr(x) = s1 & ";" & s2
                If IsNumeric(s1) Then
                    If IsNumeric(s2) Then
                        If s1 > s2 Then
                            arr(x) = s2 & ";" & s1
                        End If
                    End If
                Else
                    arr(x) = s2 & ";" & s1
                End If
            End If
            arr(x) = x & "-(" & arr(x) & ")"
        Next
        arr(1) = "16.00;" & arr(1)
        arr(UBound(arr)) = arr(UBound(arr)) & "."
        
        res = Join(arr, ";")
    End If
    Преобразовать15 = res
End Function
 
Ещё вариант:
     
Код
=СЦЕПИТЬ("16.00;";BJ2;".")
Изменено: Неопытный_Экселист - 02.09.2021 15:03:03
 
Неопытный_Экселист, отличный вариант - лучший
 
Тимофеев,
Мой вариант относится к вопросу:
Цитата
DJMC написал:
как теперь добавить вначале 16 ?
Изменено: Неопытный_Экселист - 02.09.2021 15:06:27
 
мне кажется все упускают из вида важный момент:
Цитата
DJMC написал:
как видим тут получилось в 5 события 5 разных исходов
вот число 16 явно от этого зависит. Только я лично пока не понял как понять, что исходов 5 или больше или меньше?
DJMC, не проясните этот момент?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
цифр 15 10 из них повторы 5 разные и далее математика 0,5*2^5=16
Код
=0.5*СТЕПЕНЬ(2;СУММ(--(ПСТР(A2;ПОСЛЕД(15);1)<>ПСТР(B2;ПОСЛЕД(15);1))))
или без последа
=0.5*СТЕПЕНЬ(2;СУММ(--(ПСТР(A2;{1:2:3:4:5:6:7:8:9:10:11:12:13:14:15};1)<>ПСТР(B2;{1:2:3:4:5:6:7:8:9:10:11:12:13:14:15};1))))
Изменено: Тимофеев - 02.09.2021 15:24:26
 
Цитата
Тимофеев написал:
0,5*5*2=16
Вообще-то математически 0,5*5*2=5! Или я чего-то не понимаю? Пока писал вопрос, Вы поправили свой пост. Мой пост можно удалить.
Изменено: Неопытный_Экселист - 02.09.2021 15:22:45
 
Цитата
Тимофеев написал:
10 из них повторы 5 разные
Тогда такой код должен отработать как положено:
Код
Function CompareStr(s1$, s2$)
    Dim s, sym1$, sym2$, ares, ldiff&
    Dim d#
    
    If Len(s1) = 0 Or Len(s2) = 0 Then
        Exit Function
    End If
    If Len(s1) <> Len(s2) Then
        CompareStr = CVErr(xlErrValue)
        Exit Function
    End If
    
    ReDim ares(1 To Len(s1))
    For ll = 1 To Len(s1)
        sym1 = Mid$(s1, ll, 1)
        sym2 = Mid$(s2, ll, 1)
        If sym1 <> sym2 Then
            ss = sym1 & "," & sym2
            ldiff = ldiff + 1
        Else
            ss = sym1
        End If
        ares(ll) = ll & "-(" & ss & ")"
        
    Next
    d = 0.5
    For ll = 1 To ldiff
        d = d * 2
    Next
    
    CompareStr = d & ".00;" & Join(ares, ";") & "."
End Function
Изменено: Дмитрий(The_Prist) Щербаков - 02.09.2021 15:26:32 (точку забыл)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
а у меня вопрос остался:
1-(1,X);2-(1,2);3-(1,X);4-(2);5-(1);6-(X);7-(X);8-(1);9-(X);10-(2);11-(X);12-(X,2);13-(X);14-(X,2);15-(1).
почему 3-ий элемент не X,1 - сцепку не понимаю
 
Цитата
Тимофеев написал:
почему 3-ий элемент не X,1
это да. Я свалил на опечатку, т.к. автор из разных столбцов просто копировал эти скобки
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
тогда так без последа:
Код
=ФИКСИРОВАННЫЙ(1/2*СТЕПЕНЬ(2;СУММ(--(ПСТР(A2;{1:2:3:4:5:6:7:8:9:10:11:12:13:14:15};1)<>ПСТР(B2;{1:2:3:4:5:6:7:8:9:10:11:12:13:14:15};1))));2)&";"&ОБЪЕДИНИТЬ(";";1;{1:2:3:4:5:6:7:8:9:10:11:12:13:14:15}&"-("&ЕСЛИ(--(ПСТР(A2;{1:2:3:4:5:6:7:8:9:10:11:12:13:14:15};1)<>ПСТР(B2;{1:2:3:4:5:6:7:8:9:10:11:12:13:14:15};1))=1;ПСТР(B2;{1:2:3:4:5:6:7:8:9:10:11:12:13:14:15};1)&","&ПСТР(A2;{1:2:3:4:5:6:7:8:9:10:11:12:13:14:15};1);ПСТР(B2;{1:2:3:4:5:6:7:8:9:10:11:12:13:14:15};1))&")")&"."
 
16 это был пример в данном случае, так то число будет все время разное, то есть мы сверяем количество совпадений между строчками ,в этом примере  это
1-(1,X);2-(1,2);3-(1,X);4-(2);5-(1);6-(X);7-(X);8-(1);9-(X);10-(2);11-(X);12-(X,2);13-(X);14-(X,2);15-(1).
это 5 двойных  значений в кавычках, получается  тут должна быть формула:
1. 0,5*2=1
2. 1*2=2
3. 2*2=4
4. 4*2=8
5. 8*2= 16

но в каждой строчке количество двойных значений будет разное, как то нужно создать еще правило  для остальных строчек...
 
Цитата
Тимофеев написал:
пока писал прошлое сообщение, увидел идеальный ответ, остальные советы, также очень хороши, но этот показался самым простым и лучшим для меня, так как его легко внедрить в мой файл, в котором и так уже кучу кодов, огромное Всем спасибо за помощь.
Изменено: DJMC - 02.09.2021 16:19:49
 
DJMC, для чего в данном случае вставлять в цитату формулу?! Лепят цитаты, не думая...
Цитата
Пока писал прошлое сообщение, Тимофеев предложил идеальный ответ
Так, например, нельзя было написать?
 
А если двойных значений будет 6 то 16*2=32 или всё, что больше 5 это 16
 
Цитата
Msi2102 написал:
А если двойных значений будет 6 то 16*2=32 или всё, что больше 5 это 16
тут принцип такой, нет двойных значений значит 0,5
есть одно двойное значение значит 0,5*2
есть два двойных значения значит 0,5*2*2
и так далее...
 
В процессе тестирования обнаружил один нюанс, который не учел сразу, по формуле предложенной  Тимофеев все работает идеально, но так получается что для начальных данных порядок не важен, а при тесте важен, вот пример:

512 1-(2); 2-(X2); 3-(X2); 4-(X); 5-(1X); 6-(X2); 7-(12); 8-(1X); 9-(1X); 10-(2); 11-(12); 12-(1); 13-(1X); 14-(12); 15-(1)
512 1-(X2); 2-(X2); 3-(X); 4-(X); 5-(1X); 6-(X2); 7-(12); 8-(1X); 9-(1); 10-(2); 11-(12); 12-(1); 13-(1X); 14-(12); 15-(1X)
256 1-(12); 2-(X2); 3-(X2); 4-(1X); 5-(1X); 6-(X2); 7-(12); 8-(X); 9-(1); 10-(X2); 11-(2); 12-(1); 13-(1X); 14-(2); 15-(1)
256 1-(2); 2-(X2); 3-(X); 4-(X); 5-(1X); 6-(X2); 7-(12); 8-(X2); 9-(1); 10-(2); 11-(X2); 12-(1X); 13-(1X); 14-(2); 15-(12)
1024 1-(X2); 2-(X2); 3-(X2); 4-(1X); 5-(X2); 6-(X); 7-(2); 8-(1X); 9-(1); 10-(12); 11-(12); 12-(1X); 13-(X); 14-(12); 15-(1X)
256 1-(2); 2-(X2); 3-(X); 4-(X); 5-(1X); 6-(X2); 7-(12); 8-(X2); 9-(1); 10-(2); 11-(X2); 12-(1X); 13-(1X); 14-(2); 15-(12)
512 1-(12); 2-(12); 3-(X2); 4-(X); 5-(X); 6-(1X); 7-(12); 8-(1X); 9-(1X); 10-(2); 11-(12); 12-(1); 13-(X2); 14-(12); 15-(1)
256 1-(2); 2-(12); 3-(X); 4-(X); 5-(X2); 6-(X2); 7-(2); 8-(X2); 9-(1); 10-(X2); 11-(X2); 12-(1X); 13-(X); 14-(12); 15-(12)
256 1-(12); 2-(X2); 3-(X2); 4-(1X); 5-(1X); 6-(X2); 7-(12); 8-(X); 9-(1); 10-(X2); 11-(2); 12-(1); 13-(1X); 14-(2); 15-(1)
512 1-(12); 2-(12); 3-(X2); 4-(X); 5-(X); 6-(1X); 7-(12); 8-(1X); 9-(1X); 10-(2); 11-(12); 12-(1); 13-(X2); 14-(12); 15-(1)
128 1-(12); 2-(2); 3-(X2); 4-(1X); 5-(X); 6-(X); 7-(2); 8-(X2); 9-(1); 10-(X2); 11-(X2); 12-(1X); 13-(X); 14-(2); 15-(12)
256 1-(2); 2-(12); 3-(X2); 4-(X); 5-(X2); 6-(X2); 7-(12); 8-(X); 9-(12); 10-(X2); 11-(2); 12-(1); 13-(X2); 14-(12); 15-(1)
256 1-(12); 2-(2); 3-(X2); 4-(1X); 5-(X2); 6-(1X); 7-(12); 8-(X); 9-(1); 10-(X2); 11-(X2); 12-(1); 13-(X); 14-(2); 15-(1X)
256 1-(2); 2-(2); 3-(X2); 4-(1X); 5-(1X); 6-(1X); 7-(12); 8-(X); 9-(12); 10-(2); 11-(X2); 12-(1); 13-(X2); 14-(2); 15-(1X)
256 1-(12); 2-(2); 3-(X2); 4-(1X); 5-(X2); 6-(1X); 7-(12); 8-(X); 9-(1); 10-(X2); 11-(X2); 12-(1); 13-(X); 14-(2); 15-(1X)

получились вот такие рекомендации, но если провести детальный анализ, то получается во всех них есть единственное верное значение(строчка которая встречается везде. и остальное является дубликатом) :
1-(2);2-(2);3-(X);4-(X);5-(X);6-(X);7-(2);8-(X);9-(1);10-(2);11-(2);12-(1);13-(X);14-(2);15-(1).

как то можно еще научить в эксель сверять такие массивы и исключать дубликаты?
Страницы: 1
Наверх