配列操作

一次元配列で〇番目の指定要素を削除する【ExcelVBA】

配列内の指定した要素を、削除したい場合があります。

■削除例
重複したデータを削除したい場合はDictionaryステートメントで削除が可能です。
配列内で指定した文言の要素を抜き出したい場合はFor~Loopで取得します。
配列内の空要素(IsEmptyや””文字)はこちらで取得します。

今回の記事は特定の〇番目の指定要素から取得しなおすコードを説明します。

一次元配列で〇番目の指定要素を削除するサンプルコード

コレクションの remove メソッドは配列に存在していません。

以下の手順で要素を詰めて上書きするイメージです。
①配列を〇番目以降の要素からループさせ上書きする。
②Redim Preserveで配列を再定義(最終の要素をなくす)する。

'■一次元配列内の〇番目要素を削除する
Public Sub Call_Array_Remove(ByRef arr As Variant, ByVal num As Long)
    Dim i As Long

    '■削除したい〇番目の要素以降のを前につめて上書きコピーする
    For i = num To UBound(arr) - 1
        arr(i) = arr(i + 1)
    Next i

    '■配列を再定義し、最終の要素を詰める
    ReDim Preserve arr(UBound(arr) - 1)
End Sub

実際の使い方は以下のように使用します。

Public Sub test()
    Dim data() As Variant
    data = Array("あ", "い", "う", "え", "お")
    
    '■3を指定したのでの4番目(0から数えて4つ目の3番目の要素)「え」を削除
    Call Call_Array_Remove(data, 3)
    ' [あ い う え お ]が
    ' [あ い う お]になる
    
End Sub

関連記事

指定した要素で配列を作成【Array関数】【ExcelVBA】
一次元/二次元配列の要素数の最大値を取得する【Ubound関数】
配列の宣言(静的/動的/1次元/2次元)【ExcelVBA】

コメント

タイトルとURLをコピーしました