OR
誰でも自由に記事を投稿・編集できるオープンリファレンス
記事ID:580
区分:プログラム  |  分類:VB  |  最終更新日:2014/06/20
クリエイティブ・コモンズ 表示-継承ライセンス 2.1
【VB6/VBA】配列の指定要素を削除する
関連タグ:vb6, vba, 配列
このエントリーをはてなブックマークに追加      
本文
履歴
編集
閲覧数: 145,484
VB6関連技術まとめ > 【VB6/VBA】配列の指定要素を削除する

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 ステートメントで最後の要素を削除しています。

これは以下のような考え方で、擬似的に配列要素の削除を行なっています。

 

【初期配列】

AAA BBB CCC DDD EEE

 

【削除したい要素(CCC)にそれ以降の要素をコピー】

AAA BBB DDD EEE EEE

                      ←     ←   ※削除したい要素以降の要素を前につめて上書きコピー

 

【ReDimステートメントで最後の配列を削除】

AAA BBB DDD EEE

 

上記機能を関数化したサンプルが以下になります。

サンプル関数

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")となります。

関連記事
外部リンク
外部リンクはありません。
- 記事検索 -