Excel VBA テキストファイルからの抽出方法

このQ&Aのポイント
  • Excel VBAを使用して、テキストファイルから特定の文字列を選択し、エクセルファイルのテキストボックスに貼り付ける方法を教えてください。
  • Windows7 ProおよびExcel2010での環境下で、テキストファイルからのデータ抽出に関する質問です。
  • FILE-CONTROLとDATA DIVISIONの間に挟まれた行の抽出ロジックを作成する方法を教えてください。テキストボックスへの貼り付け処理は別途行います。
回答を見る
  • ベストアンサー

Excel VBA テキストファイルからの抽出

Excel VBAにて、テキストファイルから文字列を選別して、それをエクセルファイルのテキストボックスに張り付けるコードの記述をご教授いただけますでしょうか。 環境はWindows7 Pro Excel2010 下記テキストファイルです。 test.txt IDENTIFICATION DIVISION. PROGRAM-ID. sample AUTHOR. XXX * ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT A ASSIGN TO B SELECT C ASSIGN TO D DATA DIVISION. FILE SERECTION. この FILE-CONTROL.と DATA DIVISIONの間に挟まれている SELECT A ASSIGN TO B SELECT C ASSIGN TO D この2行を取り出して、エクセルファイル上にあるテキストボックス張り付ける処理です。 よって、FILE-CONTROL.と DATA DIVISION.の間にある不特定多数の行を抽出するロジックです。 テキストボックスに張り付ける前の行を抽出するだけでも、ご教授頂けたら幸いです。 よろしくお願いします。

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

  • ベストアンサー
回答No.1

こんにちは。 ANSIテキストだと仮定して、基本通りの書き方です。 もし、テストしてうまく行かない場合は、 望んだ結果とどう違うかの説明と合わせて、 フォルダ名、テキストボックス名(シート名?)、 文字コード、などを詳しく補足してください。 Sub Re8938350() Const SLF = vbLf ' 改行文字を指定 Dim sFile As String ' ファイルパス Dim sTemp As String ' 1行ずつ読み込み Dim sBuf As String ' バッファ Dim nFree As Integer ' 空き番号ファイル番号 Dim flg As Boolean ' 抜出し開始   sFile = "test.txt" ' ファイルパス(必要ならフォルダパスも指定!!)   nFree = FreeFile ' 空き番号ファイル番号   Open sFile For Input As #nFree ' .txtを読み込み用に開く     Do Until EOF(nFree) ' .txtの終端まで読み込めるようにループを仮設定       Line Input #nFree, sTemp ' 1行ずつ読み込む       If flg Then ' 抜出し開始フラグがTrueなら         If sTemp Like "DATA DIVISION." Then Exit Do ' 抜き台終了条件でループを抜ける         sBuf = sBuf & SLF & Trim$(sTemp) ' バッファの終端に改行と1行分のテキストを追加       Else ' 抜出し開始フラグがFalseなら         flg = (sTemp Like "FILE-CONTROL.") ' 抜き台開始条件 フラグをTrueに       End If     Loop   Close #nFree   sBuf = ""   sBuf = Mid$(sBuf, Len(SLF) + 1) ' 先頭の改行を削除   If Len(sBuf) Then ' バッファが空でなければ     Sheets("Sheet1").TextBox1.Text = sBuf ' "エクセルファイルのテキストボックスに" ?   ' ' ↑テキストボックスの↑オブジェクト名(親オブジェクト)を正しく指定   End If End Sub

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

コボル.txtというテキストファイルがあるとして 標準モジュールに Sub test01() Open "C:\Users\XXXXXXX¥コボル.txt" For Input As #1 i = 2 'Sheet1のA列2 行目より書き出し Do While Not EOF(1) Line Input #1, txt '1行読み '--FILE-CONTROL行が出現か p = InStr(txt, "FILE-CONTROL") If p <> 0 Then fnd = "Y" GoTo p1 End If '---DATA DIVISION行が出現かー>処理終了 p = InStr(txt, "DATA DIVISION") If p <> 0 Then GoTo end1 '以下のレコード行は処理打ち切り '--Shee1へ書き出し If fnd = "Y" Then Worksheets("Sheet1").Range("A" & i) = txt i = i + 1 End If p1: Loop '次行にあたるレコードへ '-- end1: MsgBox "処理終了" Close #1 End Sub ーーーー 実行して Sheet1のA列 SELECT A ASSIGN TO B SELECT C ASSIGN TO D ・・・ このロジックで抽出に漏れは起こりますか? 四十年も前にコボルを離れたので、SECTION、DIVISIONとかの構成関係を忘れた。 またBasic時代(Visualがつかない)の書き方ですが、VBAはVB6相当なので、まだ使えるようだ。 >テキストボックス張り付ける処理 は質問者がやってみて。 ーー 色んなロジックはあろうが、テキストボックスでは検索は1行ずつ読む上記のようなことにならざるを得ないと思う。 そう頻出するパターンでもなく、力ずくでもやる、ロジックの勉強が肝心。

回答No.2

#1です。訂正です。 すみません。デバッグ用に書いた余分な記述を消し忘れていました。 #1のままでは、何も結果が返りませんでした。   sBuf = "" の1行を削除(トルツメ)してください。 ついでに、書き忘れていたことですが、 (本題とは無関係ですが、動作確認には影響する事柄として) 「テキストボックス」というのが、 シート上に配置するActiveXコントロールの[テキスト ボックス] または ユーザーフォームの[テキスト ボックス] の何れかである場合は、 [テキスト ボックス]のプロパティ .MultiLine を True にしておかないと改行を表示することは出来ませんので、 確認してください。 訂正、追記、以上です。失礼しました。

関連するQ&A

  • VBAでテキストファイルからの特定行抽出

    エクセルのVBAで、テキストファイルから、特定の文字を含まない行だけを、別のテキストファイルに取り出す方法を教えてください。 具体的には、元のテキストファイルの中から、「.png」と、「.jpg」を含まない行を取り出して、別のテキストファイルに書き出したい。 元のテキストファイルは、エクセルでそのまま読み込むにはデータが大きすぎてエラーになってしまうので、、VBAで不要なデータを取り除いて、ファイルを小さくしていって、エクセルで扱える大きさにしていこうと思っています。 どなたかおわかりになる方がいらっしゃいましたら、どうぞよろしくお願いいたします。

  • VBAでテキストファイルのデータを読み込んでExcelで開く+α

    テキストファイルをExcelファイルとして読み込む事が多く、その量に加えデータの並び方が特殊な為困っております。 テキストファイルのデータの並びをExcelで上下逆順に読み込ませるにはどのようにすればいいでしょうか? また、まとめて複数のテキストファイルを上記の状態で自動的にシートごとに分けて出力させたりしたいのですが。 (例-1行目は無視) ---テキストデータ(タブ区切り)--- 0 0 10 02 11 05 02 15 01 20 25 12 15 10 ---Excelシートデータ--- 0 0 12 15 10 01 20 25 05 02 15 10 02 11

  • VBAで複数行を抽出する

    以下のようなテキストファイルがあり、「d:\common\東京」が含まれる行から、「d:\」が含まれる行の一行前までを抽出したいと思ってます。 VBAでどのように作成すればよいのでしょうか。 file.txt ========================== d:\common\北海道\ファイル1.txt        Domain\Administrator:F BUILTIN\Administrators:F Everyone:F BUILTIN\Users:R d:\common\東京\ファイル2.txt      Domain\Administrator:F BUILTIN\Administrators:F Everyone:F NT AUTHORITY\SYSTEM:F BUILTIN\Users:R DOmain\Domain Users:(特殊なアクセス:) DELETE READ_CONTROL WRITE_OWNER  ・  ・  ・ ========================== 以下のように抽出できればと思っております。 抽出結果.txt ========================== d:\common\東京\ファイル2.txt      Domain\Administrator:F BUILTIN\Administrators:F Everyone:F NT AUTHORITY\SYSTEM:F BUILTIN\Users:R DOmain\Domain Users:(特殊なアクセス:) DELETE READ_CONTROL WRITE_OWNER SYNCHRONIZE FILE_GENERIC_READ FILE_GENERIC_WRITE FILE_GENERIC_EXECUTE FILE_READ_DATA FILE_WRITE_DATA FILE_APPEND_DATA FILE_READ_EA FILE_WRITE_EA FILE_EXECUTE ========================== 宜しくお願いします。

  • テキストファイルをエクセルに取り込みたい

    大量のテキストファイルから必要なデータを抽出し、エクセルに貼り付けたいのですが、何か良いフリーソフトを御存知でしたら紹介して下さい。 ○テキストからデータを抽出(抽出キーワード30個程度) ○抽出したデータをcsvに適したように自由にカンマで区切る ○抽出されたデータをcsvまたはxls方式で書き出し 以上の機能がほしいのです。 よろしくお願いします。

  • EXCEL VBAでクエリーを使用した抽出方法

    EXCEL VBAでクエリーを使用しデータを抽出する命令で困っています。 原始データ:CSVファイル (カンマ区切り) 項目の中に日付の入った項目があり指定した1日だけの抽出はうまくいきますが、 期間を指定(複数日)した場合にエラーとなってしまいます。 1日だけを指定した場合の命令(うまくいく) 日付という項目には数値タイプのデータが入っている hizukeという変数にテキストボックスの値を代入する hizuke = TEXTBOX日付1.Value SELECT * FROM ファイル名 WHERE 日付 LIKE '%" & hizuke1 & "%' " ※ ここでワイルドカード(%)を使わないとエラーとなってしまいますが・・・ 期間指定をした場合の命令(エラーとなる) 日付という項目には数値タイプのデータが入っている hizuke1という変数にテキストボックスの値を代入する hizuke2という変数にテキストボックスの値を代入する hizuke1 = TEXTBOX日付1.Value hizuke2 = TEXTBOX日付2.Value SELECT * FROM ファイル名 WHERE 日付 BETWEEN LIKE '%" & hizuke1 & "%' AND LIKE '%" & hizuke2 & "%' " この命令が正しいとは思いませんが、要はワイルドカードと演算子(BETWEEN)を併用したい訳です。 この考え方以外で期間指定のデータ抽出ができるのであればその方法を教えて下さい。 以上、よろしくお願いします。

  • テキストファイルからの抽出

    VBAでもコマンドプロンプトでもいいのですが、1000行くらいあるテキストファイルを読み込んで、キーワード「タイムアウト」を含む行の1つ手前の行の文字列を抽出、それらを1つのファイルにまとめて出力させたいのです。 VBAで自分なりにやってみたのが http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12142881517 の最後の回答にあるマクロに手を少し加えて「タイムアウト」のある行番号をテキストファイルに出力し、その出力ファイルを読み込んで、一つ手前の行番号のリストを作ることまではできました。 ですが、どうやってそのリストから行番号を指定して、元のファイルからタイムアウトを含む行の1つ手前の行を抽出し、1つのファイルにまとめて出力させられるのかが分かりません。 後Powershellはまだ勉強途中なのですが、こっちでならできますか? アドバイスをお願いします。

  • テキストファイル→抽出した行をexcelに

    VBAで、下記のようなログファイルのテキストを読み込んで、必要な文字が含まれる行だけを、エクセルに書き込むコードを教えていただけると助かります。 読み込むファイルの例(実際は、数万行あります) (1行目)dammy.co.jp - - [01/Jan/2015:00:03:51 +0900] "GET /west/index.html      HTTP/1.0" 200 ..... (2行目)smotor.co.jp - - [01/Jan/2015:00:03:51        +0900] "GET /drink/orange/index.html HTTP/1.0" 200 ..... たとえば、/west/ が含まれる行だけを抽出して、excelシートに書き込みたい ログファイルは、改行コードがCRLFです。  どなたかお分かりになる方、お助けください。 当方、VBAは初心者なので、説明も加えていただけると非常に助かります。

  • VBAで複数ファイルからのデータ抽出を行いたい。

    すみません、知恵をお貸しください。 VBA初心者です。 一つの同じフォルダ内にあるエクセルの同じ形式の複数ファイル(*.xls)から、データを抽出し(例.A2:k2)一つのファイルを作成したいのですが、どうにか一行目だけを抽出することができました。 しかし、データ抽出をしたい複数ファイルの中には(A2:k2)だけではなく、複数行に渡りデータが入っているもの(A3:k3まで、やA5:k5までなど)があり、それら全てを抽出したいのです。 何らかの条件付けの上でループをさせればいいのかな?とも考えたのですが、うまくいきません。 どうかご教授お願いします。

  • データのテキストファイル抽出

    データの抽出に困っています。 エクセルデータにてA~Lのフィールドに値が入っていて、1000レコード程のデータを ・1レコードずつ ・A列のフィールドをファイル名に ・テキストファイルに出力 ・テキストファイルには1レコードを縦に、フィールドごと改行して並べる 上記のようにして作成する必要があります。 今までは、 A B C...K L となっているデータの列と行を入れ替えて A B C . . K L としてテキストファイルを作成し、セルAのフィールドをファイル名にして、 手作業で1列ごとにコピー&ペーストして行っていました。 非常に効率が悪いので、全自動化もしくは一部自動化出来ないかと試行錯誤していますが 良い方法が見つけられません。 何か良い方法をご存知の方がおりましたら教えて下さい。

  • VBAでテキストファイルをEXCELに取り込む方法

    VBA初心者です。下記の要件の動きについてどう組めば良いのかほぼ???の為、どなたか回答よろしくお願いします。 ・インポート時はテキストを毎回選択する。←これは何とか実装できています。 ・インポートされたテキストファイルは「テキストファイル名」で別作成する。このインポート先Excelファイルには項目は定型で作成されており、行途中から、データの貼り付けを行いたい。 ・このExcelファイルには罫線を挿入したい。 以上です。何だか詳しい内容がかけなくてゴメンナサイ!

専門家に質問してみよう