複数店舗の人員管理をしていますが、期日内に仕事が間に合わないので、VBEで解決できる方教えてください。
下記の表を
A C D E F G H I …
1 [ 山田 ][ 佐藤 ]…
2 日 曜 応援先 入 退 応援先 入 退 …
31/1 火 A店 9:00 19:00 …
41/2 水 B店 9:00 13:00…
51/3 木 C店 9:00 19:00 B店 9:00 18:00…
・
・
このタイムカード状のシートから一覧表
A B C D E F …
6 日 曜 応援先 氏名 入 退 …
71/1 火 A店 山田 9:00 19:00…
81/2 水 B店 佐藤 9:00 13:00…
91/3 木 C店 山田 9:00 19:00…
101/3 木 B店 佐藤 9:00 18:00…
・
・
以前にも似たような質問をしたのですが、
自分ではうまく転記されません。
D1:F1,G1:I1は結合してるのですが、しない方がやりやすいのでしょうか?上の表が見にくかったらすみません。誰か回答お願いします。
No.3ベストアンサー
- 回答日時:
No2です。
作成すべき一覧表のフォーマットを誤解していました。次のように訂正します。
Sub test1()
Dim r1 As Long
Dim r2 As Long
Dim c1 As Integer
Dim km
km = Array("日", "曜日", "応援先", "氏名", "入", "退")
Sheets("Sheet2").Cells.ClearContents
Sheets("Sheet2").Columns("A:A").NumberFormatLocal = "m/d;@" '月日(=A)列の表示形式設定
For k = 0 To 5
if k>=4 Then
Sheets("Sheet2").Cells(6, k + 1).Value = km(k) '項目名表示
Columns(n * 4 + k + 3).NumberFormatLocal = "h:mm;@" '入/退時刻列の表示形式設定
End If
Next k
For r1 = 3 To Sheets("Sheet1").Range("A65536").End(xlUp).Row '3行目から下の行に移動
For c1 = 4 To 256 Step 3 '4列目(D列)から3列おきに右の列に移動
If Sheets("Sheet1").Cells(r1, c1) <> "" Then 'r1行のそれぞれの応援先欄のセルにデータがあるなら
r2 = Sheets("Sheet2").Range("A65536").End(xlUp).Row + 1 '書き込みセルの行No
Sheets("Sheet2").Cells(r2, 1).Value = Sheets("Sheet1").Cells(r1, 1) '日を転記
Sheets("Sheet2").Cells(r2, 2).Value = Sheets("Sheet1").Cells(r1, 3) '曜日を転記
Sheets("Sheet2").Cells(r2, 3).Value = Sheets("Sheet1").Cells(r1, c1) '応援先を転記
Sheets("Sheet2").Cells(r2, 4).Value = Sheets("Sheet1").Cells(1, c1) '氏名を転記
Sheets("Sheet2").Cells(r2, 5).Value = Sheets("Sheet1").Cells(r1, c1 + 1) '入時刻を転記
Sheets("Sheet2").Cells(r2, 6).Value = Sheets("Sheet1").Cells(r1, c1 + 2) '退時刻を転記
End If
Next c1
Next r1
msg = MsgBox(prompt:="終了しました", Buttons:=vbExclamation + vbOKOnly, Title:="")
End Sub
親切にご回答いただきありがとうございます。
返答が遅くなり申し訳ありません。
VBEを見れば、何となく分かるのですが、VBEの組立てになると、いまいち分からなくなってしまうんですよね。(^^;)
エラー表示が出てしまったのですが、
>If Sheets("Sheet1").Cells(r1, c1) <> "" Then 'r1行のそれぞれの応援先欄のセルにデータがあるなら
型が一致しませんと表示されてしまいました。Sheet名も合っているのですが、原因が分かりません。分かりましたらお願いします。
No.4
- 回答日時:
No.3です。
小生のパソコンではご指摘のエラーは起きませんでした。
故意にコードを変え、「型が一致しません。」エラーが起きるのか試行錯誤しましたが、「型が一致しません。」エラーが起きる要因は見つかりませんでした。
エラーメッセージ画面が出た際、「デバッグ」ボタンをクリックして見るとエラー行が黄色く色塗りされます。
「型が一致しません。」エラーが生じた際、色塗りされたのは「If Sheets("Sheet1").Cells(r1, c1) <> "" Then 'r1行のそれぞれの応援先欄のセルにデータがあるなら」の行だったでしょうか。
この行では「型が一致しません。」エラーは起きることはないように思います。
再確認をお願いします。
ただ回答したコードでは、作成したい一覧表の形式に沿っていないところがありましたので次の通り訂正します。(10行目と11行目の入れ替え)
(誤)
(10行) if k>=4 Then
(11行) Sheets("Sheet2").Cells(6, k + 1).Value = km(k) '項目名表示
(正)
(10行) Sheets("Sheet2").Cells(6, k + 1).Value = km(k) '項目名表示
(11行) if k>=4 Then
No.2
- 回答日時:
質問というより、依頼の感ですが(笑)、お困りのご様子なので・・
質問内容にて仰っている「下記の表」と作成したい「一覧表」が各シートとも一枚のシートという前提でなら、次のVBAでいかがでしょう。
Sub test()
Dim r1 As Long
Dim r2 As Long
Dim c1 As Integer
Dim km
km = Array("応援先", "氏名", "入", "退")
Sheets("Sheet2").Cells.ClearContents
Sheets("Sheet2").Columns("A:A").NumberFormatLocal = "m/d;@" '月日(=A)列の表示形式設定
Sheets("Sheet2").Cells(6, 1).Value = "日"
Sheets("Sheet2").Cells(6, 2).Value = "曜日"
For n = 0 To 62
For k = 0 To 3
Sheets("Sheet2").Cells(6, n * 4 + k + 3).Value = km(k) '項目名表示
If k >= 2 Then
Columns(n * 4 + k + 3).NumberFormatLocal = "h:mm;@" '入/退時刻列の表示形式設定
End If
Next k
Next n
For r1 = 3 To Sheets("Sheet1").Range("A65536").End(xlUp).Row '3行目から下の行に移動
r2 = Sheets("Sheet2").Range("A65536").End(xlUp).Row + 1 '書き込みセルの行Noを探し
Sheets("Sheet2").Cells(r2, 1).Value = Sheets("Sheet1").Cells(r1, 1) '日を転記
Sheets("Sheet2").Cells(r2, 2).Value = Sheets("Sheet1").Cells(r1, 3) '曜日を転記
For c1 = 4 To 256 Step 3 '4列目(D列)から3列おきに右の列に移動
If Sheets("Sheet1").Cells(r1, c1) <> "" Then '応援先が空欄でないなら
c2 = Sheets("Sheet2").Cells(r2, 256).End(xlToLeft).Column + 1 '書き込セルみ列番号を探し
Sheets("Sheet2").Cells(r2, c2).Value = Sheets("Sheet1").Cells(r1, c1) '応援先を転記
Sheets("Sheet2").Cells(r2, c2 + 1).Value = Sheets("Sheet1").Cells(1, c1) '氏名を転記
Sheets("Sheet2").Cells(r2, c2 + 2).Value = Sheets("Sheet1").Cells(r1, c1 + 1) '入時刻を転記
Sheets("Sheet2").Cells(r2, c2 + 3).Value = Sheets("Sheet1").Cells(r1, c1 + 2) '退時刻を転記
End If
Next c1
Next r1
msg = MsgBox(prompt:="終了しました", Buttons:=vbExclamation + vbOKOnly, Title:="")
End Sub
No.1
- 回答日時:
※私の意見に対しての批判は、あえてお受け致しますが返答は致しませんので、何卒ご了承ください。
この時間まで、回答がないところを見ると、VBAで処理するにしてもかなり難しいのではないでしょうか。
よしんば、プログラムを書ける人がしたとしても、実際に検証してからでないと回答として出せないでしょうし。
あなた自身も、うまくいかないからといって、プログラムを修正するためのやり取りに時間を割くのは惜しいはず。
地道な作業で間に合わないとおっしゃるなら、間に合わないなりの仕事の進め方(善後策)があるのではありませんか。
更に個人的な意見を言わせて頂ければ、規模はわかりませんが、複数店舗の勤怠管理(就業管理)をExcelで、しかもこのような大変な思いをされて扱われているのは、非常に心苦しいです。
今はパソコンでも簡単に扱える就業管理ソフトはいくらでもありますので、御社でも是非導入を進められるように切に望みます。
※大変生意気なことを申しておりますことをお詫び致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- MySQL 【MySQL】本当に困っているので、助けてください。よろしくお願いします。 3 2023/06/03 14:24
- Visual Basic(VBA) 【ExcelVBA】動的にボタン、ボタン名を生成できますか? 7 2022/04/08 12:54
- PHP MySql PHP 2つのテーブルをJOINで結合 user_idで抽出 1 2023/01/03 14:04
- Excel(エクセル) エクセルで休憩時間を引く時と、引かない時の数式 3 2022/11/05 11:48
- Excel(エクセル) EXCEL 関数を教えてください。(A列の同じ値が複数ある場合vlookupで出来ますか) 4 2022/12/07 20:54
- Visual Basic(VBA) 先ほど、回答者様によって教えていただいたのですがどうしたらいいか分かりません。 ユーザーフォーム上に 2 2023/02/21 22:25
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- ラジオ ニッポン放送辛坊治郎ズームにて「ゲストが嫌いな人の悪口を言ってしまい、大騒ぎ!」さて、誰? 0 2023/04/04 06:28
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
トラックへの荷物の積みかたを...
-
力率80%の根拠
-
ACアダプタについて教えてくだ...
-
「電流を印加する」という表現...
-
クランプ回路
-
電圧をVやUで表すのはなぜ?
-
共振回路の応用例
-
エミッタ接地増幅回路について...
-
検流計と電流計の違い
-
立ち上がり電圧について。たと...
-
オペアンプ/反転増幅器/頭打ち
-
並列回路において、抵抗Rにおけ...
-
銅損試験と鉄損試験
-
電気回路のπ型回路の2端子対回...
-
ハイパスフイルタが微分回路に...
-
アプリ life360 について、 ネ...
-
「ヒューズ」の選定のしかたを...
-
4入力XORの論理式
-
電圧を下げる方法
-
EVT(GPT)の電圧比について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCEL VBA 行の値を累計したい...
-
剛体の力学の問題 正三角形
-
材料力学の問題ですが
-
トラックへの荷物の積みかたを...
-
電気回路の閉路方程式の問題
-
熱量計算について
-
VBAでグループごとソートす...
-
エクセル(マクロ?)の出力結...
-
iPadAir2か、iPad mini3か、PS4
-
μって?
-
球殻状のコンデンサの電界を求...
-
作った表から一覧表を作成をしたい
-
力率80%の根拠
-
アプリ life360 について、 ネ...
-
モーターの電流値が上がるのは...
-
「電流を印加する」という表現...
-
400V 3相4線式について...
-
幹線の保護開閉器の計算式
-
パルスとレベルについて
-
ACアダプタについて教えてくだ...
おすすめ情報