プロが教えるわが家の防犯対策術!

こんばんは。
EXCEL VBAでつぎのようなことができないでしょうか?
1.シート1に日付別の氏名別の勤怠が入っています。
2.月末に氏名別、日付別のタイムカード形式で自動でシートを作成したいのです。(tmpシートのような形式で)
do loop を使えばできそうな感じですが初心者でよくわかりません。
教えてください。よろしくお願いします。

A 回答 (2件)

PC対応のタイムレコーダーを使っていますが付属のソフトの使い勝手が悪く、CSVでデータを取って社員ごとに1か月のシートにして作業しています。


なので、ご希望のことは充分に可能だと思います。

>1.シート1に日付別の氏名別の勤怠が入っています。
この表現から想像すると、毎日(その日に)出社している社員の勤怠データを記録しているのでしょうか?
欠勤した社員のデータが存在しなければ社員毎にデータ数が異なるので若干厄介ですが対応方法はいろいろあります。

ざっくり考え方を示します。


1.一人ごとに異なるデータを全て動的配列で宣言します。 (氏名/出勤時刻/退社時刻/日付 など)
 また作業用の変数をいくつか使います

2.締間のデータは全て1シートにして、氏名(できれば所属/社員コード順が後の使い勝手がいいですね)でソートしましょう
 ソートの目的は個人ごとのデータをまとめることと、空白行をなくし、全体をひとつの矩形にすることです。
 蛇足ですが社員ごとには日付順を維持しましょう

3.社員ごとにデータの数を確認します

(例)
社員数=1
最大日数=1
個別日数=0
全体行数=cells(1,1).end(xldown).row
For a=1 to 全体行数-1
if cells(a,氏名の列).value<>cells(a+1,氏名の列).value then
社員数=社員数+1
   if 個別日数>最大日数 then 最大日数=個別日数
   個別日数=0
else
個別日数=個別日数+1
end if
next a

上記で社員数と最大日数が得られるはず(たぶん・・・^^;;)なので動的配列を再宣言します

Redim 氏名(社員数)   ’氏名は1次元でOK
Redim 出勤時刻(社員数,最大日数),略 ’社員別日別データは2次元


4.配列にデータを格納します
例)
社員数=1
個別日数=0
For a=1 to 全体行数
If cells(a,氏名の列).value<>cells(a+1,氏名の列).value then
氏名(社員数)=Cells(a,氏名の列).value
社員数=社員数+1
個別日数=0
Else 
個別日数=個別日数+1
   日付(社員数,個別日数)=cells(a,日付の列).value    
出勤時刻(社員数,個別日数)=cells(a,出勤時刻の列).value
   ・・・(略)    
  End If
Next a


5.社員ごとにシートを作りデータを入れます
例)
For s1=1 to 社員数
  ActiveWorkbook.Sheets.Add Before:=Worksheets(Worksheets.Count)
  cells(1,1)value=氏名(s1)
  cells(2,1)value=”日付”  ’タイトル
  cells(2,2)value=”出勤時刻”’タイトル
   ・・・(略)    
  For s2=1 to 最大日数
    If 日付(s1,s2)=0 then Exit For '個別日付が0になるとループから抜ける
    Cells(S2+2,1).value=日付(s1,s2)
    Cells(S2+2,2).value=出勤時刻(s1,s2)
    ・・・(略)    
  Next s2
Next s1



サンプルコードっぽく見えますがまるっきり動作確認していません。きっと希望の動きはしないと思うので要調整です。

また、3.と4.のコードは近似しているのでもうちょっとすっきりさせたいのですが、目的達成を優先して泥臭く繰り返しています(^^;

参考までに
    • good
    • 0

漠然とした質問なので、



「できるでしょう。」という回答にしかなりません。
もっと具体的に回答するなら、『do loopとかif文とか使えばできるでしょう。』

漠然と全体を質問するのでなく、一度やってみて、具体的にいきづまったところを質問すれば適切な回答が得られると思いますよ。

参考までに
http://pc.nikkeibp.co.jp/pc21/sample/200312/k_fx …
http://www.vector.co.jp/soft/win95/business/se35 …
http://www.ncm07.jp/EXCEL-database/case/index1.h …
http://www.kaigyo-do.com/09.html
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!