
父親が自営でパソコンに詳しくなく、コピペで行なっている作業を楽にさせたいのですが皆様、お力をお貸しください!
前提
あるフォルダにCSVが10〜50程が保管
データは6000行一定
項目は2行目にあり、A2〜N2は全て同じ
A:日付、B:時間、C:仕入れ値、、、N:売上げ
書込み先にも上記と同じ項目を準備
作りたい内容
①前回取得したデータの消し込み("A3:N"&cmax)
②取り込みたいフォルダー内のCSVを複数選択ができるようにしたいです。
③書込み先はマクロシート内の指定したワークシート("データ")A3から書込み
④1つ目のファイルは3行目から取り込み
⑤2つ目ファイルから1669行以降を③に連結
上記のような条件で作る事は可能なのでしょうか?
A 回答 (7件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
>20121210.csvの日付になってます。
過去?それとも2021年?
又は『今日?』
>ファイル名は20210928〜20121210.csvの日付になってます。
この中からチョイスしたファイルの内、古い方が④で新しい方が⑤?
3つ以上チョイスする可能性があるなら、一番古いのが④で残りは⑤?
No.4
- 回答日時:
詳細が不明ですが
①書き込み先にある「A3」から「Nのデータがある行」までのデータを削除する
②補足にある20210928〜20121210.csvのファイルすべてを選択する
④1つ目のファイルは、3行目から6000行目までを取り込む
⑤2つ目以降のファイルは、すべて1669行目から6000行目までを取り込む
ということであれば、以下でどうでしょうか。
取り込む行数が変わった場合や取り込むファイルが変わった場合に
修正する部分はコメントを付けてみました。
Sub ファイル取り込み()
Dim row As Long
Dim fileNo As Integer
Dim data As String
Dim i As Integer
Dim j As Integer
Dim Buf As Variant
Dim d As Date
Dim fileName As String
Dim filePath As String
Low = Cells(Rows.Count, 1).row
lastLow = Cells(Low, 1).End(xlUp).row
Range(Cells(3, 1), Cells(lastLow, 14)).Clear 'データを消しこむセル
i = 3 '書き込み先ファイルに書き込みはじめる行数
j = 1
d = "2021/09/28" '取り込みたいファイルのはじめの日付
fileName = Format(d, "yyyymmdd")
filePath = "C:\temp\test\" & fileName & ".csv"
fileNo = FreeFile
Open filePath For Input As #fileNo
Do While Not EOF(fileNo)
Line Input #fileNo, data
If j >= 3 Then '1つ目のファイルを取り込みはじめる行数
data = Replace(data, """", "")
Buf = Split(data, ",")
For k = 0 To UBound(Buf)
Cells(i, k + 1) = Buf(k)
Next k
i = i + 1
End If
j = j + 1
Loop
Close fileNo
d = DateAdd("d", 1, d)
fileName = Format(d, "yyyymmdd")
filePath = "C:\temp\test\" & fileName & ".csv"
j = 1
Do While d <= "2021/12/10" '取り込みたいファイルの最後の日付
fileNo = FreeFile
Open filePath For Input As #fileNo
Do While Not EOF(fileNo)
Line Input #fileNo, data
If j >= 1669 Then '2つ目以降のファイルを取り込みはじめる行数
data = Replace(data, """", "")
Buf = Split(data, ",")
For k = 0 To UBound(Buf)
Cells(i, k + 1) = Buf(k)
Next k
i = i + 1
End If
j = j + 1
Loop
Close fileNo
d = DateAdd("d", 1, d)
fileName = Format(d, "yyyymmdd")
filePath = "C:\temp\test\" & fileName & ".csv"
j = 1
Loop
End Sub
No.3
- 回答日時:
No2です。
>ファイル読み込みからの経験がありません
CSVファイルを、まともにテキストファイルとして読み込むと、カンマ区切りを解釈したりクォーテーション(←含まれているのか不明ですが)を解釈したりとそれなりに面倒です。
読み込むのはCSVと限定してもよさそうなので、エクセルのブックとして開いてしまうのが簡単だと思います。(面倒な処理はエクセルがやってくれます)
開いてしまえば、後は、ほとんどがセルの値の転記処理だけのように思えますので・・
◇CSVファイルをブックで開く
https://docs.microsoft.com/ja-jp/office/vba/api/ …
(CSVはカンマ区切りなので、Formatに2を指定しておけばよいでしょう)
>当方は多少のVBA経験はありますが~~
とのことですので、手操作に近い部分であれば「マクロの記録」などを利用すれば、大まかな処理は理解できると思いますので、なさりたいことに合わせて修正なされば宜しいかと。
また、VBAの情報はネットにもたくさん溢れていますので、わからないことは検索すれば大抵出てきます。
コツとしては、複雑な処理を検索しようとせずに、処理を分割して単純なキーワードにして検索することでしょうか。
※ ブックとして開く方法を紹介しましたけれど、これをそのまま行うと、実際には、開いたり閉じたりする際に画面のチラつきが起こる原因となりやすいです。
デバッグが終わった段階で、Application.ScreenUpdatingを利用して、処理中は画面の更新を行わないようにしておことでチラつきの防止が図れます。
また、逐次の更新を省略することで、同時に処理速度の向上も実現できると思います。
https://docs.microsoft.com/ja-jp/office/vba/api/ …
孝行がうまくいきますように。
No.2
- 回答日時:
こんにちは
ご質問文では不明な点が多いですが、基本的にはタイトルにあるように、エクセル上にCSVを必要な部分だけ取り込んだり、一部を削除することだと思いますので、可能性は十分にあると思います。
すでに指摘にあるように、取り込む順序や消去する基準など、ご質問文には記載のない部分もロジカルに判断できるようになっているなら可能です。
反対に、「データを見てみないとわからない」、「データを見て決める」というような判断方法でしたら、難しそうに思います。
No.1
- 回答日時:
②取り込みたいフォルダー内のCSVを複数選択ができるようにしたいです。
④1つ目のファイルは3行目から取り込み
⑤2つ目ファイルから1669行以降を③に連結
複数のCSVファイルを選択して読み込むとして、どのファイルが④でどのファイルが⑤になるとかってどのように決めるのでしょう?
それに連結させたとしてデータ行数が多くなり、扱いやすいのでしょうか?
⇒既にそこは慣れている?
お父さんはともかくとして質問者さんはVBAの経験は多少なりともあると言う前提で宜しいのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
教えて!gooグレードポイントがdポイントに変わります!
dアカウント連携を行っていただくと、グレードに応じて「dポイント」が進呈されるようになります。
-
【Excel VBA】表の列の値毎に分割するには?(値がブックのファイル名)
Visual Basic(VBA)
-
超難 日付に対するクロス集計
Visual Basic(VBA)
-
VBAでtxtファイルを読み込む際にtabを認識したい
Visual Basic(VBA)
-
4
連想配列について
Visual Basic(VBA)
-
5
誰か助けてください。 私はプログラミングに興味がないのにそういう大学に入学しました。 当然、目的もな
その他(プログラミング・Web制作)
-
6
配列の重複する値とその個数を取得したい
Visual Basic(VBA)
-
7
VBAのコードについて
Visual Basic(VBA)
-
8
https://gist.github.com/naichilab/fef5dcc0f8266fd8
Visual Basic(VBA)
-
9
Excel関数について 下記の業務をもっと効率よく出来る関数がないか悩んでます(´;Д;`) ※質屋
Excel(エクセル)
-
10
配列の書き出しコードについての質問
Visual Basic(VBA)
-
11
VBAバーコード照合 バーコードリーダーがPCについており、 バーコードを読み取るとセルに入力され、
Visual Basic(VBA)
-
12
サブフォルダ含むすべてのフォルダの Excel 検索
Visual Basic(VBA)
-
13
VBAの質問です msg = ws.Cells(r, A").Value & "日に" & ws."
Visual Basic(VBA)
-
14
VBA リストボックスをダブルクリックしデータを修正したいのですが…。
Visual Basic(VBA)
-
15
CSVファイルの比較と結果の取得(2次元配列へ)について。
Visual Basic(VBA)
-
16
エクセルVBAの配列二重ループ処理コードの書き方につきまして。
Excel(エクセル)
-
17
VBA public変数はどのようなことをしたら解放されますか?
Visual Basic(VBA)
-
18
VBA CSV取り込みについて
Visual Basic(VBA)
-
19
エクセル以外で麻雀の成績を管理する方法(プログラミングでやりたい)
その他(プログラミング・Web制作)
-
20
プログラミングを仕事にしてますが、趣味で作りたいと思えません。 趣味で何が作れたら、仕事でアピールと
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
Excelデータを別のExcelファイ...
-
5
大量のCSVデータを行列の変換を...
-
6
USBメモリーのファイルの一部消...
-
7
vbsでゴミ箱への移動
-
8
AccessVBAで作成したExcelファ...
-
9
メールで送られてきたワードの...
-
10
WAVファイルの結合
-
11
エクセルVBAでフォルダ内の全フ...
-
12
WEBクエリが使えない場合のHPデ...
-
13
ACCESSのDoCmd.TransferText
-
14
拡張子が「cda」のファイルを聞...
-
15
VBAでCSVファイルが使用中かど...
-
16
C言語でのこぎり波を作る方法
-
17
ExcelVBAでの標準偏差の求め方
-
18
社内Excel共有ブックでの保存ト...
-
19
Dream weaverで、誤ってファイ...
-
20
仕事のファイルを共有フォルダ...
おすすめ情報
公式facebook
公式twitter
早速、ありがとうございます。
読み込みの順番はファイル名順
ファイル名は20210928〜20121210.csvの日付になってます。
当方は多少のVBA経験はありますがこのようなファイル読み込みからの経験がありませんので皆様のお知恵をお借りできれば幸いです。