2017-05-28 17 views
2

私はそれが動作するはずのロジックに基づいて、次のコードを持っています。Excel VBAで配列を逆転

私は(4,3,2,1)それになりたいが、ループの終わりに、私はすべてのアイデアトン=(4,3,3,4)

Sub try() 

    Dim t As Variant 

    t = Array(1, 2, 3, 4) 
    a = UBound(t) 

    For k = 0 To a 
    t(k) = t(a - k) 
    Next k 

End Sub 

を取得しますか?

答えて

2

スイッチを上書きする前に、一時的な配列を使用して上書きする必要があります。

これはあなたの試みですか?

Sub try() 
    Dim t As Variant, tmpAr As Variant 
    Dim a As Long, b As Long, i As Long 

    t = Array(1, 2, 3, 4) 

    a = UBound(t): b = LBound(t) 

    For i = 0 To ((a - b) \ 2) 
     tmpAr = t(i) 
     t(i) = t(a) 
     t(a) = tmpAr 
     a = a - 1 
    Next i 

    For i = 0 To UBound(t) 
     Debug.Print t(i) 
    Next i 
End Sub 

![enter image description here

+1

[email protected]:D修正済み!ありがとう。私は年を取っていると推測する –

2

一時配列なしにこれを行う可能性である:

    Join
  • 区切り例えば持つ配列コンマ
  • StrReverse結果の文字列
  • Split元区切り

コードで逆に文字列:

Option Explicit 

Sub try() 

    Dim t As Variant 
    Dim i As Long 

    t = Array(1, 2, 3, 4) 
    t = Split(StrReverse(Join(t, ",")), ",") 

    For i = 0 To UBound(t) 
     Debug.Print t(i) 
    Next i 

End Sub 

出力:

4 
3 
2 
1 
+0

滑らかで美しい。 –

1

あなたがトンを行う(K )= t(a - k)t(ak)をt(k)に代入しますが、保存された値t(k)での損失は失われる。あなたは、一時的に別の変数(以下の例では変数x)でそれを格納する必要がある、そしてあなたは、T(K)とtの間の値入れ替えることができます - このような(k)を:

Sub try() 

    Dim t As Variant 
    Dim x As Variant 
    Dim b As Integer 

    t = Array(1, 2, 3, 4) 
    a = UBound(t) 
    b = (a - 1)/2 

    For k = 0 To b 
    x = t(k) 
    t(k) = t(a - k) 
    t(a - k) = x 
    Next k 

End Sub 

あなただけのお知らせ配列サイズの半分(切り捨て)を何度も繰り返す必要があります。そうでない場合は、値を元に戻して同じ配列で終わることになります。

関連する問題