2017-02-20 3 views
1

のは、私はVBAで配列内の特定のインデックスに新しい値を挿入し、すべてを1つのインデックスだけシフトする方法はありますか?

a(0) = 1 
a(1) = f 
a(2) = g 
a(3) = 4 
. 
.. 
.. 
a(k) = a 

をこの配列を持っていると私は(0)で、新しい値を挿入し、この

a(0) = newVal 
a(1) = 1 
a(2) = f 
a(3) = g 
a(4) = 4 
. 
.. 
.. 
a(k+1) = a 

のように一つの指標ですべての値をシフトダウンする場合がありましょうこれを行う最速の方法でない場合は、これを行うショートコード

私は単純なforループでこれを行うことができますが、もっと効率的な方法があるのでしょうか?

例これは、私は以下のコードは、既存の人口のアレイに(可変NewValを通して)値を追加する

Dim temp() 

Redim Preserve temp(0) 
temp(0) = "newVal" 

For i= lbound(a) + 1 to ubound(a) + 1 
    redim preserve temp(i) 
    temp(i) = a(i-1) 
Next i 
+0

で、すべての文字列値を持つ気にしない場合は、十分な長さここにいましたが、是非、あなたはそれがどのように動作するかを知っています、これまでに何を試しましたか?あなたのコードの試行を共有してください –

+0

ナー、あなたはループする必要があります! ;)これはプロシージャー内で簡単に再利用できるように行うことができますが、配列の各値を転送する必要があります。あなたのコードを掲示し、あなたが立ち往生している場合は突っ込む! ;)@ShaiRado:美しい朝!^^ – R3uK

+0

あなたがこのようなことをしなければならないと前もって知っているなら、代わりにCollectionを使うべきです – Amorpheuses

答えて

2

あなたは終わり

Dim newVal As Variant 
Dim tempVar As Variant 

newVal = "newValue" 

tempVar = newVal & "|" & Join(a, "|") 
ReDim a(0 To k + 1) As Variant 
tempVar = Split(tempVar, "|") 
For i = 0 To k + 1 
    a(i) = tempVar(i) 
Next 
1

を考え出すことができるものです。コードを使用して、配列の最後または最後に要素を追加することができます(必要な場合)。ElemIdの値を変更するだけです。

:配列aの値をワークシートの範囲から読み取る場合、コードを簡略化できます。

コード

Option Explicit 

Sub AddElemToArray() 

Dim a() As Variant 
Dim ElemId As Long, i As Long 
Dim NewVal As Variant 

ReDim a(0 To 4) '<-- modify th value 4 to your array size 
NewVal = "Test" 

a(0) = 1 
a(1) = "f" 
a(2) = "g" 
a(3) = 4 
a(4) = "a" 

ReDim Preserve a(0 To UBound(a) + 1) 

ElemId = 2 '<-- which element ID inside the array to modify 

For i = UBound(a) To ElemId + 1 Step -1 
    a(i) = a(i - 1) 
Next i 
a(ElemId) = NewVal 

End Sub 
関連する問題