MW211 EXIT

devlog
ExcelVBA/ADODBの空セル
2014年10月29日
設定にもよるのだろうが、ADODBで値を代入する場合、
空のセルについて、「""」(空文字列)になるかと思いきや
「NULL(厳密にはEmpty)」になってしまう。
┌──────────────────────────────────────┐
│Private テーブル As New ADODB.Recordset                                     │
├──────────────────────────────────────┤
│テーブル.Fields("項目名").Value = Cells(y, x).Value                         │
└──────────────────────────────────────┘

これだと、NOT NULL属性の場合、エラーとなるのでその対策を考えた
「IsEmpty(Cells(y, x).Value, "")」とかで、Emptyの時に変換できたり
したらスマートなのだけど、残念ながら「IsEmpty()」はEmptyか否かの
結果を返すだけのBoolean関数なのだ。
かといって、いちいちIf文にするのもかっこ悪いし、
じゃユーザ関数作るかって考えたけど、いい案が浮かんだ。
┌──────────────────────────────────────┐
│テーブル.Fields("項目名").Value = Cells(y, x).Value & ""                    │
└──────────────────────────────────────┘
「Empty & "" = ""」なんだね。

なお、数値項目の場合は、以下でOK。
┌──────────────────────────────────────┐
│テーブル.Fields("項目名").Value = Cells(y, x).Value + 0                     │
└──────────────────────────────────────┘
「Empty + 0 = 0」なんだね。

【追記】
  文字列の場合、変数を間にかませば、NULLにはならないようだ。
┌──────────────────────────────────────┐
│Dim 変数 As String                                                          │
│変数 = Cells(y, x).Value                                                    │
│テーブル.Fields("項目名").Value = 変数                                      │
└──────────────────────────────────────┘
分類:ExcelVBA