[[20120307175036]] 『外部csv取り込み』(まさまさ) ページの最後に飛ぶ

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

 

『外部csv取り込み』(まさまさ)

こんにちは

お知恵をお貸し下さい。

外部(特定のフォルダー)にありcsvファイルをエクセルに取り込みたいと思っています。

その際にcsvのファイル名、シート名がランダムに変わるのでマクロ上で記載して指定する形ではなく

エクセルファイルと一緒にあるcsvファイルで開いた時にアクティブになるシートの内容全部を取り込む。

という事は可能でしょうか?

よろしくお願いします。

エクセル2003 windowsXPです


 つまり
・エクセルブックを開く
・そのときにアクティブになっているシート(本当はシート名が指定できたらいいんだけど)の
 どこかに(どこにあるかは説明がほしい)aaa.csv とか bbb.csv と入っている。
 (あるいは aaa とか bbb ?)
・そのcsvファイルは、開いたエクセルブックと同じフォルダに入っている。
・それらを、開いたブックの追加シートとして取り込む。

 追記) あぁ、そうじゃなく、単純にエクセルブックと同じフォルダのcsvファイルをすべて
    エクセルブックの追加シートとして取り込みたいということ?
        あるいは、エクセルブックのあるシートに、全部まとめたい(つまり結果は1シート)?

 こううこと?

 (ぶらっと)

 ↑どちらかわからないし、どちらでもないかもしれないけど。
とりあえず、開いたマクロブックと同じフォルダにあるcsvファイルをすべて取り込む。
シート別パターンと全csvファイル->1つのシートのパターン。
csvファイルのシートへの取り込みは、もっともっと、高度(?)な技があるけど、わかりやすさ優先で
ブックとして開いて取り込む方法にした。

 Sub Sample1()
'csvファイル毎に独立したシートとして取り込み
    Dim myPath As String
    Dim fName As String
    Dim csv As Workbook

    Application.ScreenUpdating = False

    myPath = ThisWorkbook.Path & "\"
    fName = Dir(myPath & "*.csv")

    Do While Len(fName) > 0
        Set csv = Workbooks.Open(myPath & fName)
        csv.Sheets(1).Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
        csv.Close False
        fName = Dir()
    Loop

    Set csv = Nothing
    Application.ScreenUpdating = True
    MsgBox "取り込み完了"

 End Sub

 Sub Sample2()
 '1枚のシートに全csvファイルを取り込み
    Dim myPath As String
    Dim fName As String
    Dim csv As Workbook
    Dim sh As Worksheet
    Dim z As Long
    Dim lCell As Range

    Application.ScreenUpdating = False
    Set sh = ThisWorkbook.Sheets("Sheet1")  '取り込みシート名 実際のものに
    sh.Cells.ClearContents
    z = 1   '取り込み先の行番号
    myPath = ThisWorkbook.Path & "\"
    fName = Dir(myPath & "*.csv")

    Do While Len(fName) > 0
        Set csv = Workbooks.Open(myPath & fName)
        With csv.Sheets(1)
            With .UsedRange
                Set lCell = .Cells(.Count)
            End With
            sh.Cells(z, "A").Resize(lCell.Row, lCell.Column).Value = .Range("A1", lCell).Value
        End With
        z = z + lCell.Row
        csv.Close False
        fName = Dir()
    Loop

    Set sh = Nothing
    Set lCell = Nothing
    Set csv = Nothing
    Application.ScreenUpdating = True
    MsgBox "取り込み完了"

 End Sub

 (ぶらっと)

(まさまさ)

ぶらっとさん、少ない情報から読み解いて頂きありがとうございます。

sample2で思った通りの処理が出来ました。

本当にありがとうございます。


コメント返信:

[ 一覧(最新更新順) ]


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