[[20190323175753]] 『CSVデータの出力』(総務歴半年) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『CSVデータの出力』(総務歴半年)

マクロ知識なしのザコです。

非常に厚かましい話なのは重々承知の上でご相談です・・・
完成品をご作成頂ければ幸いです。

よろしくお願い致します!m(__)m

セルとセルの状態 内容 入力例


A1:B2結合 年を表す数字 2019
D1:D2結合 月を表す数字 3
A10:A24 日を表す数字 12
D9 出社の文字 出社
D10:D24 出社の値 9:00
E9 退社の文字 退社
D10:D24 退社の値 18:00
H1:2結合 従業員コード 17
J6:L7結合 従業員名 川崎太郎

★欲しいデータ
・出力形式 CSVコンマ区切り
・ファイル名 従業員名.csv
・項目名
従業員コード H1:H2結合箇所の値
従業員名 J6:L7結合箇所の値
勤怠区分 D9またはE9で変化 D9の場合は1、E9の場合は2
時間 勤怠区分で変化 1の場合はD10:D24の値。2の場合はD10:D24の値

入力例出社の場合 017,川崎太郎,1,201903120900
入力例退社の場合 017,川崎太郎,2,201903121800

出社退社の全データを出力したいです。
ところどころ結合されているのですが、結合は解除されても問題ありません。

厚かましい話、本当に申し訳ないです!

当たり前ですが、頂いたデータ、必ず調べて同じお願いは二度としないよう勉強します!

どうか、よろしくお願い致しますm(__)m

< 使用 Excel:Office365、使用 OS:Windows10 >


日がかわったり、勤怠区分がかわれば、
別のCSVファイルを作成するのでしょうか?

(マナ) 2019/03/23(土) 18:41


↑それとも、追記していくのでしょうか?

(マナ) 2019/03/23(土) 18:49


 これって川崎さんの15日分の勤怠データってことなのかなぁ・・・

 >A10:A24 日を表す数字 12 
 この[12]の解釈が微妙・・・。

 いずれにせよ、
 打刻が無い行があるかどうか、また、あるなら読み飛ばすのか出力するのか
 出力するなら、その行の表記はどうなるのか

 とか、

 あと、
 24時越えがあるかどうか、また、あるならその日時の表記はどうなるのか

 それに、
 そもそも出力順は、
 出社
 退社
 出社
 退社
 の15セット(30行)

 なのか
 出社15行
 退社15行

 なのか、実はもっと違うレイアウトなのか

 ・・・とかどうなんでしょね?
 完成品をご所望なら、その辺の仕様も必要になってくると思いますよ。

 あ。別に「私が作りましょう!」って意味じゃないですからねー ^^;

(白茶) 2019/03/23(土) 19:46


返事が遅くなりまして申し訳ないです!

まずは間違いがありましたので訂正させて頂きます!

お願いする立場なのに情けない!Orz 本当にザコですみません!!

{誤}
時間 勤怠区分で変化 1の場合はD10:D24の値。2の場合はD10:D24の値
{正}
時間 勤怠区分で変化 1の場合はD10:D24の値。2の場合はE10:E24の値

マナさん白茶さんアドバイスありがとうです!

Excelファイルに従業員は複数シートで分かれて、1シート1名のみのデータとなります!

A10:A24 の数字は、例えばA10には数字の1としか入力されていませんが、

この1は1日を表していて、A24まで

1
2
3
4
5

のように15まで入っています!

1A1:B2の結合されているところに入力されているのが年の数字で、2019と入力されています!

D1:D2の結合されているところは月で、3と入力されています!

勤怠の区分が変わっても、まとまっていてもそうでなくても出力順は不問で、例えば

出社
出社
出社
退社
退社
退社

でも

出社
退社
出社
退社
出社
退社

でも問題ないです!

もっと言えば打刻時刻が

未来
過去
未来

のようなバラバラに入力されていても、入力されている内容が

従業員コード【H1:2結合に入っています】,従業員名【J6:L7結合に入っています】,勤怠区分【1か2で1が出社で2が退社】,打刻時刻【スラッシュやコンマなしで例えば2019年3月12日が9時出社なら201903120900】

と、この4つのデータが横並びで

従業員コード,従業員名,勤怠区分,打刻時刻

の順番で入っていて、コンマ区切りのCSVデータであれば日付・OKです!

1日から15日までのデータがほしいです!

よろしくお願いします!m(__)m

(総務歴半年) 2019/03/26(火) 11:30


 >Excelファイルに従業員は複数シートで分かれて、1シート1名のみのデータとなります!

 ・・と言うことは、当該ブックの全シートが対象ってこと?(全従業員を一つのCSVファイルに出力?)

(半平太) 2019/03/26(火) 12:20


 > 打刻が無い行があるかどうか、また、あるなら読み飛ばすのか出力するのか
 > 出力するなら、その行の表記はどうなるのか
 >
 > 24時越えがあるかどうか、また、あるならその日時の表記はどうなるのか

 この疑問への回答は?

(半平太) 2019/03/26(火) 12:25


半平太さん、すみません!フォローありがとうございます!m(__)m

ブック内のシートで対象なのとそうでないのとがあるので、シートごとに目で確認してから実行が必要だというややこしい状態の為、シート1つ分のデータが取得できればOKです!

打刻の有無につきましては、打刻の無い日は、まるっと無視して打刻のある日のデータだけを抽出がうれしいです!

24時超えはないです!

漏れまくってすみませんでした!

よろしくお願いします!m(__)m
(総務歴半年) 2019/03/26(火) 12:50


 ファイル名は「従業員名.csv」と決まっているので、2人目を作ると、
 最初に作った1人目のファイルが無くなりますが、いいんですね?

 標準モジュール (対象シートをアクティブにして実行)
 ↓

 Sub makeCSVf()
     Dim ws As Worksheet
     Dim fixedPhrase1 As String
     Dim fixedPhrase2 As String
     Dim DAYnTIME1    As String
     Dim DAYnTIME2    As String
     Dim fullPath As String
     Dim Vals
     Dim RW As Long

     Set ws = ActiveSheet

     fullPath = ActiveWorkbook.Path & "\従業員名.csv"

     Open fullPath For Output As #1

     With ws
         Vals = .Range("A10", .Cells(.Rows.Count, "A").End(xlUp)).Resize(, 5).Value

         fixedPhrase1 = .[TEXT(H1,"000"",""")&J6&",1,"&TEXT(A1*100+D1,"0")]
         fixedPhrase2 = .[TEXT(H1,"000"",""")&J6&",2,"&TEXT(A1*100+D1,"0")]
     End With

     For RW = 1 To UBound(Vals)
         If Vals(RW, 1) <> "" Then
             DAYnTIME1 = Format(Vals(RW, 1), "00") & Format(Vals(RW, 4), "hhnn")
             DAYnTIME2 = Format(Vals(RW, 1), "00") & Format(Vals(RW, 5), "hhnn")
             Print #1, fixedPhrase1 & DAYnTIME1
             Print #1, fixedPhrase2 & DAYnTIME2
         End If
     Next RW

     Close #1
     MsgBox "完了"
 End Sub

(半平太) 2019/03/26(火) 13:48


半平太様っ!ありがとうございます!!!

言葉足らず舌足らずのポンコツ野郎ですみませんっ!

CSVの名前ですが、従業員.csvの固定ではなく、J6:L7のセルが結合されたところに入力されている従業員名を採用して、例ですと「川崎太郎.csv」のようにしたいです!

あと、出社・退社のデータに「9:00」とか「18:00」とか入っていない『空白』の日は従業員コード,従業員名,勤怠区分,打刻時刻これらがまるまるっと無し、無視ですと助かります!m(__)m

ぶ厚かましい要望、本当にすみません!!!

よろしくお願いします!m(__)m

(総務歴半年) 2019/03/26(火) 14:37


 >例ですと「川崎太郎.csv」のようにしたいです! 

 言われてみると、そう解釈するのが自然でした。

 やっと視界が開けてきた感じです。

 とりあえず。
   ↓
 Sub makeCSVf()
     Dim fixedPhrase1 As String
     Dim fixedPhrase2 As String
     Dim DAYnTIME1    As String
     Dim DAYnTIME2    As String
     Dim fullPath As String
     Dim Vals
     Dim RW As Long

     With ActiveSheet
         Vals = .Range("A10", .Cells(.Rows.Count, "A").End(xlUp)).Resize(, 5).Value
         fullPath = ActiveWorkbook.Path & "\" & .Range("J6").Value & ".csv"

         Open fullPath For Output As #1

         fixedPhrase1 = .[TEXT(H1,"000"",""")&J6&",1,"&TEXT(A1*100+D1,"0")]
         fixedPhrase2 = .[TEXT(H1,"000"",""")&J6&",2,"&TEXT(A1*100+D1,"0")]
     End With

     For RW = 1 To UBound(Vals)
         If Vals(RW, 1) <> "" And Vals(RW, 4) <> "" And Vals(RW, 5) <> "" Then
             DAYnTIME1 = Format(Vals(RW, 1), "00") & Format(Vals(RW, 4), "hhnn")
             DAYnTIME2 = Format(Vals(RW, 1), "00") & Format(Vals(RW, 5), "hhnn")
             Print #1, fixedPhrase1 & DAYnTIME1
             Print #1, fixedPhrase2 & DAYnTIME2
         End If
     Next RW

     Close #1
     MsgBox "完了"
 End Sub

(半平太) 2019/03/26(火) 15:04


すげーーーーーーーー!!!!!!!!

語彙力無くて、すげーしか湧いてこない!

半平太様!!!

完璧!!!!! 100億パーコンプリートです!!!!!

Excelの達人て本当にいるんだと、めちゃくちゃ感動してます!!!

ジーニアス半平太御師匠様に感謝!!!

お忙しいところ、本当にありがとうございました!!!!!
(総務歴半年) 2019/03/26(火) 15:17


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.