генерировать символы динамически, за исключением других символов и удаления дубликатов - PullRequest
0 голосов
/ 04 мая 2019

В столбце AI есть набор данных ниже.

A1 :TR029A/TR029B/TR045A/TR045B
A2 :TR028A/TR028B/TR052A
A3 :TR035A/TR035B
A4 : TR045B/TR065A

Есть ли способ генерировать данные столбца B, как показано ниже.

B1: TR029/TR045
B2: TR028/TR052
B3: TR035
B4: TR045/TR065

Ответы [ 2 ]

1 голос
/ 04 мая 2019

Просто выложите эту картинку в качестве доказательства того, что код symbiont работает:

enter image description here

Установите инструкции безошибочно и ясно, хорошая работа.

Добавил ту же функцию в столбец F:

enter image description here

1 голос
/ 04 мая 2019

Я думаю, вам придется создать свою функцию Excel с VBA, если вы хотите этот уровень управления

  • нажмите ALT + F11, чтобы перейти к представлению VBA
  • щелкните правой кнопкой мыши VBAProject>Вставить> Модуль
  • откроется окно, в котором вы можете ввести код VBA

скопировать этот код VBA в открывшееся окно, чтобы создать новую функцию GenChars, которую вы хотите:

Option Explicit

Function GenChars(value As String)
    ' an array of individual elements that were delemited by "/"
    Dim xs() As String
    xs = Split(value, "/")

    ' remove the last character from each element or replace it with @ if it would be a duplicate
    Dim i As Long
    For i = LBound(xs) To UBound(xs)
        Dim x As String
        x = xs(i)
        x = Left$(x, Len(x) - 1) ' remove last char
        If ArrayContains(xs, x) Then x = "@" ' replace duplicate elements with @
        xs(i) = x
    Next i

    Dim value2 As String
    ' new value with duplicates
    value2 = Join(xs, "/") ' put the elements back into 1 value
    ' remove @ that was used instead of duplicates
    value2 = Replace(value2, "/@", "") ' remove occurrences of /@ (1st element is never duplicate)

    GenChars = value2
End Function

' whether array xs contains element y
Function ArrayContains(xs As Variant, y As Variant) As Boolean
    ArrayContains = False

    Dim x As Variant
    For Each x In xs
        If x = y Then ArrayContains = True
    Next x
End Function
  • снова нажмите ALT + F11, чтобы вернуться к обычному виду
  • , чтобы использовать его, например, перейдите в ячейку B1 и введите: = GenChars (A1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...