2017-03-13 21 views
0

我有TXT像这样的数组:VBA如何冒泡排序有两个标准

  • “独特的文字| 05 || 001 |”
  • “Unique text | 04 || 001 |”
  • “Unique text | 05 || 002 |”
  • “Unique text | 04 || 002 |”
  • “唯一文字| 05 || 003 |”
  • “Unique text | 08 || 003 |”
  • “Unique text | 04 || 003 |”
  • “Unique text | 05 || 004 |”

我设法用bubble排序这个数组,选择第二组数字“001,001,002,002,003 ....”但我也想用第一组数字排序。结果是这样的:

  • “Unique text | 04 || 001 |”
  • “Unique text | 05 || 001 |”
  • “Unique text | 04 || 002 |”
  • “Unique text | 05 || 002 |”
  • “Unique text | 04 || 003 |”
  • “唯一文字| 05 || 003 |”
  • “Unique text | 08 || 003 |”
  • “Unique text | 05 || 004 |”

任何想法,我可以如何构造我的泡沫排序? 我是否需要在我的regulare气泡排序中使用新的For循环?

当前代码(这将只根据第二组数字排序)。最后一组数字

For i = 1 To UbndCellDataExcel - 1 
     For j = i + 1 To UbndCellDataExcel 
     If Mid(CellDataExcel(i), 104, 3) > Mid(CellDataExcel(j), 104, 3) Then 
      strTemp = CellDataExcel(i) 
      CellDataExcel(i) = CellDataExcel(j) 
      CellDataExcel(j) = strTemp 
     End If 
     Next j 
    Next i 
+0

一种方法是在比较中使用2个字段的连接 – h2so4

+1

您能告诉我们您的代码吗?你所问的听起来很琐碎。您只需在第一组数字上添加比较条件即可判断一行是否小于另一行。 (RowA.Col2> RowB.Col2 AND RowA.Col1> RowB.Col1) –

回答

0

到解决方案的关键是比较功能的104 =位置:

有两种主要的方式来做到这一点: 第一,最简单的是 - 创建新的数量和种类将更加

convert "Unique text |05||001|" to "00105" 
convert "Unique text |04||002|" to "00204" 
00204>00105 so "Unique text |04||002|" > "Unique text |05||001|" 

更正确,更有点复杂要做的就是简单地做2比较:

Function compare (ByVal i As String,ByVal j As String) 
    i1=getParam(1,i) 
    i2=getParam(2,i) 
    j1=getParam(1,j) 
    j1=getParam(2,j) 
    if (i1>j1) return 1 
    if (i2<j2) return -1 
    if (j1>j1) return 1 
    if (j2<j2) return -1 
    return 0 

其中getParam是以“Unique text | 04 || 002 |”为函数并返回“04”或“002”。

0

Thank youמתןל!这是我现在已经实现了基于什么对你的想法转换:

convert "Unique text |05||001|" to "00105" 
convert "Unique text |04||002|" to "00204" 

我的代码看起来现在这个样子(第一组数的100 =位置,104是第二组数字):

For i = 1 To UbndCellDataExcel - 1 
    For j = i + 1 To UbndCellDataExcel 
     If Mid(CellDataExcel(i), 104, 3) & Mid(CellDataExcel(i), 100, 2) > Mid(CellDataExcel(j), 104, 3) & Mid(CellDataExcel(j), 100, 2) Then 'Sorter basert på OUnr 
      strTemp = CellDataExcel(i) 
      CellDataExcel(i) = CellDataExcel(j) 
      CellDataExcel(j) = strTemp 
     End If 
    Next j 
Next i 


'Mid(CellDataExcel(i), 104, 3) & Mid(CellDataExcel(i), 100, 2) returns Format: "00105" 
+0

您应该将有用的答案标记为已接受 – Wolfie

+1

没有注意到复选标记。现在检查=) –