Wyodrębnij unikalne podciąg z zakresu programu Excel

1

Mam wartości komórek z nazwami, które są dość blisko siebie. Chciałbym wyodrębnić wspólny podciąg.

Oto przykład.

1100_250_Jump_12HR_100MD_S_run1 
1100_250_Jump_12HR_100MD_S_run2
1100_250_Jump_12HR_100MD_S_run3 
1100_250_Jump_12HR_100MD_S_run4 
1101_250_Jump_12HR_100MD_U_run5 
1101_250_Jump_12HR_100MD_U_run6 
1102_250_Jump_12HR_100MD_U_run7 
1102_250_Jump_12HR_100MD_U_run8 
1102_250_Jump_12HR_100MD_U_run9 
1102_250_Jump_12HR_100MD_U_run10

Dane wyjściowe powinny być _250_Jump_12HR_100MD_

Jak mogę wyodrębnić wspólny ciąg podrzędny w programie Excel?

Sprawdziłem podobne pytania, ale nie mogłem znaleźć odpowiedzi.

Cricrazy
źródło
Dla pewności zakładam, że nie wiesz z góry, co to jest podciąg? Jak mały lub duży jest akceptowalny substrat? w twoich przykładowych danych byłoby 100MDwystarczająco długo? Czy pasujące podciągi zawsze zaczynają się w tej samej pozycji (6. znak w danych przykładowych)? Czy możesz także podzielić się tym, co do tej pory próbowałeś?
cybernetic.nomad
Może się to okazać interesujące w celu znalezienia rozwiązania
cybernetic.nomad
Nie. Nie znam podciągów z wyprzedzeniem. Ponadto jego długość nie jest stała. To zdecydowanie nie za długo. Podciąg nie zawsze zaczyna się w tej samej pozycji. Próbowałem grać z UNIQUE, MID, ale bezskutecznie.
Cricrazy,

Odpowiedzi:

0

Na podstawie UDF w linku, który zamieściłem w komentarzach:

Option Explicit


Public Function CSTMatch3(Target1 As Range, Target2 As Range) As String

CSTMatch3 = ""

Dim myString As String, String1 As String, String2 As String, i As Long, j As Long, noChar As Long

noChar = 0

'The goal here is to assign the larger String to the variable String1
If Target1 = Target2 Then
    CSTMatch3 = Target1
    Exit Function
End If

If Len(Target1) >= Len(Target2) Then
    String1 = Target1
    String2 = Target2
Else
    String1 = Target2
    String2 = Target1
End If

For j = 1 To Len(String2)
    For i = 1 To Len(String1) - j
        If InStr(String2, Mid(String1, i, j)) Then
            myString = Mid(String1, i, j)
            noChar = noChar + 1
            Exit For
        End If
    Next i
Next j

CSTMatch3 = myString

End Function

Następnie, zakładając, że ciągi znajdują się w kolumnie A, użyj UDF w B1następujący sposób:

=CSTMatch3(A1,A2)

Następnie w B2:

=CSTMatch3(A2,B1)

I zaludnij.

Komórki w kolumnie Bw danym wierszu pokazują teraz wspólny ciąg dla wszystkich komórek w Atym wierszu.

wprowadź opis zdjęcia tutaj

cybernetic.nomad
źródło