VB6/vba で配列の指定要素のみを削除する場合は、手動で削除します。配列にはコレクションの remove メソッドのような削除機能はありません。
Dim i As Integer
Dim varArray() As Variant
'array()関数で配列を作成
varArray = Array("AAA", "BBB", "CCC", "DDD", "EEE")
'3番目の要素を削除
For i = 2 To UBound(varArray) - 1
varArray(i) = varArray(i + 1)
Next i
ReDim Preserve varArray(UBound(varArray) - 1)
上記例では、削除したい要素にそれ以降の要素を上書きコピーし(一つずつずらし)、最後に ReDim ステートメントで最後の要素を削除しています。
これは以下のような考え方で、擬似的に配列要素の削除を行なっています。
【初期配列】
【削除したい要素(CCC)にそれ以降の要素をコピー】
← ← ※削除したい要素以降の要素を前につめて上書きコピー
【ReDimステートメントで最後の配列を削除】
上記機能を関数化したサンプルが以下になります。
サンプル関数
Public Sub ArrayRemove(ByRef TargetArray As Variant, ByVal deleteIndex As Integer)
Dim i As Integer
'削除したい要素以降の要素を前につめて上書きコピー
For i = deleteIndex To UBound(TargetArray) - 1
TargetArray(i) = TargetArray(i + 1)
Next i
'最終行を削除する
ReDim Preserve TargetArray(UBound(TargetArray) - 1)
End Sub
上記サンプル関数は第一引数に配列を、第二引数に削除したい要素のインデックス番号を指定します。
サンプル関数の使用例は以下になります。
'array()関数で配列を作成
Dim varArray() As Variant
varArray = Array("AAA", "BBB", "CCC", "DDD", "EEE")
'2番目の要素を削除
Call ArrayRemove(varArray, 1)
上記例で出来上がる配列は("AAA", "CCC", "DDD", "EEE")となります。