- ベストアンサー
MS Office Excel 2003でテキストデータファイルを読み込む方法
- MS Office Excel 2003でテキストデータファイルを読み込む方法を紹介します。
- テキストデータファイルをExcelに読み込む手順として、セルにファイル名を入力し、データを転記する方法を説明します。
- また、他のファイルを読み込む際にはセルに新しいファイル名を入力することで切り替えることができます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
主目的となる テキストファイル1ファイル固定で指定しセルへ設定させるサンプルです ’はコメント行の意 できるだけ簡単なコマンドで作成してます。体裁悪い分はご了承願います。 基本的な動きが分かればいろいろな場面で使えると思います。 応用で、こういうのに追加機能としてファイル選択ダイアログ表示とかできます。 参考にどうぞ。 Sub VBATEXT() Dim inFilePathName As String * 256 Dim WK_ROW As Long Dim WK_READ_DATA As String '「結果」シートに結果を残す Sheets("結果").Select Range("A1").Select '最初に処理するのは1行目 WKROW = 1 '入力するファイル名は・・"C:\1111.TXT" inFilePathName = "C:\1111.TXT" Open inFilePathName For Input As #1 'イメージ 'A列 B列 C列 D列 E列 F列 'AAAA/AA/AABBBBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFFFF 'AAAA/AA/AABBBBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFFFF 'AAAA/AA/AABBBBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFFFFF '1行目各A列~E列にタイトルを設定します。Cells(行, 列) Cells(WKROW, 1) = "A列" Cells(WKROW, 2) = "B列" Cells(WKROW, 3) = "C列" Cells(WKROW, 4) = "D列" Cells(WKROW, 5) = "E列" Cells(WKROW, 6) = "F列" '1行ずつ読み込んで終わり(EOF)になるまで続ける。DO~LOOP Do Until EOF(1) ' 1行ずつ読み込んでWK_READ_DATAに格納 Line Input #1, WK_READ_DATA ' 処理する行を1つずつUP WKROW = WKROW + 1 ' WK_READ_DATAの一部分をセルの値とします。 Mid(文字列, 開始位置, 長さ) Cells(WKROW, 1) = Mid(WK_READ_DATA, 1, 10) Cells(WKROW, 2) = Mid(WK_READ_DATA, 11, 10) Cells(WKROW, 3) = Mid(WK_READ_DATA, 21, 8) Cells(WKROW, 4) = Mid(WK_READ_DATA, 29, 8) Cells(WKROW, 5) = Mid(WK_READ_DATA, 37, 8) Cells(WKROW, 6) = Mid(WK_READ_DATA, 45, 11) Loop Close #1 'ファイル1つ分が終わりCLOSE Range("A1").Select MsgBox ("終了") End Sub よく使うところを提供します。実現に近いことは記載あります。 すぐに役立つエクセルVBAマクロ集 http://www.asahi-net.or.jp/~zn3y-ngi/ EXCELでお仕事 http://www.asahi-net.or.jp/~ef2o-inue/menu/menu01.html そのまますぐ使える回答が欲しい場合は、 すみませんが、ほかの方のを使ってしてください。
その他の回答 (3)
- layy
- ベストアンサー率23% (292/1222)
参考になるサイトです。 『すぐに役立つエクセルVBAマクロ集』というサイト ブックシート関係やFAQも見ておくと良いです。
- layy
- ベストアンサー率23% (292/1222)
VBA(マクロ)で可能になります。 VBA(マクロ)についてまとめてあるサイト等で予習しておいてください。 よく使うところを提供します。 EXCELでお仕事 http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_200.html 『マクロを「書いてみた」「動かした」「ダメでした」』 では上達しませんし、説明やコメントもない回答例をそのまま使うと あとで再度追加質問になったりして苦労します。 対応例を考えるにあたり2点教えてください。 1)各ファイルのA列とB列の間は半角空白が並んでいるのでしょうか。 (以降右列も同じく) 2)1つ目のファイルを取得したあと2つ目はどうしますか。 フォルダ内テキストをすべて同じブックにシートごとにまとめて格納させることも可能です。 イメージでは、 A1にファイル名(フォルダ名?)を記載 →マクロを実行 →(マクロにて) ファイルを1行ずつ読み込み、 空白があるまでを判定し1つのセルとみなす、順次セルへ配置させる、 ファイルにレコードが無くなるまで繰り返し →(マクロ終了) →次のファイルの繰り返し 別途ACCESSがあれば ACCESSでデータインポートしてテーブルへ格納し そこからEXCELへエクスポートという手もあります。 ACCESSがあればこっちのがウィザード従えるので分かりやすいかも しれません。
補足
早速のご回答ありがとうございます。 不明点下記に記しました。 よろしくお願いします。 1)各ファイルのA列とB列の間は半角空白が並んでいるのでしょうか。 (以降右列も同じく) →はい。半角空白が並んでいます。 2)1つ目のファイルを取得したあと2つ目はどうしますか。 →フォルダ内テキストをすべて同じブックにシートごとにまとめて格納させたいです。 会社PCのためACCESSは入っておらず、EXCELとなってしまいます。
- keithin
- ベストアンサー率66% (5278/7941)
ツールメニューのマクロのセキュリティを中にしてエクセルを再起動する データを転記したいエクセルを開く 当該のシートのシート名タブを右クリックして,コードの表示を選ぶ 現れたシートに下記をコピー貼り付ける private sub Worksheet_Change(byval Target as excel.range) if target.address <>"$A$1" then exit sub if target = "" then exit sub dim myPath as string dim buf as string dim a dim n dim i myPath = "C:\test\" ’←テキストファイルを入れたフォルダのパスを正しく記入 if dir(mypath & target.text & ".txt") = "" then msgbox target & ".txt is not found" exit sub end if application.screenupdating = false application.enableevents = false range("A2:A" & application.max(2, range("A65536").end(xlup).row)).entirerow.delete shift:=xlshiftup n = freefile open mypath & target.text & ".txt" for input as #n line input #n, buf line input #n, buf i = 1 do until eof(n) line input #n, buf a = split(application.trim(buf), " ") i = i + 1 cells(i, "A") = a(0) cells(i, "B") = a(4) loop close #n application.enableevents = true application.screenupdating = true end sub ファイルメニューから終了してエクセルに戻る A1セルにファイル名(拡張子無し)を記入する。
お礼
お礼遅れ大変失礼致しましたm(__)m