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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
配列でデータが入っている要素...
-
VBA 空白セルを削除ではない方...
-
S9タイプからXタイプにデータ...
-
【エクセル】測定時間がバラバ...
-
EXCELVBAでSQLserverからデータ...
-
メモ帳(テキストデータ)をExc...
-
VBAを使ってOutlookメール本文...
-
多量のSUMIF式を軽くしたい
-
CString型の文字列連結について
-
カンマからスラッシュに
-
VBA 毎日取得するデータを順番...
-
エクセルで2つの時系列のデー...
-
ビットシフトについて
-
C# でDataTableの更新を高速化...
-
Excelで最大値と最小値を記録し...
-
この行は既に別のテーブルに属...
-
バーコードリーダーの読込デー...
-
「0x00ff0000」?
-
ページ数を求めたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
【エクセル】測定時間がバラバ...
-
多量のSUMIF式を軽くしたい
-
VBA 空白セルを削除ではない方...
-
配列でデータが入っている要素...
-
メモ帳(テキストデータ)をExc...
-
ブレーカー落ちで壊れたりしな...
-
特定のデータの抽出方法を教え...
-
この行は既に別のテーブルに属...
-
EXCELVBAでSQLserverからデータ...
-
CString型の文字列連結について
-
[C言語] コメント文字列を無視...
-
Accessで該当データにフラグを...
-
エクセルで2つの時系列のデー...
-
S9タイプからXタイプにデータ...
-
プログラミング python pandas ...
-
ユーザーフォームのテキストボ...
-
カンマからスラッシュに
-
Excel VBAでのオートフィルター...
-
C# でDataTableの更新を高速化...
おすすめ情報
このような場合の構文はどのようなものか教えていただきたいです。
よろしくお願いします
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月用のフォルダを作成して手作業で保存していこうと思っています。
これですこれです!!!!!!!!!!!!!!!!
嬉しすぎて感動しました。
本当にありがとうございました!
前回も適格な回答いただき本当に感謝しております。
ベストアンサーに選ばせていただきます。