对单元格中的内容顺序进行排序

时间:2018-02-06 15:42:35

标签: excel vba sorting

正如标题所示,我想知道是否可以根据文本在单元格中对内容的顺序进行排序。例如,一些包含文本" 4C + 5C + BBU / RRH + 4T4R"具有与之关联的特定复杂性编号。问题是vlookup特定的复杂性数字我需要在单元格中按照其确切顺序匹配文本。对于其他几次迭代,我有这种混乱的顺序(例如" 4C +第二RRH + 3C + BBU / RRH"应该读取" 2C + 3C +第二RRH + BBU / RRH")。如果在单元格中存在正确的优先顺序,是否可以更正单元格中内容的顺序?以下是相关的首选项列表:

  1. 2C
  2. 3C
  3. 4C
  4. 5C
  5. 6C
  6. 7C
  7. 第二RRH
  8. RRH ADD
  9. BBU / RRH
  10. XMU / RRH
  11. 4T4R
  12. 如果单元格中存在,则单元格应该能够形成第一,第二,第三等应该进入的排序系统(例如,应该能够采取" 7C + 3C + 4T4R + RRH ADD"进入" 3C + 7C + RRH ADD + 4T4R"正如" 4C + 3C + 2C"应阅读" 2C + 3C + 4C") 。如果可能的话,我希望能够使用VBA将此公式应用于AU列。在此先感谢,我还没有看到任何类似这个问题的东西,所以任何见解都会有很长的路要走。

1 个答案:

答案 0 :(得分:3)

您可以按顺序检查原始字符串中是否存在值,并构造一个新字符串,如下所示:

Function customSort(ByVal original As String) As String

    Dim SortBy As Variant
    Dim n As Double
    Dim strReturn As String

    SortBy = Array("2C", _
                   "3C", _
                   "4C", _
                   "5C", _
                   "6C", _
                   "7C", _
                   "2nd RRH", _
                   "RRH ADD", _
                   "BBU/RRH", _
                   "XMU/RRH", _
                   "4T4R")


    'for each in SortBy array
    For n = 0 To UBound(SortBy)
        'loop from 1 to count of occurrence in string
        '(Len(original) - Len(Replace$(original, SortBy(n), ""))) / Len(SortBy(n)) counts occurrences in string, case sensitive
        For i = 1 To (Len(original) - Len(Replace$(original, SortBy(n), ""))) / Len(SortBy(n))
            strReturn = strReturn & SortBy(n) & " + "
        Next
    Next

    customSort = Left(strReturn, Len(strReturn) - 3)

End Function

您可以从Sub调用此功能,也可以将其用作cell formula

e.g.: =customSort(A2)