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番目の項目を削除します。
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番目の項目を削除することができました。
配列を削除するテクニックがわかると、こんなことも可能です。
VBAで2次元配列の列を削除
次は、2次元配列の削除をしてみます。まずは、列の削除からです。
イメージ図
2次元配列の列を、削除するイメージ図から、みてみます。
先ほどの1次元配列とほとんど同じです。
手順としては、
①削除する列に、次の列の値を入力していく
②配列の大きさを1つ減らす
という流れです。
例えば、次のような2次元配列で、2列目を削除したいとします。
2列目を削除したい
削除したい2列目の項目に、次の項目の値を貼り付けていきます。
2列に次の列の値を入力していく
次に、「Redim Preserve」で、配列を1列だけ減らします。
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
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