Excel VBA質問箱 IV

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

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


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

【16080】複数ファイルの一括取り込み 04/7/16(金) 10:28 質問[未読]
【16083】Re:複数ファイルの一括取り込み Asaki 04/7/16(金) 10:43 回答[未読]
【16091】Re:複数ファイルの一括取り込み 04/7/16(金) 11:38 お礼[未読]

【16080】複数ファイルの一括取り込み
質問    - 04/7/16(金) 10:28 -

引用なし
パスワード
   おはようございます。

CSVファイルのデータを取り込むマクロを作成中で、
とりあえず以下の様なマクロを作成しました。
そこで質問なのですが、一度に一つのファイルではなく
一度に複数の異なるファイル(全てCSV)を取り込むことは
可能でしょうか?
どなたかご存知の方がいらっしゃいましたら宜しくお願いします。


Private pfile As String
Private dfile As String
Private fileToOpne As Variant
Private i, j, k, l As Integer
Private a As Variant

Sub GetData()

  pfile = ActiveWorkbook.Name

'ファイル名の取得
  fileToOpen = Application.GetOpenFilename( _
  filefilter:="CSVファイル (*.csv), *.csv", _
  Title:="ファイルを選択してください", MultiSelect:=False)
  
'ファイルを開く
  If fileToOpen <> False Then
    Workbooks.Open Filename:=fileToOpen
  Else
    End
  End If
  
'データを代入する

  dfile = ActiveWorkbook.Name
  
  For i = 1 To 60
    For j = 1 To 10
      Workbooks(pfile).Activate
      a = Workbooks(dfile).Worksheets(1).Cells(i, j)
      Workbooks(pfile).Worksheets(1).Cells(i, j) = a
    Next
  Next
  
'ファイル名を記入する
  Range("i11") = dfile
  
  
'開いたデータファイルを閉じる
  Workbooks(dfile).Close SaveChanges:=False
  
  Sheets("MeasData").Select

End Sub

【16083】Re:複数ファイルの一括取り込み
回答  Asaki  - 04/7/16(金) 10:43 -

引用なし
パスワード
   こんにちは。

一般には、複数のファイルからデータを取り込む場合でも、1つずつ順番に処理します。
手作業でやることを考えても、同時にファイルを開いていたとしても、1つずつしか取り込めませんよね?

先ず最初に、全ての処理対象ファイルを選択させて決めておいてから、
実際に開いて取り込む部分をループにすればよいかと思います。

ところで、↓の宣言だと
>Private i, j, k, l As Integer
i, j, k は Variant型になってしまいますが、大丈夫ですか?

また、取り込む相手がCSVファイルということなので、テキストファイルのインポートでも良いかもしれません。
普通にCSVファイルを開くにしても、ループせずに
Workbooks(dfile).Worksheets(1).Cells(1, 1).Resize(60, 10).Value _
  = Workbooks(pfile).Worksheets(1).Cells(1, 1).Resize(60, 10).Value
でよさそうです。

【16091】Re:複数ファイルの一括取り込み
お礼    - 04/7/16(金) 11:38 -

引用なし
パスワード
   >一般には、複数のファイルからデータを取り込む場合でも、1つずつ順番に処理します。
>手作業でやることを考えても、同時にファイルを開いていたとしても、1つずつしか取り込めませんよね?
そこはあきらめようかと思ってはいます。

>また、取り込む相手がCSVファイルということなので、テキストファイルのインポートでも良いかもしれません。
>普通にCSVファイルを開くにしても、ループせずに
>Workbooks(dfile).Worksheets(1).Cells(1, 1).Resize(60, 10).Value _
>  = Workbooks(pfile).Worksheets(1).Cells(1, 1).Resize(60, 10).Value
>でよさそうです。
なるほど、早速試してみようと思います。
ありがとうございました。

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