Excelが大好きだ!

Excel大好き経理マンがExcelの事を書き綴っていきます。


スポンサードリンク

配列から空白(Empty)を取り除く方法

セル範囲を一括で配列に取り込んだ際などに、空白が紛れ込むことがあります。

そのような場合に配列から空白を除く方法を検証してみます。

空白のある元データ

簡単なデータを用意しました。
f:id:ExcelLover:20181223130243j:plain

このセル範囲を配列に取込、空白の削除を行うのが以下のコードです。

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

セル範囲を取り込んだ際の配列の状況が以下のようになっています。 f:id:ExcelLover:20181223130306j:plain

3つ目の項目が取り込む値が無いため、Variant型の初期値であるEmptyになっています。

変数の初期値についてはこちら

www.excellovers.com

今回はこの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関数仕様後の配列の状態はこんな感じ。
f:id:ExcelLover:20181223130359j:plain

結果としてセルにも空白を削除した状態で貼り付けられています。
f:id:ExcelLover:20181223130413j:plain

Transpose関数を使用した配列の行列変換については下記を参照

www.excellovers.com

まとめ

取り敢えず1列しか持たない2次元配列を対象としたが、別の状況でも使えるようにブラッシュアップはしてみたい。