• ベストアンサー

【VBA ・ エクセル】 テキストファイルから特定情報をぬきだすには

下記のようなテキストファイルから、山田太郎の後ろの数値のみを、エクセルのシートに抜き出すにはどのようにしたらよいのでしょうか。 A1セルに30、A2セルに40、A3セルに60、のように入力したいです。よろしくおねがいします。 山田太郎 30点 aaaaaa30aaaaaaaaaaa bbbbbb20bbbbbbbbbbb ccccccccccccccccccc 山田太郎 40点 ssssss30sssssss eeeeeee40eeeeeeeeee fffffffffffffffffffffff 山田太郎 60点

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

例データ 山田太郎 30点 aaaaaa30aaaaaaaaaaa bbbbbb20bbbbbbbbbbb ccccccccccccccccccc 山田太郎 40点 ssssss30sssssss eeeeeee40eeeeeeeeee fffffffffffffffffffffff 山田太郎 60点 これをメモ帳に貼り付け、名前をtest7.txtで保存しました。名前は自由です。 エクセルのVBEに標準モジュールに Sub test01() s = "山田太郎" i = 2 Open "C:\Documents and Settings\XXXX\My Documents\test7.txt" For Input As #1 While Not EOF(1) Line Input #1, a If Left(a, Len(s)) = s Then Cells(i, "A") = s Cells(i, "B") = Right(a, Len(a) - Len(s)) i = i + 1 End If Wend Close #1 End Sub を貼り付け、実行しました。 アクチブシートに A列  B列 山田太郎 30点 山田太郎 40点 山田太郎 60点 となりました。

hikiko
質問者

お礼

ありがとうございます。大変参考になりました。 EOF()なんて関数があったのですね。 勉強になりました。

その他の回答 (1)

回答No.2

>A1セルに30、A2セルに40、A3セルに60、のように入力したいです。 と、「山田太郎吉 40点」 などという名前の人を除外する必要があるかと思い、 No.1さんのを少し改良しました。 Sub test01() Dim score As String Dim s As String Dim i As Integer Dim a As String Dim fNo As Integer fNo = FreeFile s = "山田太郎" i = 1 Open "C:\tmp\test.txt" For Input As fNo While Not EOF(1) Line Input #1, a If InStr(1, a, s) = 1 Then score = Trim(Replace(Mid(a, InStr(1, a, s) + Len(s)), "点", "")) If IsNumeric(score) Then Cells(i, "A") = score End If i = i + 1 End If Wend Close fNo End Sub

hikiko
質問者

お礼

ありがとうございます。 改造を最小限にするなら、下記解答の   Cells(i, "A") = s この部分を除くだけですみました。 どうやら、わたしは   Line Input #1, a このへんの理解が欠けていたようです。 回答者様のおかげでスキルが少しアップしました。

関連するQ&A