[[20141207184822]] 『複数のcsvファイルを一つのシートにまとめて読』(カスム) ページの最後に飛ぶ

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

 

『複数のcsvファイルを一つのシートにまとめて読み込ませる。』(カスム)

教えてください。
使用しているのはexcel2010。
題名の通り、複数のcsvファイルを一つのシートに連続して読み込ませたいのです。
ネットで検索して、以下のようなマクロを見つけて使わせて頂いたのですが、もう一つ指定したいことがあります。

読み込ませるデータの中には001のような数値が複数あるのですが、そのデータが入っている行をあらかじめ文字列として読み込ませる方法はありますでしょうか。
列はOPQ列、AC,AB,ADの6列でこれは固定です。

元のデータ形式はカンマやタブなどの区切り文字によってフィールドごとに区切られたデータ。区切り文字はカンマになります。
どうぞよろしくお願いいたします。

Sub CSVまとめsample()
  Dim MyObj As Object
  Dim MyFol As String
  Dim MyFnm As String
  Dim MyStr As String
  Dim i   As Long
  Dim n   As Long
  Dim n1  As Long
  
  'フォルダを選択する
  Set MyObj = CreateObject("Shell.Application") _
    .BrowseForFolder(0, "SelectFolder", 0)
  '選択なければ処理を抜ける
  If MyObj Is Nothing Then Exit Sub
  MyFol = MyObj.self.Path & "\"
  MsgBox MyFol & "を処理します。"
  Set MyObj = Nothing
  Application.ScreenUpdating = False
  'ThisWorkbookにシートを追加して処理
  With Sheets.Add
    'Dir関数を使って指定フォルダ内csvファイルを順次処理
    MyFnm = Dir(MyFol & "*.csv")
    Do Until Len(MyFnm) = 0&
      i = i + 1
      'データエリアを取得してセット先を変更
      n = IIf(n = 0, 1, n + n1)
      '外部データ取り込みを利用
      With .QueryTables.Add(Connection:="TEXT;" & MyFol & MyFnm, _
                 Destination:=.Range("B" & n))
        .AdjustColumnWidth = False
        .TextFilePlatform = xlWindows
        .TextFileStartRow = 1
        .TextFileCommaDelimiter = True
        .Refresh False
        n1 = .ResultRange.Rows.Count
        .Parent.Names(.Name).Delete
        .Delete
      End With
      'ファイル名をA列にセット
      .Range("A" & n).Resize(n1).Value = MyFnm
      '次のファイルへ
      MyFnm = Dir()
    Loop
  End With
  If i > 0 Then
    MyStr = i & "個のファイルを処理しました。"
  Else
    '検索結果が0なら
    MyStr = "検索条件を満たすファイルはありません。"
  End If
  Application.ScreenUpdating = True
  MsgBox MyStr
End Sub

< 使用 Excel:Excel2010、使用 OS:Windows7 >


こんにちは

.TextFileColumnDataTypes = Array(〜)

で〜部分で各列のデータ型を指定してみては?

(ウッシ) 2014/12/08(月) 07:56


 横から失礼します

 > 使用しているのはexcel2010。

 それだと、
 > .TextFilePlatform = xlWindows
 のようにはならないと思います。

 また、
 >        .TextFileCommaDelimiter = True 
 は 区切り記号の指定のところで、カンマに☑を入れる動作になりますが、
 それ以外の Tabや スペース を区切りとしない指示もマクロで記録されるように、明示的にFalseを
 指定しておいた方がよいかと思います。

 Excel2010 で どれか一つCSVファイルをテキストファイルウィザードからインポートする
 操作のマクロ記録をとってみるとよいと思います。
 そのとき、
 > 001のような数値
 の前ゼロを消さないためには (すでにコメントがありますが)ウィザードでその列の型を「文字列」に
 指定すると、もとのテキストのままインポートできます。

 >        .Parent.Names(.Name).Delete 
 >        .Delete

 も今のバージョンなら

     .Delete

 だけでOKですね
 . 
(kanabun) 2014/12/08(月) 09:13

コメント返信:

[ 一覧(最新更新順) ]


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