エクセルVBAで、エクセルの指定シートに複数のCSVファイルからデータを取得する方法を
ご教授お願います。
エクセルの指定シートの指定されたセルに、複数のCSVファイルから指定箇所のデータを
取得し転送する方法を考えていますが、どうもうまくいきません。
たとえば、
CSVファイル(1) A5(A)
A10(B)
CSVファイル(2) A5(C)
A10(D)
CSVファイル(3) A5(E)
A10(F)
・
・
・
と、指定されたセルからデータを取得し、
エクセルの指定シートの表に
CSVファイル
(1) (2) (3) ・ ・ ・
-------------------------------------------
A5から取得したデータ A C E ・ ・ ・
A10から取得したデータ B D F ・ ・ ・
-------------------------------------------
と、いうように転送して貼り付けていきたいです。
いろいろ調べてみたのですが、このような方法が見つけられませんでした。
ぜひ、皆様のお知恵をお貸しください。
宜しくお願い致します。
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
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 から書きだすとは限らないからです。
この回答への補足
ご返答ありがとうございます。
詳しい説明ありがとうございます。
読み込むCSVファイルは毎回ファイル名が変わる為、マクロでファイルを選択し、選択したファイルからそれぞれ
データを取得したいのですが、変数への置き換え方が分かりません。
別の回答にも書き込みましたが、ほぼ初心者に近い状態です。
お手数ですが、解説つきにしてもらえると大変助かります。
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
こんな感じでしょうか
この回答への補足
ご返答ありがとうございます。
返事遅くなりすいません。
説明が不足でしたが、書き込むシートは毎回同じなのですが、CSVファイルは毎回ファイル名が変わるため、
このファイルを選択してファイル内のデータを取得したいのですが、このCSVファイルの置き換え方が分かりません。
入門本を呼んで簡単なマクロしか組んだことが無いほぼ初心者に近い状態なので、ご迷惑をおかけしますが内容を詳し
く説明していただけると助かります。
宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA 毎日取得するデータを順番に反映していく方法 6 2023/08/26 16:22
- Visual Basic(VBA) VBA初心者です。電話番号の数字の前に0を表示させたいです。 2 2022/12/14 03:58
- Access(アクセス) CSVファイルの「0落ち」にVBA 6 2023/02/02 15:27
- Visual Basic(VBA) VBAで特定の場所にあるCSVファイル(複数)から特定場所を抜き出してExcelに転記したいです。 11 2023/05/23 16:29
- Excel(エクセル) マクロ作成初心者です。CSVファイルの日付データについて 3 2022/12/14 06:02
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- Excel(エクセル) CSVファイルでVBAを動かす方法 3 2023/04/04 10:22
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの指数を無効にしたい
-
excelインポート時の「実行時エ...
-
VBAでユーザーフォーム上に参照...
-
VBAでCSVの1行目だけを書き換え...
-
Excel VBAを使った複数のCSVフ...
-
二つのCSVファイルを照らし合わ...
-
複数のCSVファイルを横に並べて...
-
大量のCSVデータを1つのエ...
-
【エクセル VBA】CSVファイルの...
-
【マクロ】その時、その時で変...
-
エクセルでツールバーに「縮小...
-
ファイル名を今日の日付、時刻...
-
エクセル終了時の保存確認メッ...
-
ExcelVBAで今開いているユーザ...
-
複数のデータ系列の線の太さを...
-
すでに開いているブックのマク...
-
【ExcelVBA】クエリの更新とピ...
-
cellsで特定の離れた範囲を選択...
-
サクラエディタのマクロ設定を...
-
VBAに詳しい方教えてください。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの指数を無効にしたい
-
複数のCSVファイルを横に並べて...
-
excelインポート時の「実行時エ...
-
「ほかのアプリケーションを無...
-
大量のCSVデータを1つのエ...
-
VBAでCSVの1行目だけを書き換え...
-
CSVファイルの結合(重複データ...
-
複数のcsvファイルを1つのEXCEL...
-
二つのCSVファイルを照らし合わ...
-
datファイル→csvファイル→datフ...
-
EXCELにcsv形式の外部データを...
-
VBAでユーザーフォーム上に参照...
-
【VBA初心者】同じフォルダ内の...
-
【エクセル VBA】CSVファイルの...
-
EXCELLの動きが遅い
-
複数個のascファイルを1つ...
-
複数の同じ様式のエクセルデー...
-
Excel VBAを使った複数のCSVフ...
-
破損したExcelファイルの内容を...
-
Accessにエクセルからデータを...
おすすめ情報