[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『シフト表から日付を指定しその日の出勤者を割り出したい』(かげやま)
検索しこちらまでやってきました、
http://www.excel.studio-kazu.jp/kw/20100118144139.html#comment
を見て、一列だけの出勤者を再現することは出来たのですが、
もう少し便利にすることは可能でしょうか…
A列(A2以下)に勤務しているものの名前、
1行目(B1:AF1)に日付が。
表内には早、遅、休が入力されています。
イメージとしては以下です。
12345…
Aさん 早遅休早早…
Bさん 遅休遅早早…
Cさん 休早早休遅…
…
ここから、同じワークシート内に
=TODAY()の早出⇒●さん
=TODAY()の遅出⇒○さん
=TODAY()の休 ⇒◎さん
と表示することは出来るでしょうか?
それぞれのシフトが一人とは限らない場合もあります。
どなたかお力お貸しくださると幸いです
どうぞよろしくお願いします
< 使用 Excel:Excel2016、使用 OS:Windows10 >
こんばんは ^^ つくってみました。 Dateにプラスマイナスして様子みてください。 Option Explicit Sub main() Dim Bary, 早, 遅, 休 Dim i As Long Dim X As Long Dim Td As Date With Worksheets("Sheet1") Bary = .Range("A1").CurrentRegion Td = Date X = WorksheetFunction.Match(Format(Td, "yyyy/m/d"), WorksheetFunction.Index(Bary, 1, 0), 0) For i = 2 To UBound(Bary, 1) Select Case Bary(i, X) Case "早" 早 = 早 & Bary(i, 1) & "," Case "遅" 遅 = 遅 & Bary(i, 1) & "," Case "休" 休 = 休 & Bary(i, 1) & "," End Select Next MsgBox Td & " の早出は" & Left(早, Len(早) - 1) & Chr(10) & _ Td & " の遅出は" & Left(遅, Len(遅) - 1) & Chr(10) & _ Td & " の休は" & Left(休, Len(休) - 1) End With End Sub (隠居じーさん) 2019/04/20(土) 18:55
A列には何行目まで名前が入力されているのか 結果を同じシートのどこに表示したいのか 分かるように質問してください。
A2:A10に名前 結果表示は13行目から
A B C D 13 早 14 遅 15 休
A13:A15には 早、遅、休 とだけ入力
B13 =IFERROR(INDEX($A:$A,SMALL(IF(INDEX($B$2:$AF$10,0,DAY(TODAY()))=$A13,ROW($A$2:$A$10)),COLUMN(A1))),"")
Ctrl+Shift+Enter で確定し、右と下にコピー
COLUMN(A1) はA1セルの値とは関係ありません。変更しないように。
以上、参考まで (笑) 2019/04/21(日) 12:06
マクロでの設定ありがとうございました、設定してみたのですが、
実行してみると、構文エラーが出てしまいました
Select Case Bary(i, X)がドラッグされた状態になり、
Sub main()が黄色でハイライトされました。。
ううむ、難しいです、ありがとうございます!!
»(笑)さん
すみません、、詳細にお伝えした方が良かったですね
表示する場所も特にこだわりありませんでした
成員は11人となっています
こちらでA12まで入力したものでやってみたところ表示すること出来ました!
ありがとうございます!!
追加の質問となってしまうのですが、これを翌日のもので出すことも出来ますか?
DAY(TODAY())の部分をDAY(TODAY()+1)やDAY(TODAY())+1、
別のセル(AF17)に前記したもの入力したものを入力など試したのですが、
+1がつくと途端にIFERRORのエラーの場合の値である空白になってしまいます。
もし可能であれば教えていただけると幸いです。
(かげやま) 2019/04/22(月) 17:07
早・遅・休・QのなかでQだけに上記のエラーが出ていたようだったので
暫定的にQ=きというふうにひらがなに置換したところ+1をしても動いてくれました!!
アルファベットで出来る方法あれば楽なので、
お助け頂けたら何よりです!!
よろしくお願いします
(かげやま) 2019/04/22(月) 17:27
処理対象シート名 Sheet1 です。 A B C D E F G 1 氏名 4月1日 4月2日 4月3日 4月4日 4月5日 4月6日 ....4月30日 2 A2 休 休 遅 遅 早 早 3 B3 遅 遅 早 早 早 休 4 C4 早 早 早 休 休 遅 5 D5 休 遅 遅 早 早 早 6 E6 遅 遅 早 早 早 休 7 F7 遅 早 早 早 休 休 8 G8 早 早 早 休 休 遅 9 H9 早 早 休 休 遅 遅 10 I10 早 休 休 遅 遅 早
上記表を使用、日付欄はシリアル値です。。。で一応、動作確認はしてあるのですが。 どこか相違点等、御座いますでしょうか。 (隠居じーさん) 2019/04/22(月) 18:30
今データ触れる状況でなく、エラー番号は明日以降確認させていただければと思いますm(_ _)m
すみません。。
日付欄、表示は日付(4/1)になっていますが
標準ですと数字の羅列になっていたのでシリアル値での入力になっているはずです
マクロは連続印刷くらいでしか(これもおおよそコピペさせて頂きました)
使ったことがなく…
あとは簡単なマクロ記録くらいですね
自分で組むというのはとてもとても…勉強になりますありがとうございます
無知に等しいのでヘルプもきちんとできているかわからずご迷惑おかけしていると思います
お付き合い頂きありがとうございます!
(かげやま) 2019/04/22(月) 18:39
拝見いたしました、使用したい表と相違ないです
なのでますます私の入力ミスの可能性がたかまりましたかね…
(かげやま) 2019/04/22(月) 18:42
>>なのでますます私の入力ミスの可能性がたかまりましたかね… いえ、 とんでもないです。私のミスかもしれませんです。 後ほど、一部変更し、アップいたします。よろしければ、 お手すきの時にでもお試しください。 m(_ _)m (隠居じーさん) 2019/04/22(月) 18:52
標準モジュールへコピペしてください。 一部、日付の検索方法を変えてみまし た。エラー処理も入れてみましたので、 もし表示されるメッセージが有れば、 教えて下さい。一応、自己解決された、 とのことですし、何かと御多忙の事と ご推察いたしますので、ご興味が御有 りなら、お手すきのときにでも、で結 構でございます 。。。 でわ m(_ _)m
Option Explicit Sub Sample02() Dim Bary, 早, 遅, 休 Dim i As Long Dim X As Long Dim Td As Date Dim r As Range Dim rr As Range With Worksheets("Sheet1") Bary = .Range("A1").CurrentRegion Td = Date Set rr = .Range(.Range("B1"), .Cells(1, .Columns.Count).End(xlToLeft)) On Error GoTo err01 For Each r In rr If CDbl(Td) = CDbl(r.Value) Then X = r.Column End If Next For i = 2 To UBound(Bary, 1) Select Case Bary(i, X) Case "早" 早 = 早 & Bary(i, 1) & "," Case "遅" 遅 = 遅 & Bary(i, 1) & "," Case "休" 休 = 休 & Bary(i, 1) & "," End Select Next MsgBox Td & " の早出は" & Left(早, Len(早) - 1) & Chr(10) & _ Td & " の遅出は" & Left(遅, Len(遅) - 1) & Chr(10) & _ Td & " の休は" & Left(休, Len(休) - 1) End With Set rr = Nothing Erase Bary Exit Sub err01: If err.Number = 13 Then MsgBox "日付の値が異常です" ElseIf err.Number = 9 Then MsgBox "指定日付が存在する範囲を超えています" Else MsgBox "原因不明のエラーです" & err.Number & err.Description End If On Error GoTo 0 Set rr = Nothing Erase Bary End Sub (隠居じーさん) 2019/04/22(月) 20:29
>Qだけに上記のエラーが出ていた
同じ「Q」でも当日は問題なく、翌日分だけが表示されないということ?
そんなことはないと思いますけどね。 実際こっちでも試してみましたが、当日も翌日も表示されます。 もう一度、確認してみてください。 「Q」だと当日も翌日も表示されない、ということなら 全角と半角の違いとかが考えられます。
■重要な補足&確認
・例えば今日が22日なら、その式は、何月とかに関係なくB列から数えて22列目を検索しています。 1行目の日付は見てません。 つまり、今日は5月なのに、元のシフト表は4月のまま、なんてことは想定していない、ということ。
問題ありますか? あるのなら修正案を提示しますけど。
・上記と関連しますが、翌日分の表示は DAY(TODAY())+1 としてください DAY(TODAY()+1) ←はダメ!!!
今日が4月30日だとすると、翌日の場合、後者は「1」になり、B列の4月1日を検索してしまいます。
・上記に関連しての確認 今日が4月30日のような月末なら、翌日分はどうなればいいんですか?
以上です (笑) 2019/04/22(月) 22:12
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.