父親が自営でパソコンに詳しくなく、コピペで行なっている作業を楽にさせたいのですが皆様、お力をお貸しください!
前提
あるフォルダに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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- Excel(エクセル) Excelで、別シートの表のステータスに伴った動的な自動転記をしたいです。 2 2023/06/14 15:56
- Excel(エクセル) PowerQueryで行数の指定はできますか? 2 2022/08/26 11:13
- Excel(エクセル) Excel、同じフォルダ内のExcelファイルの特定シートのみを1つのファイルに集約したい 8 2022/09/07 15:12
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
共有フォルダに誰が何にアクセ...
-
拡張子が「cda」のファイルを聞...
-
【Excel】[Expression.Error] ...
-
Access VBA を利用して、フォル...
-
Batch: フォルダ内の特定のファ...
-
AccessVBAで作成したExcelファ...
-
リソースのみのDLLの作り方と使...
-
事務の派遣で働いています。多...
-
tmpファイル なぜできる?削除...
-
月が変わったら自動でシートが...
-
【ExcelVBA】FreeFile関数とGet...
-
VBAでCSVファイルが使用中かど...
-
データベースを作るために必要...
-
COM+を使ってネットワーク越し...
-
特定のエクセルファイルを起動...
-
XMLDocumentのLoadとSave
-
0バイトのファイルを検知したい。
-
1行読み込んだ後に消去
-
excelを共有ファイルにすると行...
-
メールdbxファイルの開く方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
共有フォルダに誰が何にアクセ...
-
【Excel】[Expression.Error] ...
-
特定のエクセルファイルを起動...
-
Batch: フォルダ内の特定のファ...
-
VBAでCSVファイルが使用中かど...
-
月が変わったら自動でシートが...
-
tmpファイル なぜできる?削除...
-
AccessVBAで作成したExcelファ...
-
Access VBA を利用して、フォル...
-
(Excelマクロ)datファイルをエ...
-
事務の派遣で働いています。多...
-
Excel VBA 処理後データが重た...
-
excelを共有ファイルにすると行...
-
【アクセス】「ほかのユーザー...
-
XMLデータを変換し印刷する方法
-
CSVの項目行を削除して一つのフ...
-
mdbファイル フォームを開くと...
-
社内Excel共有ブックでの保存ト...
-
ファイルの途中に文字列を挿入
-
拡張子が「cda」のファイルを聞...
おすすめ情報
早速、ありがとうございます。
読み込みの順番はファイル名順
ファイル名は20210928〜20121210.csvの日付になってます。
当方は多少のVBA経験はありますがこのようなファイル読み込みからの経験がありませんので皆様のお知恵をお借りできれば幸いです。