2016-06-29 20 views
1
j = LBound(arrayTime) 
Do Until j = UBound(arrayTime) 
    j = j + 1 
    b = b + 1 
    cnc = b + r 
    MsgBox cnc 
     If cnc > 7 Then 
      b = 0 
      r = 0 
      cnc = b + r 
     End If 
    numMins = Sheet5.Cells(cnc + 3, 2) - arrayTime(j) 
    If numMins < 0 Then 
     g = g + 1 
     ReArrangeArray arrayTime, j 
     'ReDim Preserve arrayTime(numrows - 1 + g) 
     'arrayTime(numrows - 1 + g) = arrayTime(j) 
     'MsgBox (arrayTime(numrows - 1 + g)) 
    Else 
     Sheet5.Cells(cnc + 3, 2) = numMins 
    End If 
Loop 

ifステートメントがtrueの場合、配列の最後に配列の値を置き、その値を現在の場所から削除できます。コードは最後に追加するだけで、配列のサイズを12から13に増やします。配列をサイズ12のままにして、配列の最後に値を配置してからそれを削除するにはどうすればよいですかその元の位置?私は前面の配列値に触れた​​くありません。その価値を持ち、それを最後まで動かすだけです。 たとえば array(1,2,3,4,5) 文の場合は、3番目のループの jです。 配列(J)= 3 エンド・アレイが 配列でなければなりません(1,2,4,5,3)vba配列要素の削除

+1

コード内にaj = j + 1カウンターがあるはずです – aggieman

+0

Google Bubblesort。配列を並べ替える必要があります。 – vacip

+1

[VBA配列の並べ替え機能?](http://stackoverflow.com/questions/152319/vba-array-sort-function)の重複の可能性があります。 – cxw

答えて

1

あなたはこの1のようなヘルパーサブを使用することができます。

Sub ReArrangeArray(inputArray as Variant, indexToSwap as long) 
    Dim I As Long 
    Dim tempVal As Variant 

    If indexToSwap >= LBound(inputArray) And indexToSwap < UBound(inputArray) Then 
     tempVal = inputArray(indexToSwap) 
     For I = indexToSwap To UBound(inputArray) - 1 
      inputArray(i) = inputArray(i + 1) 
     Next I 
     InputArray(UBound(inputArray)) = tempVal 
    End If 
End Sub 

がで呼び出されますあなたのメインSubは次のようになります:

ReArrangeArray arrayTime, j 
+0

私はサブを呼び出しているとき、jとbyref引数の不一致があります。これをどうやって解決するのですか? – aggieman

+0

私は自分のコードを更新しました。 – aggieman

+1

ReArrangeArray()が "Long"型を受け入れる間、おそらく 'j'は "整数"型として宣言されています: "j" 'をLong型にするか、または' ReArrangeArray '最後のパラメータ型をInteger型に変更します。 – user3598756

関連する問題