1

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

Some:Thing:random:here

Я хочу преобразовать это к этому (полностью изменяя порядок каждой группы):

here:random:Thing:Some

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

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

= ЕСЛИ (С12 = "", "", ПОДСТАВИТЬ (ЛЕВЫЙ (ПОДСТАВИТЬ (С12, "", "" & ПОВТОР ("", LEN (С12))), LEN (С12)* 2)& MID (ПОДСТАВИТЬ (С12 , ".", "." & REPT (">", LEN (C12))), LEN (C12)* 2, LEN (C12))& "5", "", "")))

3 ответа3

3

Предполагая три двоеточия в качестве разделителей, попробуйте эту формулу

=IF(C12="","",TRIM(MID(SUBSTITUTE(C12,":",REPT(" ",100)),300,100))&":"&TRIM(MID(SUBSTITUTE(C12,":",REPT(" ",100)),200,100))&":"&TRIM(MID(SUBSTITUTE(C12,":",REPT(" ",100)),100,100))&":"&LEFT(C12,FIND(":",C12)-1))

Объяснение:

Чтобы получить часть после последнего двоеточия, я использовал эту формулу:

=TRIM(MID(SUBSTITUTE(C12,":",REPT(" ",100)),300,100))

Это использует SUBSTITUTE заменить каждое двоеточие 100 мест. Поскольку мы имеем дело с IP-адресами, каждая часть явно состоит из небольшого количества символов, поэтому использование MID для получения 100 символов, начиная с символа 300, будет включать только последнюю часть IP-адреса и некоторые пробелы - TRIM затем обрезает пробелы - я использовал тот же подход, чтобы получить две средние части, а затем функцию LEFT сочетании с FIND чтобы получить первую часть

1

Предполагая, что это IP-адрес 1.2.3.4

dim astring as string
dim splat() as variant

astring = "1.2.3.4"
splat =split(string,".")
string=splat(3)&"."& splat(2)&"."& splat(1)&"."&splat(0)
0

Таким образом, может быть способ решить эту проблему без использования VBA, но вот пользовательская формула, которую вы можете использовать для выполнения именно того, что вам нужно, а также для обработки различных разделителей:

Function ReverseList(InputString As String, Optional DelimiterString As String) As String

' Provide a default value of "," as the delimiter.
If Len(DelimiterString) = 0 Then
    LabelString = ","
End If

' The InputArray() will contain the values, separated at the delimiter string.
Dim InputArray() As String
InputArray() = Split(InputString, DelimiterString)

' The OutputArray() will contain the values in reverse order.
Dim i As Integer
Dim j As Integer
j = UBound(InputArray)
Dim OutputArray() As String
ReDim OutputArray(0 To j) As String

For i = 0 To j
    OutputArray(i) = InputArray(j - i)
Next i

' Now we put the reversed list back together, adding the delimiter back in.
ReverseList = Join(OutputArray(), DelimiterString)

End Function

Вы можете вызвать это в ячейке с =ReverseList(A1, ":") для обработки вашего примера.

Хотя создать ваш первый UDF страшно, довольно просто, если вы будете следовать инструкциям.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .