社員の体温管理をグーグルスプレットでアンケート方式で収集しています。
報告は、起床時と就寝前。
出社後、特定の社員が前日の夜、本日の朝の体温が入力されているか目視でチェックしています。
No 氏名 測温時 体温 日にち
1 豊田 夜 36.5℃ 7月1日
1 豊田 朝 36.4℃ 7月2日
2 高橋 夜 36.1℃ 7月1日
2 高橋 朝 37.5℃ 7月2日
3 加藤 夜 36.2℃ 7月1日
4 佐々木 夜 36.7℃ 7月1日
4 佐々木 朝 36.2℃ 7月2日
5 田中 夜 32.5℃ 7月1日
5 田中 朝 36.9℃ 7月2日
6 矢野 朝 35.9℃ 7月1日
7 菅野 夜 36.9℃ 7月1日
7 菅野 朝 37.3℃ 7月2日
上記だとNo3加藤の朝、No6矢野の夜が抜けていますね。
この抜けている部分を一覧で抽出したいです。
3 加藤 朝
6 矢野 夜
このように。
vbaで行いたいです。
管理上、毎日exceへコピーし保存しています。
考え方だけでも結構です。回答より敷くお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
- 鈴木さんのように夜と朝の両方を記入忘れした場合も考慮してみました。
- 発熱時の表示を簡易的に入れてみました(38度以上には対応していません。)
VBA
1Sub KenOnCheck() 2 Dim ws As Worksheet 3 Set ws = ActiveSheet 4 Dim member, timing, message 5 For Each member In Split("豊田 高橋 加藤 佐々木 田中 矢野 菅野 鈴木") 6 For Each timing In Split("夜 朝") 7 If WorksheetFunction.CountIfs(ws.Range("B:B"), member, ws.Range("C:C"), timing) < 1 Then 8 message = Join(Array(message, member, timing, vbLf)) 9 ElseIf WorksheetFunction.CountIfs(ws.Range("B:B"), member, ws.Range("C:C"), timing, ws.Range("D:D"), "37*") > 0 Then 10 message = Join(Array(message, member, timing, "Hot", vbLf)) 11 End If 12 Next 13 Next 14 MsgBox message 15End Sub
投稿2021/07/12 10:45
編集2021/07/13 04:52総合スコア4592
0
ベストアンサー
Noと氏名をキーとした一般的な、ブレーク処理です。
1行目をタイトルとして、A2より値をセットしたと仮定。下記の様なコードになると思われます。
コピペして動かして見て下さい。
VBA
1Sub Test_Sample_Miniature() 2 3 Dim MyRange As Range 4 Dim blnBrkInit As Boolean 5 Dim strBrkKey As String 6 Dim strBrkWork As String 7 Dim blnSkip As Boolean 8 Dim lngCheckCount As Long 9 10 blnBrkInit = True 11 For Each MyRange In Range("A:A") 12 ' 13 '(初期) 14 blnSkip = False 15 If MyRange.Row = 1 Then blnSkip = True 16 ' 17 '(行値有効) 18 If blnSkip = False Then 19 '(ブレーク開始) 20 strBrkWork = Trim(Cells(MyRange.Row, 1)) & Trim(Cells(MyRange.Row, 2)) 21 If blnBrkInit = True Then 22 '(初期処理) 23 strBrkKey = strBrkWork 24 lngCheckCount = 1 25 blnBrkInit = False 26 Else 27 If strBrkKey <> strBrkWork Then 28 '(不一致) 29 If lngCheckCount <> 2 Then 30 Cells(MyRange.Row - 1, 6) = "データ不正=" & lngCheckCount 31 End If 32 strBrkKey = strBrkWork 33 lngCheckCount = 1 34 Else 35 '(一致) 36 lngCheckCount = lngCheckCount + 1 37 End If 38 End If 39 ' 40 End If 41 ' 42 '(空白終了) 43 If Trim(MyRange) = "" Then exit for 44 ' 45 Next 46 47End Sub
投稿2021/07/12 03:19
編集2021/07/12 03:21総合スコア553
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
直接の回答ではありません。
日付は前日と当日だけの前提で良いでしょうか。以下、その前提でのコメントです。
1案
もっとも簡単な手抜きの方法ですが、
各担当者の出現回数をカウントし、1件のデータのみ抽出する方法です。
この場合、3件以上あったらどうするかということも考慮したほうがよいかも知れませんが、
そんなことはあり得ない、とあなたが判断されれば、考慮する必要はないでしょう。
2案
もうすこし、厳密に判断する必要があるなら、
1案で2件以外はエラーとしたとき、2件であっても更にチェックを行います。
例えば
豊田 夜 36.5℃ 7月1日
豊田 夜 36.5℃ 7月2日
のようなケース(夜が2回)
豊田 夜 36.5℃ 7月1日
豊田 朝 36.5℃ 7月1日
のようなケース(同じ日付が2回)を正常とするのかエラーとするのかは、あなたが判断すべきことです。
又
豊田 夜 36.5℃ 7月1日
豊田 朝 36.5℃ 7月1日
菅野 夜 36.9℃ 7月3日
菅野 朝 37.3℃ 7月4日
のようなデータがあった場合、どちらを正常にするのか、もしくはどちらも正常にするのかは
あなたが判断すべきことです。
まずは、どの案でやるのか。
その場合の正常ケースとエラーケースをどのようにするかを明確にする必要があるかと。
投稿2021/07/11 05:22
総合スコア5493
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。