Excel按域名排序列,从结尾开始

时间:2017-11-30 11:06:32

标签: excel columnsorting

我已经看到很多关于如何按域排序电子邮件列表的答案。 我需要的是不同的。 我所拥有的是一个需要正确排序的域和子域列表。 您可能知道,域层次结构从结尾开始,意味着首先是.com,然后是域,然后是后缀,例如。 “万维网” 所以,我需要按相关性对它们进行分组。 例如,我有以下域名:

www.somedomain.com
www.someotherdomain.co.uk
www.yetonemoredomain.org
sub.somedomain.com
1.somedomain.com
2.yetonemoredomain.org
3.someotherdomain.co.uk.
www2.yetonemoredomain.org
mail.someotherdomain.co.uk

从A到Z的普通排序将从左到右开始,但是我需要它从右到左排序,点作为字段分隔符。 我知道一个简单的bash命令可以做到,但我需要在Excel中。 我正在考虑使用“文本到列”并按点分隔然后根据需要对列进行排序,但这也可能会导致为第4级域和更高级别创建列的问题,例如x.y.x.somedomain.com。 列将从左到右创建,这意味着.com可能会落入不同的列而不是最右列。 我确信必须有更好的方法来做到这一点。 在此先感谢您的帮助。 谢夫

1 个答案:

答案 0 :(得分:2)

这可能是最古老的算法问题之一的变体,称为Reverse the ordering of words in a string。预期答案如下 - 反转两次 - 每个单词然后整个句子。

在您的情况下,您需要完成此操作然后进行排序。

Public Function ReverseMe(textToReverse As String, _
        Optional delim As String = " ") As String

    Dim test    As String
    Dim arr     As Variant
    Dim arr2    As Variant
    Dim arrPart As Variant
    Dim cnt     As Long

    arr = Split(textToReverse, delim)
    ReDim arr2(UBound(arr))

    For Each arrPart In arr
        arr2(cnt) = StrReverse(arrPart)
        cnt = cnt + 1
    Next arrPart

    ReverseMe = StrReverse(Join(arr2, delim))

End Function

Public Sub TestMe()

    Debug.Print ReverseMe("veso.dosev.diri.rid", ".")
    Debug.Print ReverseMe("VBA is the best language")

End Sub

你会得到:

rid.diri.dosev.veso
language best the is VBA