- 締切済み
テキストからのデータ取得方法
教えてください。 下記のサンプルのテキストファイルからデータを取得し、エクセルファイルに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
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- copymaster
- ベストアンサー率81% (83/102)
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つに読み替えてください。)
正規表現を使えるテキストエディタで検索して抜き出してもよいかもしれませんね。 ^000[0-9]+ 等
[イミディエイト] ? 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