Accessでは、テーブルなどでデータを見たとき、見た目は”空白”であっても”NULL”という値が保存されています。外見は同じでも内部的なデータとしては別物として扱われます。
そのようなデータをコピーしてExcelに貼り付けたとき、やはり見た目はいずれも”空白”ですが、実際には異なる値であるため、関数式などにおいて支障が出る場合があります。たとえば、「COUNTA」関数を使って”空白でないセルの数”をカウントする場合、”NULL”は”空白でない”セルとしてカウントされてしまいます。
そのようなケースにおいて、Excelに貼り付けた一連のデータから”Null”のセルを”空白”のセルに一括置換するマクロを紹介します。
Accessのテーブルやクエリからレコードをコピー&ペーストしたあと、Excel側でそれらを範囲選択したあとにこのマクロ「Null2Space」を実行することで、範囲内のすべての”Null”が”空白”に置換されます。
【注意】下記はAccessではなくExcel用のマクロです。
Sub Null2Space()
Dim RngAdr As String
Dim Rng As Range
If TypeName(Selection) <> "Range" Then Exit Sub
RngAdr = Selection.Address(False, False)
RngAdr = Replace(RngAdr, ":", "")
If IsNumeric(RngAdr) Then
Beep
MsgBox "行全体が選択されています! セル単位で範囲選択し直してください。"
Exit Sub
End If
If Selection.Address = Selection.EntireColumn.Address Then
Beep
MsgBox "列全体が選択されています! セル単位で範囲選択し直してください。"
Exit Sub
End If
Beep
If MsgBox("AccessからペーストしたNullのセルを空白に置換します!", vbQuestion + vbOKCancel) = vbCancel Then
Exit Sub
End If
'すべてのセルをループ処理
For Each Rng In Selection
'長さゼロでかつEmptyでなければ""を代入
If Len(Rng.Value) = 0 And Not IsEmpty(Rng.Value) Then
Rng.Value = ""
End If
Next Rng
End Sub
実行例:
- まずAccessからテーブルなどからレコードをコピー&ペーストします。
- そこに「COUNTA」で”空白でないセルの数”を計算するセルを作ります。

- そして、ペーストした範囲を選択して上記マクロを実行すると下図のような結果になります。
|