【问题标题】:Excel sort column by domain name, from end to beginExcel按域名排序列,从头到尾
【发布时间】:2018-05-14 07:02:28
【问题描述】:

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

【问题讨论】:

  • 您需要标准的 excel 列解决方案,还是 VBA 函数(在启用宏的工作簿中定义)是可行的解决方案?
  • 我不想处理 VBA 和宏,因为我正在尝试创建一个模板并且保存启用宏的模板不是我想要的。我更喜欢直截了当的标准 excel 解决方案,但我越深入,我就越觉得没有办法。我设法通过首先按分隔符拆分列,然后按给定顺序对所有列进行排序,例如第 4 列然后是第 3 列,依此类推。排序后,我将这些列连接成一个列,在它们之间添加一个点,以根据需要对“完整”域列表进行排序。

标签: excel columnsorting


【解决方案1】:

这可能是最古老的算法问题之一的变体,称为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

【讨论】:

    猜你喜欢
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多