Excel根据域名对列进行sorting,从头到尾

我已经看到了很多关于如何按域分类邮件列表的答案。 我需要的是不同的。 我所拥有的是一系列需要正确sorting的域和子域。 正如你可能知道的,一个域的层次结构开始于结尾,意思是先来到.com,然后是域,然后是后缀,例如“www”。所以,我需要按相关性对它们进行分组。 例如,我有以下域名:

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的简单sorting将从左到右开始,但我需要从右到左sorting,并将点作为字段分隔符。 我知道一个简单的bash命令可以做到这一点,但我需要在Excel中。 我正在考虑使用“文本到列”并按点分隔,然后根据需要对列进行sorting,但这也可能会导致创build第四级域或更高级别的列(如xyxsomedomain.com)时出现问题。 列将从左到右创build,这意味着.com可能会落入不同的列而不是最正确的列。 我相信这样做肯定有更好的办法。 在此先感谢您的帮助。 谢夫

这可能是最古老的algorithm问题之一的变体,称为反转string中单词的sorting 。 预期的答案是以下 – 反转两次 – 每个单词,然后是整个句子。

在你的情况下,你需要做到这一点,然后进行sorting。

 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