- ベストアンサー
EXCELのVBA NULL、スペースの判断
EXCEL2000を使用しています. 入力データはテキストファイルで VBAで 空白値のを読み飛ばししたい為 if mid(da_i,1,1) <> " " then goto aa end if で判断していますが、空白データが読み飛ばしできません. (null値ではありません) どのようにすればよいのでしょう? また、null値の場合の読み飛ばしは if mid(da_i,1,1) <> "" then goto bb end if でよいのでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
<C:\Temp.txt> aaa ccc ddd 以下は、これを呼び込んで空行以外を出力するサンプルコードです。 Private Sub CommandButton1_Click() Dim I As Integer Dim N As Integer Dim Datas() As String Datas() = FileReadArray("C:\temp\test.txt") N = UBound(Datas()) For I = 0 To N If Len(Trim(Datas(I))) Then Debug.Print Datas(I) End If Next I End Sub [イミディエイト] aaa ccc ddd という実行結果を得ることが出来ます。 このように Len関数で取得した値を真偽判断に利用するという手もあります。 ちなみに、私は、全てこの方式で統一しています。
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 #2さんが、お書きになっていますが、少し書き加えると、VBAのNull値は、Variant 型の明示的な代入値です。Variant 型は、変数に入れていない状態のままですと、Empty が入りますが、さらに、明示的に、Null値を入れることが可能です。しかし、私は、数年、VBAを書いておりますが、Null値を積極的に使った経験はありません。 >if mid(da_i,1,1) <> " " then 今回、お書きになった質問だけでは、良く分かりませんが、テキストファイルで、先頭の1文字だけで「" "」 は、通常は、排除できないように思います。Trim を使うなどして、その後で、Len で、文字列の長さを取ります。 「""」は、長さ0の文字列と言って、これは、可能です。なお、以下は、全角スペースと半角スペースを両方扱っています。 Sub TestSample() Dim tmpBuf As String Const SAMPLE_TXT = " a" tmpBuf = SAMPLE_TXT tmpBuf = Replace(Trim$(tmpBuf), " ", "", , , 1) '1はTextCompare If Len(tmpBuf) = 0 Then MsgBox "何もありません。" Else MsgBox "文字列があります。: " & SAMPLE_TXT End If End Sub
- mshr1962
- ベストアンサー率39% (7417/18945)
null値の読み飛ばしは、通常は If Trim(da_i) = "" Then Goto bb End If または If IsNull(da_i) Then Goto bb End If ですね。スペースを含むものも同時に飛ばすなら前者のほうが有効でしょう。 if mid(da_i,1,1) <> "" thenの場合はnull以外の場合読み飛ばしです。 bbにnull以外の時の処理があるなら構いませんけどね。
- imogasi
- ベストアンサー率27% (4737/17070)
エクセルVBAの解説書では (1)空白のデータ If A="" THEN で聞く。 ただエクセルの内部的な、「空白」の状態は、余り明らかにした解説には出会わず、小生には不知。 (2)null値 NULL エクセルについて言えば、質問者の勝手な使用とおもう。エクセルVBAではこの言葉は使われない(アクセルVBAでは重要概念。エクセルVBAの解説書では出てこない。) エクセルに反例がWEBとかで有れば、質問者でも回答者でも教えてほしいぐらい。 エクセル関数のなかでエラー値として#NULL!が出てくるのが唯一の例ですが、セルの値としての表現ではなく、「共通部分がない」という 表現で使われている。 (3)スペース これは全角スペース、半角スペースとも文字コードが決まっており、 その文字コードが、入っている(ユーザーが入れた)状態であることは確実。 (A)先頭1文字で判別 (B)全文字スペースを半月 (C)1部(前、後、途中)のスペースの削除はTRIM、RTRIM、LTRIMなど関数あり (B)を正確にやるなら、私流で Sub test01() s = " " '半角スペース文字列 zs = " " '全角スペース文字列 For i = 1 To 10 If Cells(i, "A") = Left(zs, Len(Cells(i, "A"))) Or _ Cells(i, "A") = Left(s, Len(Cells(i, "A"))) Then MsgBox i & "行目はスペースです" End If Next i End Sub
- bardfish
- ベストアンサー率28% (5029/17766)
これだとどうですか? if Trim(mid(da_i,1,1)) <> "" then