- ベストアンサー
VB2005で複数のキーワードから数値を検出する方法
- VB2005入門者による、カンマ区切りのテキストからキーワードを元に数値を検出する方法について説明します。
- 特定のキーワードを持つ行の数値を検出して変数に格納する方法をまとめました。
- 複数のキーワードを条件として、カンマ区切りのテキストから数値を検出して格納する方法について説明します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>If Field(0) = "POINT" And Field(1).Replace(" ", "") = "AA" Then >とすることで、なんとか"1"だけは拾うことができました。 例えば読み込んだ変数lineに含まれているかを判断して実行であれば、 Dim reader As New System.IO.StreamReader("R:\abcd.txt", System.Text.Encoding.Default) Dim line As String Dim Field As Object Dim i As Long = 0 Dim j As Long Dim answer() As Object ReDim answer(0 To 0) Do Until reader.EndOfStream line = reader.ReadLine() If (line.Contains("POINT") * line.Contains("AA")) Then Field = line.Split(",") answer(i) = Trim(Field(2)) i = i + 1 ReDim Preserve answer(0 To i) End If Loop For j = 0 To UBound(answer, 1) - 1 Debug.Print(answer(j)) Next Erase answer こんな方法でもいいのかな?
その他の回答 (2)
- n-jun
- ベストアンサー率33% (959/2873)
>Dim Field As Object ←なぜobjectなのかがわかりません。 ExcelVBAだとValiantを使ってますが、それがないので使ってました。 詳しくはないんですけどね。 >If (line.Contains("POINT") * line.Contains("AA")) Then ← 文字列の特定にContainsを使うのですね! >でもなぜ * なのでしょうか。 ヘルプでContainsを調べてみると、 「value パラメータがこの文字列内に存在するか、 value が空の文字列 ("") の場合は true。それ以外の場合は false。」 とあります。 ようは2つの検索結果を掛け算することで、 false * false = false (0) true * false = false (0) false * true = false (0) true * true = true (1) IF文はtrue(0以外)の時に以降を実行してますから、双方に存在していれば 実行する事になります。 ExcelVBAではたまに使う手法です。(式は違いますけど)
お礼
返事遅くなり申し訳ありませんでした。 丁寧な解説ありがとうございました!
- n-jun
- ベストアンサー率33% (959/2873)
Dim reader As New System.IO.StreamReader("R:\abcd.txt", System.Text.Encoding.Default) Dim line As String Dim Field As Object Dim i As Long = 0 Dim answer() As Object ReDim answer(0 To 0) Do Until reader.EndOfStream line = reader.ReadLine() Field = line.Split(",") If Field(0).Contains("POINT") Then answer(i) = Field(2) i = i + 1 ReDim Preserve answer(0 To i) End If Loop MsgBox(UBound(answer, 1) & "_" & i) とか? Excelに貼り付けるのが目的であれば、ExcelVBAで行なうのはダメなのでしょうか? (VBは不得意です)
お礼
早速のアドバイスありがとうございます。 試したところ メッセージボックスには 3_3 が表示されました。 勉強不足の為、なぜ3_3が表示されるのかわからないので じっくり考えていきたいと思います。 複数キーワードで If Field(0) = "POINT" and Field(1) = "AA" Then にて"POINT"と"AA"から"1"を得られなかったのは 元のテキストにスペースが入っていたのが原因なようで If Field(0) = "POINT" And Field(1).Replace(" ", "") = "AA" Then とすることで、なんとか"1"だけは拾うことができました。 ExcelVBAではなくVBで作成しなければならない環境なので あえてVB2005を使用しています。
お礼
ありがとうございます。 不明個所があります Dim Field As Object ←なぜobjectなのかがわかりません。 If (line.Contains("POINT") * line.Contains("AA")) Then ← 文字列の特定にContainsを使うのですね! でもなぜ * なのでしょうか。