- ベストアンサー
エクセルで3行を1行に統合する方法
- エクセルでテキスト上で3行に分かれているものを1行に統合する方法をご紹介します。統合したデータをエクセルで加工する際には、各項目をカンマで区切ることができます。
- 加工前のデータは、日付、店名、金額、費目、口座の順に表示されています。加工後のデータでは、これらの項目がカンマで区切られて1行にまとめられます。
- 総データ件数は約500件ありますが、現在の行数は約1500行です。エクセルを使用することで、効率的にデータを統合することができます。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (5)
- imogasi
- ベストアンサー率27% (4737/17069)
VBAになるが、 例データ 下記コードの 「テキスト例3.txt」を、「メモ帳」で見た状態 2016/6/2,コープ○○店 870, 食費,現金 2016/6/4,ショッピングプラザ○○店 2149, 日用雑貨,現金 2016/6/4,コスモ石油販売SS 5094, 交通・通信,現金 ーー なぜか質問例では、ショッピングプラザ○○店のあとにカンマがないが、そのまま採用。 ーー エクセルVBAで標準モジュールに下記を貼り付け。 ファイル名は適宜修正のこと。 Sub test02() Open "テキスト例3.txt" For Input As #1 Open "テキスト例4.csv" For Output As #2 'エクセルで読むにはcsvの方がよかろう i = 0 s = "" Do Until EOF(1) Line Input #1, x i = i + 1 s = s & x If i = 3 Then 'MsgBox s Print #2, s s = "" i = 0 Else If i = 1 Then s = s & "," End If Loop Close #1 Close #2 End Sub 実行後メモ帳で見ると 「テキスト例4.csv」は 2016/6/2,コープ○○店,870,食費,現金 2016/6/4,ショッピングプラザ○○店,2149,日用雑貨,現金 2016/6/4,コスモ石油販売SS,5094,交通・通信,現金 エクセルに読み込ませると5列になる。 ーー 旧Basic時代のコードが使える、簡単なコードで済む。
お礼
これは難しいです。私には無理です。 ありがとうございます。
- M_Sato
- ベストアンサー率54% (550/1003)
sed.exe という、テキスト・ファイルを1行ずつ読み込みながら処理するソフト(ストリーム・エディタといいます)を利用すれば、バッチで簡単に処理できます。 下記サイトから「Sed LOGOS版」をダウンロードし、解凍してください。使用するのはフォルダの中の sed.exe だけなので、これをデータと同じ場所にコピーしてください。 http://www.vector.co.jp/soft/dos/util/se000880.html 以下の内容のバッチ・ファイルを作成し(コピペしてください)、実行してください。data1.txtの内容を読み込み、処理後、data2.txtとして出力します。 (バッチ・ファイルとは、テキスト・ファイルで作成して、拡張子をtxtからbatに代えたものです) sed -e "N;N;s/,*\n/,/g" data1.txt >data2.txt 〔解説〕 -e 実行時のオプションで、直後の記述(引用符でくくられたもの)をコマンドとして解釈します。 ; コマンドの区切り N いまの行の次の行を読み込みこんで、改行をはさんでうしろにつなげます(これを2度行います) s/,*\n/,/g 「カンマ+改行」または「改行」をすべて「カンマ」に置き換えます
お礼
詳しい説明ありがとうございました。
- bunjii
- ベストアンサー率43% (3589/8249)
https://okwave.jp/qa/q9387280.htmlの再質問ですよね? 金額の先頭に有った¥マークを前処理で削除しているようですが残してないと店名と金額の境目が見つかりませんので処理不可能です。 ¥マークが残っていれば"改行マーク+¥マーク"を使って境目が見付かります。 金額と費目の境目は"カンマ+改行"で見つかり、残すべき改行と区別できます。 前処理方法を変更してください。 置換処理には改行コードを含む文字列を扱えるテキストエディターが必要です。 お薦めはフリーソフトの「Terapad」です。
お礼
いろいろなやり方があり必ずしも円マークが必要ではなかったです。 たびたびありがとうございます。
- panacon
- ベストアンサー率31% (214/679)
- chie65536(@chie65535)
- ベストアンサー率44% (8742/19841)
元データを「input.txt」というテキストファイルにしておいて下さい。 以下のマクロを実行すると「output.txt」に加工後のテキストファイルが出来ます。 Sub Macro1() Dim 日付 As String Dim 店名 As String Dim 金額 As Currency Dim ダミー As String Dim 費目 As String Dim 口座 As String Open "input.txt" For Input As #1 Open "output.txt" For Output As #2 Do Until EOF(1) Input #1, 日付, 店名 If EOF(1) Then Exit Do Input #1, 金額, ダミー If EOF(1) Then Exit Do Input #1, 費目, 口座 Print #2, 日付 & "," & 店名 & "," & 金額 & "," & 費目 & "," & 口座 Loop Close #1 Close #2 End Sub 1つだけ注意しておいて欲しいのは「金額の後ろのカンマ」です。 このマクロは、金額の後ろに「必ずカンマがある」と想定しています。 VBAでは 870, とか 2149, とか 5094, の行は「数字項目と、何も無い項目の、2つの項目がある」と判断します。 上記マクロでは、金額の行を読み込む際に Input #1, 金額, ダミー のように「何もない項目」を空読みしてスキップしています。 ですので、テキストファイルの「金額の行」は「金額の後ろに必ずカンマが必要」になっています。 出来上がったテキストファイルの項目が狂っていたり、エラーが出た場合は「金額の後ろのカンマが欠落している行があり、項目がズレた」ので、入力テキストの内容(必要なカンマの欠落)を確認して下さい。
お礼
丁寧な回答ありがとうございました。
お礼
大変うまくでき、感動しました!! ありがとうございます。