Найти заданные c повторяющиеся буквы или цифры в строках - PullRequest
1 голос
/ 24 марта 2020

Я пытаюсь найти указанные c ячейки в строке, которые имеют повторяющиеся буквы, мне нужно найти любую ячейку, которая имеет повторяющиеся буквы или цифры, кроме буквы 's'

Пример:

**Ks Kd 7s**   *<- this one has two letters "K" so I want it to be selected*  
**As 9d 9c**   *<- this one has two numbers "9" so I want it to be selected*  
**As 9S 8c**   *<- this one only has two letters "s", so it should not be selected*

Я хочу установить цвет фона для выбранных строк. Я подумал, что для этого нужно использовать фильтры, но есть много случаев, и Excel позволяет мне использовать только 2 фильтра одновременно.

Спасибо

РЕДАКТИРОВАТЬ: после нескольких комментариев я увидел этот формат всегда один и тот же, и у меня всегда есть буквы в одной и той же позиции, поэтому мы хотим выяснить, имеют ли буквы в позиции X дубликаты, если это формат каждой ячейки: Xy Xy Xy

Ответы [ 4 ]

1 голос
/ 24 марта 2020

Это подсветит любые ячейки с дубликатами букв. Просто выберите и клетки, которые вы будете sh проверить и запустить:

Sub ColorDups()
    Dim r As Range
    For Each r In Selection
        If dupcheck(r.Value) Then r.Interior.ColorIndex = 27
    Next r
End Sub


Public Function dupcheck(s As String) As Boolean
    Dim L As Long, i As Long, CH As String
    dupcheck = False
    L = Len(s)
    If L < 2 Then Exit Function
    For i = 1 To L - 1
        CH = Mid(s, i, 1)
        If CH Like "[A-Z,a-z]" And CH <> "s" Then
            For j = i + 1 To L
                If CH = Mid(s, j, 1) Then
                    dupcheck = True
                    Exit Function
                End If
            Next j
        End If
    Next i
End Function

До:

enter image description here

и после:

enter image description here

РЕДАКТИРОВАТЬ # 1:

Для проверки чисел, а также букв заменить:

If CH Like "[A-Z,a-z]" And CH <> "s" Then

с:

If CH Like "[A-Z,a-z,0-9]" And CH <> "s" Then
1 голос
/ 24 марта 2020

Поскольку ваши данные находятся в тройках, и мы заботимся только о первом символе:

=IF(OR(LEN(A1)-LEN(SUBSTITUTE(A1,MID(A1,{1,4,7},1),""))>1),"Select","Not Select")

В зависимости от версии, это может потребоваться подтвердить с помощью Ctrl-Shift-Enter вместо Enter при выходе из режима редактирования .

![enter image description here


ИЛИ

=IF(ISERROR(MODE.SNGL(MATCH(MID(A1,{1,4,7},1),MID(A1,{1,4,7},1),0))),"Not Select","Select")

В зависимости от версии это может потребоваться подтвердить с помощью Ctrl-Shift- Ввод вместо ввода при выходе из режима редактирования.

enter image description here

1 голос
/ 24 марта 2020

Если длина и формат всегда одинаковы, попробуйте

=MAX(FREQUENCY(MATCH(MID(A2,{1,4,7},1),MID(A2,{1,4,7},1),0),MATCH(MID(A2,{1,4,7},1),MID(A2,{1,4,7},1),0)))

, введенный как формула массива, используя Ctrl Shift Enter

enter image description here

или это слишком сложно?

1 голос
/ 24 марта 2020

Переписывание формулы комментария в качестве ответа с предположением, что вы имеете дело с данными в одной ячейке (1 строка).


Если вы хотите подсчитать количество вхождений строки в Строка, вы должны сделать что-то вроде:

=(Len(A1)-Len(Substitute(A1,"stringToReplace","")))/countOfCharactersInSubstituteString

Пример:

A1 = "cat cat cat"

Мы хотим знать, сколько "c" в этой строке, поэтому мы используем:

stringToReplace = "c"
countOfCharactersInSubstituteString = 1
(len(A1)-len(substitute(a1,"c","")))/1

Ответ - 3, поэтому 3 вхождения.


Если мы хотим узнать количество вхождений "cat", мы будем использовать:

stringToReplace = "cat"
countOfCharactersInSubstituteString = 3
(len(A1)-len(substitute(a1,"cat","")))/3

Если ответом является 3 вхождения.


Обратите внимание на использование нормализующего коэффициента countOfCharactersInSubstituteString, чтобы вы не видели, что 9 символов были удалены, а 3 вхождения этой строки.


Редактировать

Просто понял, что я забыл len() вокруг замены ... исправлено.


Edit2

Для этого я использовал несколько вспомогательных предметов: enter image description here Формула из B11: =(LEN($A11)-LEN(SUBSTITUTE($A11,B$10,"")))/LEN(B$10)

Вы можете использовать If(#occurrences>1,"!",""), чтобы сделать это e еще проще, но это позволит вам довольно легко проверить элементы списка комбинаций карт.

Используя эту формулу в B11: =IF((LEN($A11)-LEN(SUBSTITUTE($A11,B$10,"")))/LEN(B$10)>1,"X","") enter image description here

...