2017-03-13 54 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

沒有注意到複選標記。現在檢查=) –