Индекс и совпадение между ячейками, которые имеют разрывы строк - PullRequest
0 голосов
/ 18 апреля 2020

enter image description here

Ячейка A2 - это данные, которые имеют различные разрывы строк. Я разделил данные до и после "-", как показано в B2 и C3. Затем я отсортировал данные C2 от самого низкого до самого большого в D2. Результатом желания является ячейка E2. Я хотел бы иметь функцию определения пользователя для получения индекса B2 путем сопоставления D2 из C2. Обратите внимание, что в A2 есть четыре значения в 4-х строкых разрывах в одной ячейке, а не в каждой ячейке есть значение, см. В приложении.

1 Ответ

2 голосов
/ 18 апреля 2020

UDF ниже будет делать то, что вы хотите. Назовите это с листа как =InexMatch(A2). Убедитесь, что для ячейки, в которую вы ее поместили, свойство WrapText имеет значение True.

Function InexMatch(Cell As Range) As String
    ' 003

    Dim Arr As Variant
    Dim Sp() As String
    Dim Tmp As String
    Dim Done As Boolean
    Dim i As Integer

    Arr = Split(Cell.Value, Chr(10))
    For i = 0 To UBound(Arr)
        Sp = Split(Arr(i), "-")
        Arr(i) = Sp(1) & "-" & Sp(0)
    Next i

    Do
        Done = True
        For i = 0 To UBound(Arr) - 1
            If Val(Arr(i + 1)) < Val(Arr(i)) Then
                Tmp = Arr(i)
                Arr(i) = Arr(i + 1)
                Arr(i + 1) = Tmp
                Done = False
            End If
        Next i
    Loop While Not Done

    On Error Resume Next
    ReDim Sp(UBound(Arr))
    For i = 0 To UBound(Arr)
        Sp(i) = Split(Arr(i), "-")(1)
    Next i
    InexMatch = Join(Sp, Chr(10))
End Function

Функция вернет пустую строку, если указанная ячейка пуста. Это может иметь дело с клетками, которые имеют менее 4 строк. Он потерпит неудачу, если CR не ANSII Chr (10) или da sh не ANSII Chr (45) - знак минус. В нем не предусмотрены неполные строки в ячейках, то есть строки, которые не имеют символов с обеих сторон от da sh.

Чтобы восстановить исходный формат в отсортированной строке, удалите все строки под концом Do L oop в приведенном выше коде, начиная с On Error Resume Next, и замените их следующим:

For i = 0 To UBound(Arr)
    Sp = Split(Arr(i), "-")
    Arr(i) = Sp(1) & "-" & Sp(0)
Next i
InexMatchV2 = Join(Arr, Chr(10))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...