Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3483 / 13645 ツリー ←次へ | 前へ→

【61837】テキストファイルの読み出し 初心者です。 09/6/9(火) 11:22 質問[未読]
【61848】Re:テキストファイルの読み出し イブX 09/6/9(火) 13:14 発言[未読]
【61916】Re:テキストファイルの読み出し 始めたばかりの初心者 09/6/12(金) 3:25 発言[未読]
【61928】Re:テキストファイルの読み出し 初心者です。 09/6/12(金) 13:48 質問[未読]
【61929】Re:テキストファイルの読み出し Yuki 09/6/12(金) 15:02 発言[未読]
【61933】Re:テキストファイルの読み出し kanabun 09/6/12(金) 17:00 発言[未読]

【61837】テキストファイルの読み出し
質問  初心者です。  - 09/6/9(火) 11:22 -

引用なし
パスワード
   初めて投稿します。

現在、仕事に役立つと思いVBAにチャレンジしているのですが、
直近で時間短縮の為に必要となり、投稿させて頂きました。

内容は、
あるフォルダ内にあるテキストファイル(100個くらい)内のデータを
エクセルに読み出していくというかたちになり、現在ファイルの読み
出し方法もままならない状態ですのでご教授願いたいです。。。

テキストの内容としては
|-----------------------------------------------|
|***********不要な行***********         |
|        |                |
|       10行               |
|        |                 |
|***********不要な行***********         |
|                        |
|項目名 必要データ 必要データ 必要データ   |
|        |                |
|       20行               |
|        |                |
|項目名 必要データ 必要データ 必要データ   |
|***********不要な行***********         |
|        |                |
|       10行               |
|        |                 |
|***********不要な行***********         |
|-----------------------------------------------|

エクセルへ読み出した後の形式としては

|読み出したファイル名 項目名 必要データ 必要データ 必要データ   |
|                   |                |
|                  20行               |
|                   |                |
|読み出したファイル名 項目名 必要データ 必要データ 必要データ   |
            ↓下に続く

尚各データ間はスペースで区切ってあり、必要データは全て5個になります。

よろしくお願いできればと・・・

【61848】Re:テキストファイルの読み出し
発言  イブX  - 09/6/9(火) 13:14 -

引用なし
パスワード
   Line Input
で、検索されてみてはどうでしょうか?

【61916】Re:テキストファイルの読み出し
発言  始めたばかりの初心者  - 09/6/12(金) 3:25 -

引用なし
パスワード
    自分も始めたばかりの初心者なのですが、テキストファイルは全て、最初と最後の10行が不要データで、必要なデータは11〜30行の固定なのでしょうか。
  

【61928】Re:テキストファイルの読み出し
質問  初心者です。  - 09/6/12(金) 13:48 -

引用なし
パスワード
   ▼始めたばかりの初心者 さん:
> 自分も始めたばかりの初心者なのですが、テキストファイルは全て、最初と最後の10行が不要データで、必要なデータは11〜30行の固定なのでしょうか。
>  
⇒再確認したところ、正確には11〜32行目で固定になります。

【61929】Re:テキストファイルの読み出し
発言  Yuki  - 09/6/12(金) 15:02 -

引用なし
パスワード
   ▼初心者です。 さん:
>⇒再確認したところ、正確には11〜32行目で固定になります。

こんにちは。
何通りかありますけどその内の一つで

Sub TEST2()
  Dim IO1   As Integer
  Dim IO2   As Integer
  Dim strDir As String
  Dim strFnm As String
  Dim expFnm As String
  Dim i    As Long
  Dim v    As Variant
  
  strDir = "D:\TEXT\"   ' 格納されているホルダー
  expFnm = "Save1.csv"   ' 出力用のファイル名
  
  strFnm = "*.txt"     ' 読込み用のファイルの拡張子
  strFnm = Dir(strDir & strFnm)
  IO1 = FreeFile
  Open strDir & expFnm For Output As #IO1 ' 出力用のファイルOpen
  
  Do While strFnm <> ""
    IO2 = FreeFile
    Open strDir & strFnm For Input As #IO2 ' 読込用のファイルOpen
      For i = 1 To 10
        Line Input #IO2, v  ' 最初の10行を読み飛ばし
      Next
      i = 0
      Do While Not EOF(IO2)
        i = i + 1
        If i > 22 Then Exit Do ' 33 行目になったら抜ける
        Line Input #IO2, v
        v = strFnm & " " & v  ' ファイル名をDataにくっつける
        v = Split(v)
        Print #IO1, Join(v, ",") ' CSV形式で書込み
      Loop
    Close #IO2  ' 読込用のファイルClose
    strFnm = Dir()
  Loop
  Print #IO1, vbCrLf
  Close #IO1 ' 出力用のファイルClose
  Workbooks.Open strDir & expFnm ' 編集したファイルを開く
End Sub

【61933】Re:テキストファイルの読み出し
発言  kanabun  - 09/6/12(金) 17:00 -

引用なし
パスワード
   ▼初心者です。 さん:

>尚各データ間はスペースで区切ってあり、必要データは全て5個になります。

配列に読み込んで、最後にまとめて新規Excel Bookに貼り付けてみました。
(なお、読み込む行数は 決め打ちしてあります)

Sub Try1()
  Dim myFiles, f
  Dim fCount As Long, n As Long
  myFiles = Application.GetOpenFilename( _
    "スペース区切りテキスト,*.txt", MultiSelect:=True)
  If VarType(myFiles) = vbBoolean Then Exit Sub
  
  fCount = UBound(myFiles)
  Dim buf() As Byte
  ReDim data(1 To fCount * (32 - 11 + 1), 5)
  Dim Lines() As String
  Dim io As Integer
  io = FreeFile()
  For Each f In myFiles
    Open f For Binary As io
     ReDim buf(1 To LOF(io))
     Get #io, , buf
    Close io
    Lines = Split(StrConv(buf, vbUnicode), vbCrLf)
    配列に転記 f, Lines(), 11, 32, data(), n
  Next
  Workbooks.Add(6).Worksheets(1).Range("A1").Resize(n, 6).Value = data
End Sub

Private Sub 配列に転記(f, Lines() As String, _
    Lstart As Long, Lend As Long, data(), n As Long)
  Dim i&, j&, v
  Lstart = Lstart - 1
  Lend = Lend - 1
  If UBound(Lines) < Lend Then Lend = UBound(Lines)
  If Lend < Lstart Then Exit Sub
  For i = Lstart To Lend
    n = n + 1
    If i = Lstart Then data(n, 0) = Dir(f)
    ' 各データ間はスペースで区切ってあり、 _
     必要データは全て5個になります。
    v = Split(Lines(i), " ")
    For j = 1 To 5
      data(n, j) = v(j - 1)
    Next
  Next
End Sub

3483 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free