スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

VBA タブ区切りのテキストを読み込む

■VBA タブ区切りのテキストを読み込む
大量のタブ区切りのテキストファイルをエクセルに読み込む必要があったので、作成。

やりたかったことは...
・ タブごとのテキストファイルを別セルに挿入する
・ フォルダ内の全てテキストを読み込む
・ 読み込んだテキストごとにページを作成する
・ ページ名はテキストファイルの名前にする

で、できたのがコレ。

Sub tabread()

    Dim line As Long
    Dim buf As String
    Dim tmp As Variant
    Dim NewWorkSheet As Worksheet
    Dim Target As String
    Dim arraycount As Integer

    '対象フォルダをセルから取得
    Target = Range("B1").Value

    Set FS = CreateObject("Scripting.FileSystemObject")
    Set Fol = FS.GetFolder(Target)
    Set Fil = Fol.Files

    '対象フォルダにあるファイル数だけループ
    For Each Fx In Fil

        'ファイルパスを取得
        sFile = Fol

        'ファイル名を取得
        sFile = Fol + "\" + Fx.Name

        '拡張子を除いたファイル名を取得
        sheettmp = Split(Fx.Name, ".")

        'ファイルごとに新規シートを作成
        Set NewWorkSheet = Worksheets.Add()
        NewWorkSheet.Name = sheettmp(0)

        Open sFile For Input As #1

        '2行目のセルから取り込む
        line = 2

        'テキストファイルの終端までループ
        Do Until EOF(1)

            Line Input #1, buf

            'タブ区切りで配列に取得
            tmp = Split(buf, vbTab)

            '配列の要素数を取得
            arraycount = UBound(tmp)

            For counter = 1 To arraycount
                Cells(line, counter) = tmp(counter - 1)
            Next counter

            '次の行へ
            line = line + 1

        Loop
        Close #1

    Next
End Sub

実際は、セルの幅を調整したり、結合したりする機能も実装したけど、汎用的な部分を抽出した。

使った機能メモ。

'書式を整える
Dim lngRowLst As Long

'値が入っている最終行を取得
lngRowLst = Cells.SpecialCells(xlCellTypeLastCell).Row

'セルの幅を設定する
Range(Cells(4, 1), Cells(4, 1)).ColumnWidth = 45
Range(Cells(4, 2), Cells(4, 5)).ColumnWidth = 15

'値が入っている最終行まで罫線を引く
Range(Cells(4, 1), Cells(lngRowLst, 5)).Borders.LineStyle = xlContinuous

'値が入っている最終行まで中央揃えにする(B~Eの範囲)
Range(Cells(2, 2), Cells(lngRowLst, 5)).HorizontalAlignment = xlCenter

'桁区切りを設定する
Range(Cells(4, 2), Cells(lngRowLst, 2)).NumberFormatLocal = "#,###件"
Range(Cells(4, 5), Cells(lngRowLst, 2)).NumberFormatLocal = "#,###件"


なんだかんだで、エクセルVBA便利っすなぁ。


関連記事
スポンサーサイト

この記事へのコメント

タイトル - YY - 2014年01月31日 16:53:56

Set Fol = FS.GetFolder(Target)
で止まってしまうのですが、どのようにしたらいいですか?
教えていただければ、幸いです。

Re: タイトル - ベタログ - 2014年02月03日 21:05:25

> Set Fol = FS.GetFolder(Target)
> で止まってしまうのですが、どのようにしたらいいですか?

Target にはフォルダパスが入るんですが、B1セルが空欄になってたりしませんか。
念のため試してみましたが、空欄でない限り、止まりませんでした。

- AK - 2015年03月12日 12:27:19

sFileの変数は何でしょうか、また、どこで宣言しているのでしょうか?
初歩的な質問ですみません。

Re: タイトルなし - ベタログ - 2015年03月14日 00:33:42

> sFileの変数は何でしょうか、また、どこで宣言しているのでしょうか?
> 初歩的な質問ですみません。

Folderオブジェクトを代入しています。
また、よろしくないですが、宣言をしないで使用していますね。

トラックバック

URL :

■スポンサードリンク
■プロフィール

ベタログ

管理人 : ベタログ (Twitterアカウント

思い立ったら、ジャンルを気にせず記事にする。それが自由というものだ。
そんな管理方針。
主に取り扱ってる事:オンラインゲーム(SDGO/Travian/ロードオブナイツ)、プログラミングメモ、ネット小説/書籍の感想/観葉植物など。

■まとめ記事
■カテゴリ
■最新記事
■PICKUP

個人的に押しているモノ


魚里高校ダンジョン部! 藻女神様と行く迷宮甲子園
魚里高校ダンジョン部! 藻女神様と行く迷宮甲子園
■感想記事
これぞ青春エンタメ小説。熱いですよ!

オーバーロード1 不死者の王
オーバーロード1 不死者の王
■感想記事
最強軍団が異世界を蹂躙するファンタジー。Web版も読めますが、凄まじい加筆がされているため、Web版読者も楽しめます。
■お勧め品
■最新コメント
■月別アーカイブ
検索フォーム
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。