
1週間程ずっと調べているのですがどうしてもわからず質問させていただきます。
システムから売上日計を集計するとCSVファイルとして出力されます。
ファイル名は20230826160630(西暦年月時分秒)_general_purpose.csvとなります。
そのファイルをエクセルに取込み、毎月の集計を行いたいのです。
例えば 集計するエクセルのSheet1(”データ”と名前を設定しています)に月曜日の日計を取り込むところまではできましたが、火曜日のCSVファイルを取り込もうとしたら月曜日の日計が上書きされてしまいます。
私としては、月曜日のデータの下の行に火曜日のデータ、水曜日のデータが取り込めたらいいなと思っています。
ちなみに売上日計ですので月曜日が10行分のデータだったり、火曜日は15行分のデータだったりします。
例)A1~A10は月曜日のデータが反映
A11~A25は火曜日のデータが反映
A26~A37は水曜日のデータが反映
▽
▽
▽
1か月分すべてSheet1(”データ”)に反映
わかりにくいかもしれませんが、ご教示お願いいたします。
No.6ベストアンサー
- 回答日時:
今まで出力した行の次の行から今回分を出力するようにしました。
尚、添付図のように1行目は、見出し行を作成しておいてください。
最初は、2行目から出力します。
CSVファイルの1~14行は、読み捨てるようにしました。
CSVファイルの15行以降からexcelのシートに取り込むようにしています。
Sub CSV入力1()
Dim varFileName As Variant
Dim intFree As Integer
Dim strRec As String
Dim strSplit() As String
Dim i As Long, j As Long
Dim maxrow As Long
Dim wrow As Long
varFileName = Application.GetOpenFilename(FileFilter:="CSV〇〇店売上日計(*.csv),*.csv", _
Title:="CSVファイルの選択")
If varFileName = False Then
Exit Sub
End If
maxrow = Cells(Rows.Count, "A").End(xlUp).Row '最終行取得
wrow = maxrow + 1 '書き込み開始行
intFree = FreeFile '空番号を取得
Open varFileName For Input As #intFree 'CSVファィルをオープン
i = 0
Do Until EOF(intFree)
Line Input #intFree, strRec '1行読み込み
i = i + 1
'最初の1~14行はスキップする。15行以降を処理する
If i > 14 Then
strSplit = Split(strRec, ",") 'カンマ区切りで配列へ
For j = 0 To UBound(strSplit)
Cells(wrow, j + 1) = strSplit(j)
Next
wrow = wrow + 1
End If
Loop
Close #intFree
End Sub

No.5
- 回答日時:
わかりにくいかもしれませんが、わたしが書くなら、こんな感じです。
とりあえず、取り込むファイル名は固定で書いています。ループもしていません。なので、実行する度に、同じデータが下に追加されます。
ループ、および、ファイル名の変更は、ご自分で追加してください。
Sub sample()
With Sheet1.QueryTables.Add(Connection:="TEXT;C:\temp\20230826160630(1暦年月時分秒)_general_purpose.csv", _
Destination:=Sheet1.Cells(Rows.Count, "A").End(xlUp).Offset(1))
.AdjustColumnWidth = False
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileCommaDelimiter = True
.Refresh 'BackgroundQuery:=False
.Delete
End With
End Sub
No.4
- 回答日時:
>このような場合の構文はどのようなものか教えていただきたいです。
1.現在のマクロの内容を提示してください。
2.CSVファイルの具体的な内容
(社外秘の場合は、レイアウトが判れば良いので、具体的な値は改ざんしたもで良いです)
3.A列にはCSVファイルのどの項目を設定しているのでしょうか。
4.特定のフォルダ内にCSVファイルが出力されると思いますが、
そのフォルダ内には、対象となるCSVファイルは複数ある場合もあるのでしょうか。(1回のマクロで複数のCSVファイルを処理)
5.処理済みとなったCSVファイルは、手作業などで、他のフォルダに移動しているのでしょうか?
上記の点が不明です。不明点が解消すれば良い回答がつきやすくなるかと。
ありがとうございます。遅くなりすみません。
Sub CSV入力1()
Dim varFileName As Variant
Dim intFree As Integer
Dim strRec As String
Dim strSplit() As String
Dim i As Long, j As Long
varFileName = Application.GetOpenFilename(FileFilter:="CSV〇〇店売上日計(*.csv),*.csv", _
Title:="CSVファイルの選択")
If varFileName = False Then
Exit Sub
End If
intFree = FreeFile '空番号を取得
Open varFileName For Input As #intFree 'CSVファィルをオープン
i = 1
Do Until EOF(intFree)
Line Input #intFree, strRec '1行読み込み
i = i + 1
strSplit = Split(strRec, ",") 'カンマ区切りで配列へ
For j = 0 To UBound(strSplit)
Cells(i, j + 1) = strSplit(j)
Next
'配列をそのまま入れる方法も、ただし全て文字列として入力される
'Range(Cells(i, 1), Cells(i, UBound(strSplit) + 1)) = strSplit
Loop
Close #intFree
Rows("1:14").Delete
End Sub
これをコピペしてファイル名を変えてしてみました。こうすると1日分だけは
反映しますが、次の日は昨日の分のデータを上書きされてしまいます。
No.2
- 回答日時:
こんにちは
単純に行うなら、記入する際にシートの「最終行の次の行」から記入するようにしておけば、順次データが蓄積されるようになります。
(推測するところ、現状は常に1行目(または2行目?)から、記入するようになっているのではないでしょうか?)
ただし、これだと同じ日に(誤って)2回実行すると、同じ内容のデータが書き足されてしまうということが起こり得ます。
(出力CSVは、必ず一日に一つだけという仮定ですが・・)
データ構成を変更しても良いのなら、A列(他の列でも良いです)に日付を付しておくことでデータの識別が可能になりますので、最初に日付を照合してから記入するようにすれば上記のようなことを防ぐことも可能になるでしょう。
(何らかのおかしな点があって、元データと照合したいような場合にも有効と思います。)
ありがとうございます。
以前も教えてくださった方ですね。いつもありがとうございます。
教えてくださったことをヒントに調べてみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) EXCELピボットテーブル関数について 2 2023/04/10 20:35
- Excel(エクセル) エクセルVBA オートフィルタでの絞り込みと並び替えについて 1 2023/07/08 13:08
- Visual Basic(VBA) VBA 連続する名前ごとに集計 3 2022/05/21 18:24
- 中途・キャリア 契約社員で在職中ですが、正社員目指して転職活動中です。 20代半ばの男です。 2社から内定を頂きまし 5 2022/04/29 13:39
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける 3 2022/09/10 07:55
- Excel(エクセル) EXCEL値貼り付け(ある条件のもと自動化) 5 2023/06/06 12:21
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- Excel(エクセル) IF 関数で「〇〇 という文字を含む場合」の分岐処理で表示された数字はSUMで数字集計できますか? 3 2022/08/02 16:29
- 数学 【どこが1番安いか ややこしい計算を解いて欲しい】 スポーツジム3社どこに通おうか迷っています A社 4 2022/10/18 01:06
- Excel(エクセル) VBA ふたつの同じ様式シートのセルをコピーしたい 2 2023/03/08 15:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
二分探索の平均探索回数
-
メモ帳(テキストデータ)をExc...
-
EXCEL2007の質問です。
-
RPGで0が非表示になる。0は0と...
-
COBOLの定義について
-
ドラゴンクエストのぼうけんの...
-
モジュラス103の算出方法について
-
Accessで該当データにフラグを...
-
EXCELVBAでSQLserverからデータ...
-
【エクセル】測定時間がバラバ...
-
この行は既に別のテーブルに属...
-
配列でデータが入っている要素...
-
カンマからスラッシュに
-
【VBA】データを入力後に,同一...
-
特定のデータの抽出方法を教え...
-
C# ソケット通信でデータ受信時...
-
C#で内部データの持つ方法
-
2,3度連続して入る同データ...
-
Excel vbaで、一行ずつコピーし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
【エクセル】測定時間がバラバ...
-
多量のSUMIF式を軽くしたい
-
配列でデータが入っている要素...
-
メモ帳(テキストデータ)をExc...
-
ユーザーフォームのテキストボ...
-
特定のデータの抽出方法を教え...
-
二分探索の平均探索回数
-
EXCELVBAでSQLserverからデータ...
-
Accessで該当データにフラグを...
-
VBA 空白セルを削除ではない方...
-
この行は既に別のテーブルに属...
-
Excel VBAでのオートフィルター...
-
[C言語] コメント文字列を無視...
-
エクセルで2つの時系列のデー...
-
アクセス2000で画像データ...
-
CString型の文字列連結について
-
カンマからスラッシュに
-
VBにおいてフォーム間の変数の...
-
<VB>String→Object
おすすめ情報
このような場合の構文はどのようなものか教えていただきたいです。
よろしくお願いします
2. CSVファイルのA1:AC14迄は関係ない項目なので消します。
A B C D E F ・・・・・
14 伝票No 日付 商品 売上個数 売上金額
15 1234 8/28 イチゴ 10 2000
16 2345 8/28 みかん 15 2500
18 3456 8/28 りんご 10 2000
19 4567 8/28 ぶどう 10 3000
というような表です。項目はAからAC、行はその日の売上次第で変わります。
3 実際のCSVファイルのA列は”伝票番号”です。
4 フォルダは毎日CSVファイルを入れていくので増えていきます。
5 仮に8月が終われば8月用のフォルダを作成して手作業で保存していこうと思っています。
これですこれです!!!!!!!!!!!!!!!!
嬉しすぎて感動しました。
本当にありがとうございました!
前回も適格な回答いただき本当に感謝しております。
ベストアンサーに選ばせていただきます。