- ベストアンサー
テキストファイルの分割方法と注意点
- テキストファイルを特定の要素で分割する方法について解説します。
- バッチやコマンドプロンプトを使用して、テキストファイルを指定した要素で分割することができます。
- また、VBAやエクセルを使用しても同様の操作が可能です。注意点として、タブ区切りの場合は特別な処理が必要になることがあります。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 まぁ何を使っても出来ると思いますが、手っ取り早くエクセルVBAで。 手順: 空のブックを用意する ALT+F11でVBE画面を開き 挿入メニューから標準モジュールを挿入し 下記をコピー貼り付ける Sub macro1() Dim myFile As String Dim myPath As String Dim buf As String Dim a As Variant myFile = Application.GetOpenFilename(filefilter:="テキスト (*.txt), *.txt") If myFile = "False" Then Exit Sub myPath = Left(myFile, InStrRev(myFile, "\")) Open myFile For Input As #1 Line Input #1, buf Do Until EOF(1) Line Input #1, buf a = Split(buf, vbTab) Open myPath & a(1) & ".txt" For Append As #2 Print #2, buf Close #2 Loop Close #1 End Sub マクロを実行する #データのフォーマットはご相談に例示された通りとしていますので、適切に応用してください。
その他の回答 (3)
- davidfox
- ベストアンサー率58% (21/36)
バッチ処理で頑張るならこんな感じですかね。 @echo off if exist $1 del $1 for /F "skip=1 tokens=1-3" %%i in (元のテキストファイル) do @echo %%j %%k %%i >>$1 sort < $1 > $2 set subject= for /F "tokens=1-3" %%i in ($2) do call :output %%i %%j %%k del $1 del $2 exit /b :output if "%subject%"=="" goto newfile if "%subject%"=="%1" ( >>%1.txt echo %3 %1 %2 ) else ( :newfile set subject=%1 >%1.txt echo %3 %1 %2 ) exit /b
お礼
回答ありがとうございます。 バッチという要望に応えて頂きありがとうございます。 具体的なコマンドも頂けて助かります。 バッチの勉強中なので、勉強にも使わせて頂きます。
- kagakusuki
- ベストアンサー率51% (2610/5101)
エクセルの関数を使う方法です。 まず、Sheet1、Sheet2、Sheet3という3枚のシートからなるExcelブックを作成し、そのExcelブックを、一旦、保存して下さい。 次に、タブで区切られている元のテキストデータの全てをコピーして、Sheet1の左上隅に貼り付けて下さい。 すると、 A列 B列 C列 1行目 氏名 教科 点数 2行目 Aさん 数学 80点 3行目 Bさん 数学 90点 4行目 Cさん 国語 90点 5行目 Dさん 数学 80点 の様な形にデータが並ぶ筈です。 次に、Sheet2のA2セルに次の関数を入力して下さい。 =IF(INDEX(Sheet1!$B:$B,ROW())="","",INDEX(Sheet1!$B:$B,ROW())&"#"&COUNTIF(Sheet1!$B$1:INDEX(Sheet1!$B:$B,ROW()),INDEX(Sheet1!$B:$B,ROW()))) 次に、Sheet2のA2セルをコピーして、A3以下に(Sheet1のデータが入力されている行数を上回るのに十分な行数となるまで)貼り付けて下さい。 次に、Sheet3のA1セルに「氏名」、B1セルに「教科」、C1セルに「点数」と入力して下さい。 次に、Sheet3のA2セルに次の関数を入力して下さい。 =IF(ROWS($2:2)>COUNTIF(Sheet2!$A:$A,REPLACE(CELL("filename",A2),1,FIND("]",CELL("filename",A2)),)&"#*"),"",INDEX(Sheet1!A:A,MATCH(REPLACE(CELL("filename",A2),1,FIND("]",CELL("filename",A2)),)&"#"&ROWS($2:2),Sheet2!$A:$A,0))) 次に、Sheet3のA2セルをコピーして、Sheet3のA2~C2の範囲に貼り付けて下さい。 次に、Sheet3のA2~C2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。 次に、Sheet3を雛型として、そのコピーシートを教科の数だけ作成し、各コピーシートのシート名を「数学」や「国語」といった「Sheet1のB列に表示されている教科の名称」と同じ名称に変更して下さい。 これで、各教科のシートに、その教科のデータのみが抽出して表示されます。
お礼
回答ありがとうございます。 詳細な説明に画面キャプチャの添付が分りやすく感謝です。 データの整理に非常に役立ちそうな方法なので、ぜひ覚えておきます。
- kmee
- ベストアンサー率55% (1857/3366)
DOSコマンドを使うなら findstrやfindで検索、というのが楽かも findstr "数学" 入力ファイル > 数学.txt findstr "国語" 入力ファイル > 国語.txt (以下略) みたいなbatファイル作ればいいのでは。 三国語郎さんとかがいると面倒ですけど
お礼
回答ありがとうございます。 良いヒントをありがとうございます。 findstrは便利なコマンドですね。覚えておきます。 "数学"、"国語"という文字列を自動で抽出する部分がついていると更に助かるのですが…。
お礼
お礼が遅くなり申し訳ありません。 回答ありがとうございます。 マクロまで頂けて非常に助かりました。 また、シンプルで汎用性の高いマクロなので、 他でもぜひ使わせて頂きます。