大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、配列を削除する方法について、ご紹介します。残念ながら、VBAでは、配列を削除する関数がないので、プログラミング的に配列を削除することになります。1次元配列だけでなく、2次元配列の削除についても、具体的なVBAコードを使って解説していきます。

はじめに

この記事では、配列を削除する方法について、ご紹介します。

配列を削除するには、「Redim Preserve」を使って、プログラミング的に削除します。

配列で、一部の項目を削除したい場合に使えるテクニックです。

では、具体的なVBAコードを使って、解説していきます。

この記事で紹介すること

  • 配列を削除する方法

目次から見たい項目へ移動すると便利ですよ。

目次

VBAで配列を削除する方法

VBAで、配列の一部を削除する方法について、ご紹介します。

残念ながら、VBAでは、配列の一部を削除する機能はありませんので、プログラミング的に削除する必要があります。

イメージ図

配列を削除するイメージ図から紹介します。

手順としては、

  • ①削除する項目に次の項目を入力していく
  • ②配列の大きさを1つ減らす

という流れです。

例えば、次のような配列で、2番目を削除したいとします。

番目の配列を削除したい

2番目の配列を削除したい

削除したい項目に、次の項目を入力していきます。

削除したい項目に次の項目を入力

削除したい項目に、次の項目を入力していく

最後に「Redim Preserve」を使って、配列を1つ小さくします。

配列を1つ小さくする

Redim Preserveで配列を1つ小さくする

これで、配列の一部を削除することができます。

この流れを、VBAコードで書いていきます。

配列を削除(Redim Preserve)

配列を削除するVBAコードは、次のようになります。

Sub TEST1()
    
    '配列を作成
    Dim a
    ReDim a(3)
    a(0) = 0
    a(1) = 1
    a(2) = 2
    a(3) = 3
    
    '削除したい項目
    j = 2
    
    '削除したい項目に次の項目を入力していく
    For i = j - 1 To UBound(a) - 1
        a(i) = a(i + 1)
    Next
    
    '配列を1つだけ小さくする
    ReDim Preserve a(UBound(a) - 1)
    
End Sub

「1」が入力されている、2番目の項目を削除します。

では、実行してみます。

2番目の項目を、削除する前の配列です。

削除する前の配列

「1」が入力されている2番目の項目を削除する前の配列

「1」が入力されている2番目の項目を削除します。

2番目の項目を削除

「1」が入力されている2番目の項目を削除した結果

「1」が入力されていた、2番目の項目が削除されています。

こんな感じで、配列の一部を削除することができます。

コンマ区切りの値を配列にして削除

配列を削除するちょっと応用として、コンマ区切りの値を配列にして削除する、というのをやってみます。

セルにコンマ区切りの値を用意しました。

コンマ区切りの値を一部削除する

コンマ区切りの値を用意

このコンマ区切りの値で、3番目の項目を削除してみます。

VBAコードはこちらになります。

Sub TEST2()
    
    'コンマ区切りの値を取得
    a = ActiveSheet.Cells(1, 1)
    
    Dim b
    'コンマ区切りで、文字列を分割する
    b = Split(a, ",")
    
    '削除したい項目
    j = 3
    
    '削除したい項目に、次の項目を入力していく
    For i = j - 1 To UBound(b) - 1
        b(i) = b(i + 1)
    Next
    
    '配列を1つだけ小さくする
    ReDim Preserve b(UBound(b) - 1)
    
    'コンマ区切りで、文字列を作成
    a = Join(b, ",")
    
    'セルに文字列を入力
    ActiveSheet.Cells(1, 1) = a
    
End Sub

手順は、

  • ①セルの値を取得
  • ②Splitでコンマ区切りで分割して配列に格納
  • ③3番目の配列を削除
  • ④コンマ区切りで文字列を作成
  • ⑤セルに貼り付け

という流れです。

実行前の文字列です。

コンマ区切りの値

セルにコンマ区切りの値を入力

では、実行してみます。

3番目の項目を削除

コンマ区切りの文字列で3番目の項目を削除した結果

3番目の項目を削除することができました。

配列を削除するテクニックがわかると、こんなことも可能です。

VBAで2次元配列の列を削除

次は、2次元配列の削除をしてみます。まずは、列の削除からです。

イメージ図

2次元配列の列を、削除するイメージ図から、みてみます。

先ほどの1次元配列とほとんど同じです。

手順としては、

  • ①削除する列に、次の列の値を入力していく
  • ②配列の大きさを1つ減らす

という流れです。

例えば、次のような2次元配列で、2列目を削除したいとします。

2列目を削除したい

2次元配列で2列目を削除したい

削除したい2列目の項目に、次の項目の値を貼り付けていきます。

2列に次の列の値を入力していく

削除したい2列の項目に、次の項目の値を貼り付けていく

次に、「Redim Preserve」で、配列を1列だけ減らします。

1列だけ小さくする

Redim Preserveで配列を1列だけ減らす

こんな感じで、2次元配列で、一部の列を削除することができます。

VBAコードを見てみます。

VBAコードと実行結果

4行3列の2次元配列で、2列を削除するVBAコードです。

Sub TEST3()
    
    Dim a
    'セルの表を取得
    a = ActiveSheet.Range("A1").CurrentRegion
    
    '削除したい列
    k = 2
    
    '行のループ
    For i = 1 To UBound(a, 1)
        '削除したい列に、次の列の値を入力していく
        For j = k To UBound(a, 2) - 1
            a(i, j) = a(i, j + 1)
        Next
    Next
    
    '配列を、1列だけ小さくする
    ReDim Preserve a(1 To UBound(a, 1), 1 To UBound(a, 2) - 1)
    
    '配列をセルに入力
    ActiveSheet.Range("E1").Resize(UBound(a, 1), UBound(a, 2)) = a
    
End Sub

手順は、

  • ①セルの値を配列に格納
  • ②削除したい2列目に、次の列の値を貼り付けていく
  • ③配列を1列だけ小さくする
  • ④配列をセルに貼り付け

という流れです。

4行3列の値をセルに入力しました。

4行3列の値

4行3列の値をセルに入力

では、VBAコードを実行してみます。

2列目を削除

2列目の項目を削除した結果

2列目の項目を、削除することができました。

2次元配列でも、同じ考えで、配列を削除することができます。

VBAで2次元配列の行を削除

つづいて、2次元配列の行を削除する方法を、ご紹介します。

2次元配列の行を削除する方法は、ちょっと厄介です。

「Redim Preserve」で、配列の大きさを変更できるのは、一番大きい次元しか変更できません。

なので、ちょっと工夫して、配列を「転置」して列を削除してから、再度「転置」するという感じで、行を削除します。

言葉だけでは、よくわからないので、イメージ図からみていきます。

イメージ図

2次元配列の行を、削除するイメージ図を説明します。

手順としては、

  • ①配列を転置する
  • ②削除する列に、次の列の値を入力していく
  • ③配列の大きさを1つ減らす
  • ④再度、配列を転置する

という流れです。

例えば、4行3列の配列で、2行目を削除したいとします。

2行目を削除したい

4行3列の配列で、2行目を削除したいとする

一旦、配列を「転置」しちゃいます。

配列を転置する

4行3列の配列を転置する

これで、削除する場所が、2行目から2列目になります。

あとは、先ほどと同じように、列を削除する感じです。

削除したい2列目以降に、次の列の値を入力していきます。

2列目に次の列の値を入力していく

2列目以降に、次の列の値を入力していく

「Redim Preserve」で、配列を1列だけ、小さくします。

配列を1列だけ小さくする

Redim Preserveで配列を1列だけ小さくする

最後に「転置」して、配列を戻してあげます。

転置して配列を戻す

配列を再度「転置」して、配列を戻す

これで、2次元配列の2行目を、削除することができます。

では、この考えを基に、VBAコードを書いてみます。

VBAコードと実行結果

2次元配列で、2行目を削除するVBAコードです。

Sub TEST4()
    
    Dim a
    'セルの表を取得
    a = ActiveSheet.Range("A1").CurrentRegion
    
    '配列を転置する
    a = WorksheetFunction.Transpose(a)
    
    '削除する列(削除する行)
    k = 2
    
    '行のループ
    For i = 1 To UBound(a, 1)
        '削除する列に、次の列の値を入力していく
        For j = k To UBound(a, 2) - 1
            a(i, j) = a(i, j + 1)
        Next
    Next
    
    '配列の列を、1列だけ小さくする
    ReDim Preserve a(1 To UBound(a, 1), 1 To UBound(a, 2) - 1)
    
    '転置する
    a = WorksheetFunction.Transpose(a)
    
    '配列をセルに入力する
    ActiveSheet.Range("E1").Resize(UBound(a, 1), UBound(a, 2)) = a
    
End Sub

手順は、

  • ①セルの値を配列に格納
  • ②配列を転置する
  • ③削除したい2列目に、次の列の値を貼り付けていく
  • ④配列を1列だけ小さくする
  • ⑤再度、配列を転置する
  • ⑥配列をセルに貼り付け

という流れです。

転置しているので、「2行目」に値を入力ではなく、「2列目」に値を入力しています。

4行3列の値をセルに入力しました。

4行3列の値を用意

4行3列の値をセルに入力

では、VBAコードを実行して、2行目を削除してみます。

2行目を削除

4行3列の2次元配列から2行目を削除した結果

4行3列の2次元配列から、2行目を削除することができました。

正直、配列の削除は、面倒くさいですね。

おわりに

この記事では、配列を削除する方法について、ご紹介しました。

配列を削除するには、「Redim Preserve」を使って、プログラミング的に削除します。

配列で、一部の項目を削除したい場合に使えるVBAコードです。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

アーカイブから探す