• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:テキストファイルの分割 )

テキストファイルの分割方法と注意点

このQ&Aのポイント
  • テキストファイルを特定の要素で分割する方法について解説します。
  • バッチやコマンドプロンプトを使用して、テキストファイルを指定した要素で分割することができます。
  • また、VBAやエクセルを使用しても同様の操作が可能です。注意点として、タブ区切りの場合は特別な処理が必要になることがあります。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

こんばんは。 まぁ何を使っても出来ると思いますが、手っ取り早くエクセル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 マクロを実行する #データのフォーマットはご相談に例示された通りとしていますので、適切に応用してください。

romu-
質問者

お礼

お礼が遅くなり申し訳ありません。 回答ありがとうございます。 マクロまで頂けて非常に助かりました。 また、シンプルで汎用性の高いマクロなので、 他でもぜひ使わせて頂きます。

その他の回答 (3)

  • davidfox
  • ベストアンサー率58% (21/36)
回答No.4

バッチ処理で頑張るならこんな感じですかね。 @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

romu-
質問者

お礼

回答ありがとうございます。 バッチという要望に応えて頂きありがとうございます。 具体的なコマンドも頂けて助かります。 バッチの勉強中なので、勉強にも使わせて頂きます。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 エクセルの関数を使う方法です。  まず、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列に表示されている教科の名称」と同じ名称に変更して下さい。  これで、各教科のシートに、その教科のデータのみが抽出して表示されます。 

romu-
質問者

お礼

回答ありがとうございます。 詳細な説明に画面キャプチャの添付が分りやすく感謝です。 データの整理に非常に役立ちそうな方法なので、ぜひ覚えておきます。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

DOSコマンドを使うなら findstrやfindで検索、というのが楽かも findstr "数学" 入力ファイル > 数学.txt findstr "国語" 入力ファイル > 国語.txt (以下略) みたいなbatファイル作ればいいのでは。 三国語郎さんとかがいると面倒ですけど

romu-
質問者

お礼

回答ありがとうございます。 良いヒントをありがとうございます。 findstrは便利なコマンドですね。覚えておきます。 "数学"、"国語"という文字列を自動で抽出する部分がついていると更に助かるのですが…。

関連するQ&A

専門家に質問してみよう