• 締切済み

テキストからのデータ取得方法

教えてください。 下記のサンプルのテキストファイルからデータを取得し、エクセルファイルに2列にセルを使って、次のような結果がほしいです。 (行の左端から000から始まる値と”会社別計”のとなりの数字がほしいです。) どのようなマクロを作成すればいいですか? 0 0 0 1 0 1 1 2    4 3 8 , 3 3 9 0 0 0 1 1 4 3 0 1 8 , 3 3 0 , 3 0 1 0 0 0 1 1 5 0 1  1 , 3 9 5 , 5 0 0 0 0 0 3 3 0 0 0  5 , 9 0 0 , 4 8 3 ----------ここ以下サンプルのテキストファイル-------------------------- 会社別: 0 0 0 5 0 0 0 1 テスト 日付: 2 8 - O C T - 2 0 0 9 1 6 : 3 0 * * * 会社別別当日付替一覧表* * * 頁: 1 回収 会社別通貨支払持込種類外貨金額付替円貨金額 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 1 0 1 1 2 A B C EJ P Y 回収本口座移動依頼1 5 2 , 0 6 9 . 0 0 1 5 0 , 5 6 9 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 通貨計1 5 2 , 0 6 9 . 0 0 1 5 0 , 5 6 9 U S D 回収本口座移動依頼2 , 4 7 0 . 3 8 2 8 7 , 7 7 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 通貨計2 , 4 7 0 . 3 8 2 8 7 , 7 7 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 会社別計4 3 8 , 3 3 9 0 0 0 1 1 4 3 0 A B C D E F - G H Y J P Y 回収本口座移動依頼1 8 , 3 3 0 , 3 0 1 . 0 0 1 8 , 3 3 0 , 3 0 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 通貨計1 8 , 3 3 0 , 3 0 1 . 0 0 1 8 , 3 3 0 , 3 0 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 会社別計1 8 , 3 3 0 , 3 0 1 0 0 0 1 1 5 0 1 A B C D 本社J P Y 回収本口座移動依頼1 , 4 0 0 , 0 0 0 . 0 0 1 , 3 9 5 , 5 0 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 通貨計1 , 4 0 0 , 0 0 0 . 0 0 1 , 3 9 5 , 5 0 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 会社別計1 , 3 9 5 , 5 0 0 帳票N O : A B C D 2 1 2 0 会社別: 0 0 0 5 0 0 0 1 テスト 日付: 2 8 - O C T - 2 0 0 9 1 6 : 3 0 * * * 会社別別当日付替一覧表* * * 頁: 2 回収 会社別通貨支払持込種類外貨金額付替円貨金額 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 0 0 3 3 0 0 0 サンプル社J P Y 回収本口座移動依頼5 , 9 0 0 , 4 8 3 . 0 0 5 , 9 0 0 , 4 8 3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 通貨計5 , 9 0 0 , 4 8 3 . 0 0 5 , 9 0 0 , 4 8 3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 会社別計5 , 9 0 0 , 4 8 3

みんなの回答

回答No.3

Python言語ならこんな感じでしょうか。 (サンプルのテキストファイルを、in.txt とすると、 実行すると、out.csvが出来るしくみです。) Pythonの実行環境をインストールしておく必要があります。 # -*- coding: utf8 -*- st1 = [] st2 = [] f1 = open("in.txt", "r") for line in f1: ____line = unicode(line, "mbcs", "ignore") ____if line.startswith(u"0 0 0"): ________st1.append(line[:16]) ____if line.startswith(u"会社別計"): ________st2.append(line[4:].rstrip("\n")) out = zip(st1, st2) f1.close() f2 = open("out.csv", "w") for item in out: ____f2.write('"' + item[0] + '","' + item[1] + '"\n') f2.close() (____はスペース4つに読み替えてください。)

noname#68570
noname#68570
回答No.2

正規表現を使えるテキストエディタで検索して抜き出してもよいかもしれませんね。 ^000[0-9]+ 等

noname#140971
noname#140971
回答No.1

[イミディエイト] ? GetSuji("会社別: 00050001 テスト 日付: 28 - OCT - 200916 : 30") ? GetSuji("会社別計5,900,483") 5,900,483 ? GetSuji("00033000 サンプル社J P Y 回収本口座移動依頼5,900,483.005,900,483") 00033000 このような GetSuji関数を作成するのが一つの課題。 二つ目の課題は、 Datas()=FileReadArray() N=UBound(Datas()) For I=0 To N   ・・・・ Next I ・・・・ は、 GetSuji関数で数字を抜き出して表示するコード。 このようになろうかと思います。 >どのようなマクロを作成すればいいですか? 以上の全てを書けば、丸投げを容認することになります。 よって、肝心な GetSuji関数のみ。 まあ、酒を飲みながら書きなぐった関数ですので、質問者でバグ取りして下さい。 Public Function GetSuji(ByVal Text As String) As String   Dim F As Integer   Dim G As Integer   Dim I As Integer   Dim L As Integer   Dim C As String   Dim R As String      Text = Replace("|" & Text, " ", "")   L = Len(Text)   G = InStr(1, Text, "|会社別計", vbTextCompare)   F = InStr(1, Text, "|000", vbTextCompare)   If G > 0 Then     F = 0     G = G + 5   Else     F = F + 4   End If   If (F + G) > 0 Then     For I = F + G To L       C = Mid$(Text, I, 1)       If InStr(1, " 0123456789,", C, vbTextCompare) Then         R = R & C       Else         Exit For       End If     Next I   End If   GetSuji = IIf(F > 4, "000", "") & R End Function

関連するQ&A