我已经看到很多关于如何按域排序电子邮件列表的答案。 我需要的是不同的。 我所拥有的是一个需要正确排序的域和子域列表。 您可能知道,域层次结构从结尾开始,意味着首先是.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可能会落入不同的列而不是最右列。 我确信必须有更好的方法来做到这一点。 在此先感谢您的帮助。 谢夫
答案 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