Почему мой код не может разбить первую строку на подстроки - PullRequest
0 голосов
/ 09 октября 2018

Я написал фрагмент кода, который сравнивает две строки.Строки имеют следующий вид:

  • Первая строка / массив: "ABC; CDE; GBH"
  • Вторая строка / массив: "ABC; CDE; GBH; LLL"

Я хочу, чтобы "LLL" находился в третьей ячейке после завершения сравнения.Это просто не даст мне результата, за исключением одного случая, когда в первой строке нет ни одной точки с запятой.Другими словами, первая строка - «ABC» (без точки с запятой), затем она возвращает «CDE; GBH; LLL» в третьем столбце.

Код:

Function CompareTwo(txt As String, txt2 As String) As String
    Dim a, b
    With CreateObject("Scripting.Dictionary")
        .CompareMode = vbTextCompare
        For Each a In Split(txt, ";")
            For Each b In Split(txt2, ";")
                If InStr(Trim(a),Trim(b)) <= 0 then .add Trim(b), nothing
            Next b
         Next a
         If .Count > 0 Then CompareTwo = Join(.keys, ";")
    End With
End Function

1 Ответ

0 голосов
/ 09 октября 2018

Если вы хотите найти части второй строки, которых нет в первой, попробуйте это.Вы можете использовать Match, а не зацикливание.Я думаю, что ваш код будет (может) ошибка, поскольку вы пытаетесь добавить один и тот же ключ более одного раза.

Function CompareTwo(txt As String, txt2 As String) As String

Dim b

With CreateObject("Scripting.Dictionary")
    .CompareMode = vbTextCompare
    For Each b In Split(txt2, ";")
        If IsError(Application.Match(Trim(b), Split(txt, ";"), 0)) Then .Add Trim(b), Nothing
    Next b
    If .Count > 0 Then CompareTwo = Join(.keys, ";")
End With

End Function

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...