こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

MS Office Excel 2003でテキストデータファイルを読み

MS Office Excel 2003でテキストデータファイルを読み込む方法

1111.txt
2222.txt
3333.txt
というテキストデータファイルがあり、中身は添付画像の様になっています。
(テキストファイルは同じフォルダに格納されています)


このテキストデータをExcelに読み込みたいのですが、以下の様な動作をして欲しいと思っています。

(1)セルA1にテキストデータファイルのファイル名(拡張子は省く)を入れる
(2)セルA2から下に、添付ファイルのA列のデータが入り、セルB2から下にE列のデータが入る

(3)セルA1に別のファイル名を入れると、そのファイルのテキストデータに切り替わる


このような事は可能なのでしょうか?
もし可能であれば教えて下さい。
よろしくお願いします。

投稿日時 - 2010-05-30 22:47:42

QNo.5933614

困ってます

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

主目的となる
テキストファイル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

そのまますぐ使える回答が欲しい場合は、
すみませんが、ほかの方のを使ってしてください。

投稿日時 - 2010-05-31 21:34:23

お礼

お礼遅れ大変失礼致しましたm(__)m

投稿日時 - 2011-02-07 18:16:33

ANo.4

このQ&Aは役に立ちましたか?

13人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(4)

ANo.3

参考になるサイトです。

『すぐに役立つエクセルVBAマクロ集』というサイト

ブックシート関係やFAQも見ておくと良いです。

投稿日時 - 2010-05-31 16:02:42

ANo.2

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があればこっちのがウィザード従えるので分かりやすいかも
しれません。

投稿日時 - 2010-05-30 23:31:03

補足

早速のご回答ありがとうございます。
不明点下記に記しました。
よろしくお願いします。


1)各ファイルのA列とB列の間は半角空白が並んでいるのでしょうか。
(以降右列も同じく)
→はい。半角空白が並んでいます。


2)1つ目のファイルを取得したあと2つ目はどうしますか。
→フォルダ内テキストをすべて同じブックにシートごとにまとめて格納させたいです。



会社PCのためACCESSは入っておらず、EXCELとなってしまいます。

投稿日時 - 2010-05-31 19:49:09

ANo.1

ツールメニューのマクロのセキュリティを中にしてエクセルを再起動する
データを転記したいエクセルを開く
当該のシートのシート名タブを右クリックして,コードの表示を選ぶ
現れたシートに下記をコピー貼り付ける

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セルにファイル名(拡張子無し)を記入する。

投稿日時 - 2010-05-30 23:18:17

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-