- 配列の要素を位置を指定して削除できます。
○○番目の要素を削除 - (例)配列[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 のように配列名の後に要素数を入れる=静的配列で使用はしないでください。
静的配列は絶対にその後の要素数の変更はできない=要素の追加が不可能となります。
使用した場合は以下のようなエラーを起こします。
詳しくはこちらの記事を確認してください
pop関数 特定の位置の要素を削除する
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
何も削除されずに返ってきました。
このように、エラーが生じてプログラムが止まらないようにしています。
逆を言えば、プログラムは走り続けるので、何番目の要素を削除しているのかは、把握しながらプログラムを作成するようにしてください。
まとめ
いかがでしょうか。
まとめてみます。
配列を便利に使いやすくする関数を作っています。
最後に、
ココナラでVBA、Pythonの作成代行を行っています。
よければ、↓からご依頼お待ちしております。
プログラミング代行いたします。
Python・VBAのコード対応です。
【VBA】
エクセルの自動処理全般
【Python】
スクレイピングによる、インターネット操作の自動化
デスクトップツール(データ解析等)
ワードプレスの自動化・効率化(自動更新、記事新規作成等の自動化)
ココナラで依頼を受けておりますので、お気軽にご相談ください。
ココナラの会員登録がまだの方↓
また、VBAを学習するなら動画での学習がおすすめです。
世界最大級の学習用動画プラットフォームUdemyにはVBAの動画がたくさんアップロードされています。よければ覗いてみてください。
ではでは。