セル範囲を一括で配列に取り込んだ際などに、空白が紛れ込むことがあります。
そのような場合に配列から空白を除く方法を検証してみます。
空白のある元データ
簡単なデータを用意しました。
このセル範囲を配列に取込、空白の削除を行うのが以下のコードです。
Sub EmptyDelete() Dim myVar As Variant myVar = Range("A2:A6").Value myVar = ArrayEmptyDelete(myVar) Range("C2").Resize(UBound(myVar) + 1, 1).Value = _ WorksheetFunction.Transpose(myVar) End Sub
セル範囲を取り込んだ際の配列の状況が以下のようになっています。
3つ目の項目が取り込む値が無いため、Variant型の初期値であるEmptyになっています。
変数の初期値についてはこちら
今回はこのEmptyを削除して配列の要素数を減らしたいと思います。
空白を削除する関数
上記のコードで記載されていた
ArrayEmptyDelete関数が配列からEmptyを削除して要素数を減らす関数です。
コードは以下の通り
'###差し当たって1列の2次元配列を想定 '###取り込んだ2次元配列から空白を削除して1次元配列として返す Function ArrayEmptyDelete(myArray As Variant) As Variant '① If Not IsArray(myArray) Then ArrayEmptyDelete = Array(): Exit Function Dim i As Long Dim myVar As Variant Dim RowData As Variant ReDim myVar(UBound(myArray)) For Each RowData In myArray '② If Not IsEmpty(RowData) Then myVar(i) = RowData i = i + 1 End If Next ReDim Preserve myVar(i - 1) ArrayEmptyDelete = myVar End Function
①引数myArrayが配列かどうかを判定。配列でない場合は空配列を返す。
②Isempty関数で配列の要素がEmptyかどうかを判定
関数使用後
ArrayEmptyDelete関数仕様後の配列の状態はこんな感じ。
結果としてセルにも空白を削除した状態で貼り付けられています。
Transpose関数を使用した配列の行列変換については下記を参照
まとめ
取り敢えず1列しか持たない2次元配列を対象としたが、別の状況でも使えるようにブラッシュアップはしてみたい。