[[20180713150303]] 『特定の列を抽出したい』(Steve) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『特定の列を抽出したい』(Steve)

複数のテキストファイルの3行目を抽出して、一つのファイルに並べたいと思っています。すべてのテキストファイルはまったく同じフォーマットで、行、列の数は同じで欠測値もありません。もしご存知の方がいらしたら、教えてください。

< 使用 Excel:Excel2013、使用 OS:Windows8 >


どういうフォーマットなのか説明が欲しいです。 横何列くらいで、区切り文字は何なのか、とか。 出力先は1つのファイル、との事ですが、それはExcelブック上のシートの事でしょうか? ファイルと言われると、読み込むのも出力するのもテキストファイルなのか?、と考えてしまいます。

そして、3行目というのは、本当に3行目ですか? 3列目の間違いだったりしませんか? 3行目だけ得たいならば、シーケンシャルファイルとして開いて、2行カラ読みした後の1行を得るだけであり、人に尋ねるほどの内容ではないと思うのですが。 1行読み込んだならば、後はSplit関数を使って、区切り文字で分ければ良いだけです。
(???) 2018/07/13(金) 15:28


失礼しました。
テキストファイル(.txt)はタブ切りで、一番上の行はヘッダで、15(列)x2001(行)です。テキストファイルは全部で200あります。それぞれのテキストファイルの3列目(こちらも失礼しました)を抽出して、エクセルブック上のシートに並べ、200(列)x2000(行)のファイルを作りたいのです。初心者です。よろしくお願いします。
(Steve) 2018/07/13(金) 16:10

解決策ではないのですが、質問です。
テキストファイルの名前に統一性はありますか?
また、すべてのテキストファイルは同じフォルダに入っていますか?
抽出したデータはどのテキストファイルから抽出したかの記載はなくていいのでしょうか?
(綾) 2018/07/13(金) 16:14

ご質問ありがとうございます。
テキストファイルの名前は統一性といえるかわかりませんが、検査名_条件名_年月日、のようになっています。ファイルは同じフォルダに入っています。抽出したデータをまとめたファイルのヘッダがファイル名になれば助かりますが、名前を入れ替える予定なのでファイルの順番どおりにカラムが抽出されていれば十分だと思っています。
(Steve) 2018/07/13(金) 16:56

ファイルの順番は、Dir関数では判りません。 OSのファイル格納の仕組み自体がそのようになっているからです。(初めは入れた順番通り取り出せますが、そのうち途中抜けたところを使ったりするので、バラバラになっていきます) なので、文字列としてソートかけてみました。 年月日に前ゼロがついていれば理想ですが、とにかく同じ検査名が並ぶことになるはず。
(長々とコーディングしたくないので、小技使って横着しています)

 Sub test()
    Const cPATH = "C:\tmp\test\"
    Dim AR As Object
    Dim DIC As Object
    Dim wk As Worksheet
    Dim cFile As String
    Dim i As Long
    Dim iC As Long

    Application.ScreenUpdating = False
    Application.ShowWindowsInTaskbar = False

    Set AR = CreateObject("System.Collections.ArrayList")
    Set DIC = CreateObject("Scripting.Dictionary")
    Set wk = Sheets("Sheet1")

    cFile = Dir(cPATH & "*.txt")
    While cFile <> ""
        AR.Add cFile
        cFile = Dir
    Wend
    AR.Sort
    For i = 0 To AR.Count - 1
        DIC.Add AR(i), i + 1
        wk.Cells(1, i + 1).Value = AR(i)
    Next i
    Set AR = Nothing

    cFile = Dir(cPATH & "*.txt")
    While cFile <> ""
        iC = DIC(cFile)
        With Workbooks.Open(cPATH & cFile)
            With .Sheets(1)
                .Range("C2", .Cells(.Rows.Count, "C").End(xlUp)).Copy wk.Cells(2, iC)
            End With
            .Close False
        End With
        cFile = Dir
    Wend

    Application.ShowWindowsInTaskbar = True
    Application.ScreenUpdating = True
    Set DIC = Nothing
 End Sub
(???) 2018/07/13(金) 17:51

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.