Excel VBA 質問スレッド No.822 (解決済)

CSVリストから月報形式報告書に差し込み印刷

投稿者 : ぶぶる     投稿日時 : 2022/06/22(Wed) 18:57:31     OS : Windows 10     EXCEL : Excel 2016
勤怠システムから出力した全社員分の一覧データ(CSV)から
一人1枚の勤務月報Excelフォーマットに差し込み印刷をかけたいです。

例:
一覧(CSV)
社員コード,社員名,勤務日,出勤時刻,退勤時刻,残業時間
A0001,山田太郎,2022/6/1,9:00,19:00,1:30
以下山田太郎の6/30まで
A0002,田中肇,2022/6/1,9:00,19:00,1:30
以下田中肇の6/30まで
・・・の形式で全社員分

差し込み先レイアウト

社員番号 A0001
氏名 山田太郎

A  | B |C |D
日付|出勤時刻 |退勤時刻 |残業
6/1 9:00  19:00    1:30
6/2



6/30

1名毎に1日~末日までのデータを抽出して
月報フォーマットに差し込み印刷
→全社員分繰り返し としたいのですが
VBAでどのように組んだらよいか教えていただきたく。

[返信 1] Re : CSVリストから月報形式報告書に差し込み印刷
投稿者 : てらてら     投稿日時 : 2022/06/22(Wed) 19:49:21
こんにちは。

試してませんが、参考にしてください。

Sub macro1()

Dim wsCSV As Worksheet
Dim ws As Worksheet
Dim i As Long
Dim name As String

Set wsCSV = Worksheets("csv") 'CSVシートにデータを貼り付けたとする

name = ""
i = 2
j = 5 '差し込み先レイアウトの日付は5行目だとする

Do While wsCSV.Cells(i, "A") <> ""

If name <> wsCSV.Cells(i, "B") Then '社員名が変わったらシート追加
name = wsCSV.Cells(i, "B")
Set ws = Sheets.Add(After:=Sheets(Sheets.Count))
ws.name = name
j = 5
ws.Range("B2") = wsCSV.Cells(i, "A") '社員番号
ws.Range("B3") = wsCSV.Cells(i, "B") '社員名

End If

ws.Cells(j, "A") = wsCSV.Cells(i, "C") '勤務日
ws.Cells(j, "B") = wsCSV.Cells(i, "D") '出勤時間
ws.Cells(j, "C") = wsCSV.Cells(i, "E") '退勤時間
ws.Cells(j, "D") = wsCSV.Cells(i, "F") '残業時間
j = j + 1

i = i + 1

If i > 10000 Then Exit Sub '暴走防止
Loop

End Sub

[返信 2] Re : CSVリストから月報形式報告書に差し込み印刷
投稿者 : ぶぶる     投稿日時 : 2022/06/23(Thu) 09:03:49
■[返信 1] てらてらさん(2022-06-22 19:49:21)の記事
> こんにちは。

> 試してませんが、参考にしてください。

有難うございます。全員分のシートが作成されることは確認できました。
個人のシートを作成する際に、新規シート作成ではなく、
罫線、計算式、書式などをあらかじめ設定したフォーマット用のシート「format」で作成するにはどう変えれば宜しいでしょうか。

[返信 3] Re : CSVリストから月報形式報告書に差し込み印刷
投稿者 : てらてら     投稿日時 : 2022/06/23(Thu) 09:38:58
Worksheets("format").Copy After:=Worksheets(Worksheets.Count)
Set ws = ActiveSheet
ws.name = name

こんな感じですかね。転記する場所はうまく調整してください。

[返信 4] Re : CSVリストから月報形式報告書に差し込み印刷
投稿者 : ぶぶる     投稿日時 : 2022/06/23(Thu) 10:03:25
■[返信 3] てらてらさん(2022-06-23 09:38:58)の記事
> Worksheets("format").Copy After:=Worksheets(Worksheets.Count)
> Set ws = ActiveSheet
> ws.name = name

> こんな感じですかね。転記する場所はうまく調整してください。


ありがとうございました!
参考にさせていただきます。

当掲示板について
返信入力フォーム
お 名 前  :
内  容   :
ステータス  : この質問を解決済みにする

認証コード  :
        キャプチャ画像


( 処理日時 : 2022-07-07 12:49:41 )

Page
Top