dポイントプレゼントキャンペーン実施中!

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
でよいのでしょうか?

A 回答 (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関数で取得した値を真偽判断に利用するという手もあります。
ちなみに、私は、全てこの方式で統一しています。
    • good
    • 0

こんにちは。



#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
    • good
    • 0

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以外の時の処理があるなら構いませんけどね。
    • good
    • 0

エクセル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
    • good
    • 0

これだとどうですか?



if Trim(mid(da_i,1,1)) <> "" then
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!