• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数のCSVファイルからのデータ取得(VBA))

エクセルVBAで複数のCSVファイルからデータを取得する方法とは?

このQ&Aのポイント
  • エクセルVBAを使用して、指定シートに複数のCSVファイルからデータを取得する方法を教えてください。
  • 指定されたセルからデータを取得し、エクセルの表に転送する方法を考えていますが、うまくいきません。
  • CSVファイルのデータを指定シートに貼り付けるための効果的な方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

>読み込むCSVファイルは毎回ファイル名が変わる為、マクロでファイルを選択し、選択したファイルからそれぞれデータを取得したいのですが、変数への置き換え方が分かりません。 私は、基本的にはまったく知らない方には、ブラックボックスとして使っていただくように考えています。 ファイル名が決まっているような質問の内容でしたから、そういうコードにしたまででしたが、すでに、#2のコードを書く時に、以下のように考えていました。 試してみてください。書き換えは、必要に応じて「パスを登録」の部分だけです。 また、なくても、可能です。 ファイルの選択は、Ctrl キーを押しながらファイルを一つずつ選ぶか、シフトキーを押しながら範囲を選ぶかしてください。選択した順序どおりに処理されます。 '// Sub TestMacro1R()  Dim sh As Worksheet  Dim Files As Variant  Dim i As Long, j As Long, k As Long  Dim oPath As String  Dim sPath As String  oPath = ThisWorkbook.Path  sPath = ThisWorkbook.Path & "\MyFolder\" 'パスを登録  Set sh = ThisWorkbook.ActiveSheet '書きだすシート  ChDir sPath  Files = Application.GetOpenFilename("Text(*.csv),*.csv", , "ファイル選択", , True)  If VarType(Files) = vbBoolean Then Exit Sub  k = 1 '書き出し列  j = 1 '書き出し行  For i = UBound(Files) To 1 Step -1   If k > Columns.Count Then MsgBox "列の制限より終了します。", 48: Exit For    Application.ScreenUpdating = False    With Workbooks.Open(Files(i))     sh.Cells(j, k).Value = .ActiveSheet.Range("A5").Value     sh.Cells(j + 1, k).Value = .ActiveSheet.Range("A10").Value     .Close False    End With    k = k + 1   Application.ScreenUpdating = True  Next  Set sh = Nothing  ChDir oPath  Beep End Sub

na714
質問者

お礼

詳しい説明ありがとうございました。 早速試してみたいと思います。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

>いろいろ調べてみたのですが、このような方法が見つけられませんでした。 基本的に、横にデータを伸ばしていくスタイルのものは、VBAなどでは書かないことが多いです。 ある程度、マクロが分かるレベルでしたら、ご自身で書き換えられるはずです。 Sub TestMacro1()  Dim sh As Worksheet  Dim Files(5) As String  Dim i As Long, j As Long, k As Long  Dim sPath As String  sPath = ThisWorkbook.Path & "\MyFolder\" 'パスを登録  Set sh = ThisWorkbook.ActiveSheet '書きだすシート  'k は書き出し列, j 書き出し行  'ファイル名が以下よりも多くあるなら、↑Dim Files(数)を増やして書き加える)  Files(1) = "Test1.csv"  Files(2) = "Test2.csv"  Files(3) = "Test3.csv"  Files(4) = "Test4.csv"  Files(5) = "Test5.csv"  k = 1 '書き出し列  For i = 1 To UBound(Files)   If Dir(sPath & Files(i)) <> "" Then   If k > Columns.Count Then MsgBox "列の制限より終了します。", 48: Exit For    Application.ScreenUpdating = False    With Workbooks.Open(sPath & Files(i))     j = 1 '書き出し行     sh.Cells(j, k).Value = .ActiveSheet.Range("A5").Value     sh.Cells(j + 1, k).Value = .ActiveSheet.Range("A10").Value     .Close False    End With    k = k + 1   End If   Application.ScreenUpdating = True  Next  Set sh = Nothing End Sub 'k と i は別々にするのは、必ずしも、A1 から書きだすとは限らないからです。

na714
質問者

補足

ご返答ありがとうございます。 詳しい説明ありがとうございます。 読み込むCSVファイルは毎回ファイル名が変わる為、マクロでファイルを選択し、選択したファイルからそれぞれ データを取得したいのですが、変数への置き換え方が分かりません。 別の回答にも書き込みましたが、ほぼ初心者に近い状態です。 お手数ですが、解説つきにしてもらえると大変助かります。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

指定のシート↓     A     B     C 1  (A)    (C)    (E) 2  (B)    (D)    (F) のようにしたいのでしょうか? Range("A1").Value=CSVファイル(1).Range("A5").Value Range("A2").Value=CSVファイル(1).Range("A10").Value Range("B1").Value=CSVファイル(2).Range("A5").Value Range("B2").Value=CSVファイル(2).Range("A10").Value Range("C1").Value=CSVファイル(3).Range("A5").Value Range("C2").Value=CSVファイル(3).Range("A10").Value とか For i=1 to X For j=1 to 2 Cells(j, i).Value=CSVファイル(i).Cells(j*5,1).Value Next Next こんな感じでしょうか

na714
質問者

補足

ご返答ありがとうございます。 返事遅くなりすいません。 説明が不足でしたが、書き込むシートは毎回同じなのですが、CSVファイルは毎回ファイル名が変わるため、 このファイルを選択してファイル内のデータを取得したいのですが、このCSVファイルの置き換え方が分かりません。 入門本を呼んで簡単なマクロしか組んだことが無いほぼ初心者に近い状態なので、ご迷惑をおかけしますが内容を詳し く説明していただけると助かります。 宜しくお願い致します。

関連するQ&A