VBA

【VBA】配列の位置を指定して要素を削除する関数

記事内に商品プロモーションを含む場合があります
わかること
  • 配列の要素を位置を指定して削除できます。
    ○○番目の要素を削除
  • (例)配列[a,b,c,d]
    「0」指定(先頭) [a,b,c,d][b,c,d]
    「2」指定 [a,b,c,d][a,b,d]
  • マイナスで位置を指定して、
    最後から○○番目の位置も指定できる
  • (例)配列[a,b,c,d]
    「-1」指定(末尾) [a,b,c,d][a,b,c]
    「-2」指定(最後から2番目) [a,b,c,d][a,b,d]

こんにちは、hokkyokunです。

配列の要素を位置を指定して削除する関数を作成しましたので解説します。

プログラミング代行いたします。

Python・VBAのコード対応です。

【VBA】
エクセルの自動処理全般

【Python】
スクレイピングによる、インターネット操作の自動化
デスクトップツール(データ解析等)
ワードプレスの自動化・効率化(自動更新、記事新規作成等の自動化)

ココナラで依頼を受けておりますので、お気軽にご相談ください。

依頼はこちらから

ココナラの会員登録がまだの方↓

無料登録はこちら

VBAを学習するには、動画プラットフォームUdemyがおすすめです。
Udemyの公式サイトはこちらです。

注意点

配列の変数を宣言するときは以下の書き方でやることを守ってください。

Dim 配列名 as Variant

(例) Dim arrs as Variant
arrsの後に()(2)などをつけないのがポイント

Dim 配列名(2) as Variant のように配列名の後に要素数を入れる=静的配列で使用はしないでください。

静的配列は絶対にその後の要素数の変更はできない=要素の追加が不可能となります。

使用した場合は以下のようなエラーを起こします。

詳しくはこちらの記事を確認してください

【VBA】配列は動的配列一択である理由と配列宣言の最適解 このページでわかること 動的配列と静的配列の違い 静的配列は実務では使用価値がない理由 配列の宣言と使い方の実務上の最適...

pop関数 特定の位置の要素を削除する

  • 関数
    pop( arrs , elm )
  • 引数
    ① arrs : 配列(データ型はVariant)
    ② elm : 要素(データ型はVariant)
  • 戻り値
    なし(配列から特定の位置の要素が削除されています。)
Function popElm(ByRef arrs As Variant, ByVal loc As Long)
    Dim results() As Variant
    Dim i, j As Long
    Dim num As Long
    
    '============================================
    'エラー判定
    '============================================
    Dim a As Variant
    On Error GoTo err
    a = arrs(0)
    
    'エラーを起こす=配列が空なので何もせず終了
err:
    If err.Number = 9 Or err.Number = 13 Then
        Exit Function
    End If
    
    
    
    '配列の要素数が一つだけのときは初期設定の配列を返す
    If UBound(arrs) = 0 Then
        arrs = results
        Exit Function
    End If
    
    'locがマイナスのとき、後ろから位置を指定する
    '(例)loc=-1なら、最後尾、loc=-2なら後ろから二番目
    If loc < 0 Then
        loc = UBound(arrs) + 1 + loc
    End If
    
    'locの位置がarrsの要素数範囲外の場合処理をしない
    If loc > UBound(arrs) Or loc < LBound(arrs) Then
        Exit Function
    End If
    
    j = 0
    ReDim Preserve results(j)
    'locの位置の要素以外をresultsに格納
    For i = LBound(arrs) To UBound(arrs)
        If i <> loc Then
            ReDim Preserve results(j)
            results(j) = arrs(i)
            j = j + 1
        End If
    Next i
    
    arrs = results
End Function

実際に使用

配列に「リンゴ」、「バナナ」、「パイナップル」、「イチゴ」、「メロン」を入れたものを用意します。

ここから

  • 先頭を削除
  • 真ん中(3番目)を削除
  • 最後を削除
  • 要素数以上の番号を指定した場合(今回だと7を指定します)

先頭(loc=0)削除

Sub testArray1()
    
    Dim arrs As Variant
    arrs = Array("リンゴ", "バナナ", "パイナップル", "イチゴ", "メロン")
    
    Call popElm(arrs, 0)
    
    Dim arr As Variant
    For Each arr In arrs
        Debug.Print arr
    Next
    
    '以下のように出力されます。
    'バナナ
    'パイナップル
    'イチゴ
    'メロン
    
End Sub

1番目(1番目は「0」で指定します)はリンゴなので、リンゴが削除されました。

真ん中削除

次は真ん中です。
0,1,2と数えるので、今回であれば「2」を指定します。

Sub testArray2()
    
    Dim arrs As Variant
    arrs = Array("リンゴ", "バナナ", "パイナップル", "イチゴ", "メロン")
    
    Call popElm(arrs, 2)
    
    Dim arr As Variant
    For Each arr In arrs
        Debug.Print arr
    Next
    
    '以下のように出力されます。
    'リンゴ
    'バナナ
    'イチゴ
    'メロン
    
End Sub

今回はパイナップルがきちんと削除されています。

最後の要素を削除

少し応用編で、最後の要素を削除してみます。
最後は0,1,2,3,4の「4」を指定することでもできますが、「-1」でも削除できるようにしています

Sub testArray3()
    
    Dim arrs As Variant
    arrs = Array("リンゴ", "バナナ", "パイナップル", "イチゴ", "メロン")
    
    Call popElm(arrs, -1)
    
    Dim arr As Variant
    For Each arr In arrs
        Debug.Print arr
    Next
    
    '以下のように出力されます。
    'リンゴ
    'バナナ
    'パイナップル
    'イチゴ
    
End Sub

要素数以上の番号を指定

サンプルの配列は要素数「5」なので、
0,1,2,3,4 もしくは -1,-2,-3,-4,-5 でしか指定できません

これ以外の数値、例えば「7」を指定した場合は何も削除されていない配列が返ってきます。

Sub testArray4()
    
    Dim arrs As Variant
    arrs = Array("リンゴ", "バナナ", "パイナップル", "イチゴ", "メロン")
    
    Call popElm(arrs, 7)
    
    Dim arr As Variant
    For Each arr In arrs
        Debug.Print arr
    Next
    
    '以下のように出力されます。
    'リンゴ
    'バナナ
    'パイナップル
    'イチゴ
    'メロン
    
End Sub

何も削除されずに返ってきました。

このように、エラーが生じてプログラムが止まらないようにしています。

逆を言えば、プログラムは走り続けるので、何番目の要素を削除しているのかは、把握しながらプログラムを作成するようにしてください

まとめ

いかがでしょうか。
まとめてみます。

まとめ

配列の特定の位置を指定して要素を削除する関数

関数はpop関数

配列を便利に使いやすくする関数を作っています。

最後に、

ココナラでVBA、Pythonの作成代行を行っています。
よければ、↓からご依頼お待ちしております。

プログラミング代行いたします。

Python・VBAのコード対応です。

【VBA】
エクセルの自動処理全般

【Python】
スクレイピングによる、インターネット操作の自動化
デスクトップツール(データ解析等)
ワードプレスの自動化・効率化(自動更新、記事新規作成等の自動化)

ココナラで依頼を受けておりますので、お気軽にご相談ください。

依頼はこちらから

ココナラの会員登録がまだの方↓

無料登録はこちら

また、VBAを学習するなら動画での学習がおすすめです。
世界最大級の学習用動画プラットフォームUdemyにはVBAの動画がたくさんアップロードされています。よければ覗いてみてください。

Udemyの公式サイトはこちらです。

ではでは。