Excel 公式拆分单元格并反转顺序

Excel 公式拆分单元格并反转顺序

源单元格示例如下:

Some:Thing:random:here

我想将其转换为这样(反转每个组的顺序):

here:random:Thing:Some

如果可能的话,我更喜欢不使用宏的公式。

这是我一直试图操纵的用来改变 IP 最后部分的公式。

=IF(C12="","",SUBSTITUTE(LEFT(SUBSTITUTE(C12,".","."&REPT("",LEN(C12))),LEN(C12)*2)&MID(SUBSTITUTE(C12,".","."&REPT("> ",LEN(C12))),LEN(C12)*2,LEN(C12))&"5"," ",""))

答案1

假设三个冒号作为分隔符,请尝试此公式

=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从 300 个字符开始的 100 个字符将仅包含 IP 地址的最后一部分和一些空格 -TRIM然后修剪空格 - 我使用相同的方法获取中间两部分,然后LEFT结合函数FIND获取第一部分

答案2

假设 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)

答案3

因此,可能有一种方法可以在不使用 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 有点吓人,但其实很简单,只要你按照步骤

相关内容