源单元格示例如下:
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 有点吓人,但其实很简单,只要你按照步骤。