お世話になっております。
当方VBA初心者のため、ご教示ください。
張りつけするファイル(xlsx)と同フォルダ内に「Voltから始まるファイル(CSV)」と「Currから始まるファイル(CSV)」が大量にサブフォルダに格納されています。
Voltの時とCurrの時ではりつける場所を変えるマクロが知りたいです。
また、グラフの作成(範囲の修正)もしたいです。
①開くサブフォルダを指定する
(調べていて見つけたのが、ダイアログボックスでフォルダを指定するタイプでした。)
②Voltの時、C5~C135に入力されている数値をコピー、別ファイルのAK6に貼り付ける
ファイルごとに最終列の隣へどんどん貼り付けていく
③ファイルごとに数字を追加
フォルダが変わると数字を1~にする
※1フォルダにVolt5個、Curr5個程度(どちらもたまに6個)入っています。
2行目にフォルダの日付、3行目に1~、4行目に1回目~5回目(たまに6回目)と記載したい
3行目のフォルダ数は日付によって違います。
④貼り付ける前でも後でも良いのですが、1行ごとに空白行を挿入する
例)AK141:0.365
AK142:空白
AK143:0.412
⑤折れ線グラフの作成
貼り付けた6行目と141行目の1行を折れ線グラフにする(空白行は飛ばしてすべての行を128個作成)
グラフについては、すでにAJ列まで作成済みのものがありますので、可能であれば追加した列分の範囲の修正を行いたいです。
上記のことがしたいのですが、初心者なため、サンプルコードをいただけるとありがたいです。
また、マクロで再現が難しいということがあればご教示願います。
お手数をおかけしますが、よろしくお願いいたします。
- 画像を添付する (ファイルサイズ:10MB以内、ファイル形式:JPG/GIF/PNG)
- 今の自分の気分スタンプを選ぼう!
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
あまりにも暑いので 自分で回答する気力がなかったので ChatGPTに丸投げしましたら、回答が来ましたので、下記に記します。
VBAを使用して指定の条件を満たすマクロを作成するには、以下の手順に従います。
1.サブフォルダを選択するためのダイアログボックス表示
2.VoltファイルとCurrファイルの処理
3.必要な数値のコピーと貼り付け
4.空白行の挿入
5.折れ線グラフの作成または範囲修正
以下にサンプルコードを示します。
Sub ProcessFiles()
Dim FolderPath As String
Dim VoltFiles As Collection
Dim CurrFiles As Collection
Dim FileName As String
Dim ws As Worksheet
Dim TargetCol As Long
Dim i As Long, j As Long
Dim DateFolder As String
Dim RunCounter As Integer
' ダイアログボックスでフォルダを指定
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "フォルダを選択"
If .Show = -1 Then
FolderPath = .SelectedItems(1) & "\"
Else
Exit Sub
End If
End With
' サブフォルダ内のVoltとCurrファイルを収集
Set VoltFiles = New Collection
Set CurrFiles = New Collection
FileName = Dir(FolderPath & "*.csv", vbNormal)
Do While FileName <> ""
If Left(FileName, 4) = "Volt" Then
VoltFiles.Add FolderPath & FileName
ElseIf Left(FileName, 4) = "Curr" Then
CurrFiles.Add FolderPath & FileName
End If
FileName = Dir
Loop
' 日付フォルダ名を取得
DateFolder = Format(Date, "yyyymmdd")
' Voltファイルの処理
Set ws = ThisWorkbook.Sheets("Sheet1") ' 貼り付ける対象シート
TargetCol = ws.Cells(3, Columns.Count).End(xlToLeft).Column + 1
RunCounter = 1
For Each FileName In VoltFiles
Call ProcessCSV(FileName, ws, "Volt", TargetCol, RunCounter, DateFolder)
RunCounter = RunCounter + 1
TargetCol = TargetCol + 2 ' 空白行を含む
Next FileName
' Currファイルの処理
TargetCol = ws.Cells(3, Columns.Count).End(xlToLeft).Column + 1
RunCounter = 1
For Each FileName In CurrFiles
Call ProcessCSV(FileName, ws, "Curr", TargetCol, RunCounter, DateFolder)
RunCounter = RunCounter + 1
TargetCol = TargetCol + 2 ' 空白行を含む
Next FileName
' グラフの更新(必要に応じて)
' ここでグラフの範囲を修正するコードを追加
End Sub
Sub ProcessCSV(FileName As String, ws As Worksheet, FileType As String, TargetCol As Long, RunCounter As Integer, DateFolder As String)
Dim Data As Variant
Dim i As Long
' CSVファイルを開く
Workbooks.Open FileName:=FileName
Data = ActiveSheet.Range("C5:C135").Value
ActiveWorkbook.Close False
' 日付とランカウントを記載
ws.Cells(2, TargetCol).Value = DateFolder
ws.Cells(3, TargetCol).Value = RunCounter
' データを貼り付け
For i = 1 To UBound(Data, 1)
ws.Cells(6 + (i - 1) * 2, TargetCol).Value = Data(i, 1)
Next i
End Sub
解説
1.フォルダの選択
・Application.FileDialog(msoFileDialogFolderPicker) を使用して、ユーザーにフォルダを選択させます。
2.VoltファイルとCurrファイルの収集
・Dir関数を使用して、指定フォルダ内のCSVファイルを収集し、ファイル名の先頭4文字が"Volt"または"Curr"であるファイルをそれぞれのコレクションに追加します。
3.CSVファイルの処理
・ProcessCSVサブプロシージャを呼び出して、各ファイルのデータを指定の範囲にコピーして貼り付けます。
4.空白行の挿入
・データを貼り付ける際に、1行おきにデータを挿入し、空白行を確保します。
5.グラフの範囲修正
・グラフの更新については、貼り付けたデータ範囲を基にして修正するコードを追加することができます。
このコードを実行することで、指定フォルダ内のCSVファイルからデータを抽出し、Excelシートに貼り付けることができます。また、必要に応じてグラフの範囲修正も行えます。
お役に立てれば幸いです。何か追加の質問があれば、お知らせください。
さっそくのご回答ありがとうございます。
暑いのでお身体ご自愛くださいませ。
こちら、マクロ回してみたのですが
「For Eachに指定する変数はバリアント型またはオブジェクト型でなければなりません」
というエラーが出て進みませんでした。
このエラーの対処法はありますでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/11/09 11:51
- Excel(エクセル) excelマクロ 冒頭3文字が一致するファイルのコピー移動 1 2024/02/23 17:27
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける 3 2022/09/10 07:55
- Visual Basic(VBA) エクセルのマクロについて教えてください 物件ごとのフォルダを作成してます そのフォルダ内にサブフォル 2 2023/07/02 17:58
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける (再質問) 4 2022/09/14 22:51
- Visual Basic(VBA) VBAで大量のファイルをシート名ごとに転記やらいろいろしたい! 3 2024/05/13 12:28
- Excel(エクセル) EXCEL マクロで 同じフォルダ内の複数ファイルの複数行全体を選択して1つのファイルに集約 4 2022/09/27 18:41
- Visual Basic(VBA) コードを直していただきたいです。 以下のコードはネットで拾ったものをほんの少しいじった物なのですが、 7 2024/01/10 22:50
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
時間短縮のために、テキストファイルの入出力をメモリを使って出来ないですか?
Visual Basic(VBA)
-
Windowsのアプリ開発ってなんのためにするんですか? Excelで入力、更新、表示、検索、削除、
その他(プログラミング・Web制作)
-
VBAなくなるの?
Visual Basic(VBA)
-
-
4
テキストファイルの1行目のみを削除したい
その他(プログラミング・Web制作)
-
5
プログラミング
Visual Basic(VBA)
-
6
IF文、条件分岐の整理方法
Visual Basic(VBA)
-
7
VBAで大量のファイルをシート名ごとに転記やらいろいろしたい!
Visual Basic(VBA)
-
8
AIの登場でプログラマーたちが解雇されていますが
その他(プログラミング・Web制作)
-
9
テキストファイルのフィールド行のみ削除したい
Visual Basic(VBA)
-
10
文系のSE志望です。プログラミングを今から習得したいのですが、初めて学ぶのにオススメの言語があれば教
その他(プログラミング・Web制作)
-
11
VBAコードのインデント表示
Visual Basic(VBA)
-
12
Excel 範囲指定スクショについて Excelで範囲指定してスクリーンショットする機能がありますが
Visual Basic(VBA)
-
13
これて逆じゃないですか?
C言語・C++・C#
-
14
windowsにいてなぜwindowsxpから10になると重くなるのですか?同じアプリでも最低条件、
その他(OS)
-
15
Excel-VBAのmsgBox()の不思議
Visual Basic(VBA)
-
16
テキストファイルのファイル名を抽出してBAT処理する方法はありますか。
その他(プログラミング・Web制作)
-
17
VBA 複数条件の分岐処理の上手な方法
Visual Basic(VBA)
-
18
Windows 10のサポート期限切れとともにパソコンの 大量廃棄が予想されているのでしょうか それ
Windows 10
-
19
先日ウェブデザイン技能検定三級を受けたのですが、公式の解答では答えが②となっているのですがその理由が
HTML・CSS
-
20
VBA レジストリの値の読み方について教えてください
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
サブフォルダに格納されている...
-
PCに保存していた写真を見られ...
-
拡張子をつくる
-
参照元Excelファイルをバックグ...
-
Excelで外部のファイルの場所を...
-
同名フォルダを作成し、そのフ...
-
MkDir パス名が無効です
-
ファイルの作成日時について
-
OpenFileDialogを使った後にも...
-
SQLplusでedコマンドが使えない
-
Outlookで添付ファイルの貼り付...
-
Excelファイルの特定のシートを...
-
<a href="file:///フォルダ名/...
-
lockディレクトリとは?
-
グローバル変数について
-
秀丸のタグジャンプがうまくで...
-
「~.css?数字」というファイル...
-
ダウンロード
-
秀丸で、tagsファイルを作成す...
-
Excelファイルにリンク→シート...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PCに保存していた写真を見られ...
-
同名フォルダを作成し、そのフ...
-
拡張子をつくる
-
Excelで外部のファイルの場所を...
-
Excelの関数について教えてくだ...
-
OpenFileDialogを使った後にも...
-
ExcelVBAでリンク先の対象のフ...
-
<a href="file:///フォルダ名/...
-
MkDir パス名が無効です
-
秀丸のタグジャンプがうまくで...
-
ファイルの作成日時について
-
EXCEL VBAのDir関数について
-
参照元Excelファイルをバックグ...
-
Outlookで添付ファイルの貼り付...
-
Mac Excel VBAについて
-
「~$ファイル名.doc」というフ...
-
VBSでメール送信
-
スマホでHTMLファイルを開いて...
-
ファイルとフォルダのセキュリ...
-
Excelファイルにリンク→シート...
おすすめ情報