お世話になります。
【やりたいこと:同姓同名の方で時間がかぶるケースのエラーメッセージを出したい。】
下記のような、重複エラーチェックの方法について教えていただきたく、よろしくお願いいたします。
(やりたいことの質問例は表の下に記します)
「入力規則」でできますか?
それともVBAでしょうか?幅広い方法でのご指導をいただければうれしいのですが、初心者わかりやすくご教授くださいますことをお願いいたします。
A B C
1 山田 太郎 10:00 11:00
2 川中 島子 11:30 12:30
3 山田 太郎 15:30 16:00
4 海川 花子 11:30 12:30
5 山田 太郎 10:30 11:00
【今回やりたいことの(例)】
上記の表で、B列、C列は時間で「B列からC列まで」という時間範囲を示します。
1行、2行、5行と山田太郎が入力されていますが、1行目と3行目は時間がかぶっていないのでOKです。しかし、1行と5行の山田太郎は時間がかぶっているためエラーメッセージを出したいのです。
【要約(再):同姓同名の方で時間がかぶるケースのエラーメッセージを出したい。】
質問がわかりにくかったならご指摘ください。
よろしくお願いいたします。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
VBAでやってみました。
ロジックが相当難しかった。氏名でソートし、氏名重複分同士について、時間重複をチェック。
例データ Sheet1 A-E列
8近藤 次郎110:0011:00
10近藤 次郎210:3016:00
4海川 花子39:3010:30
1山田 太郎410:3011:00
3山田 太郎515:3016:00
5山田 太郎610:5011:00
4山田 太郎711:3017:30
6山田 太郎88:309:30
7山田 太郎912:2013:50
2川中 島子109:5011:00
コード
Sub test01()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
sh2.Range("A1:J100").ClearContents
d = sh1.Range("A65536").End(xlUp).Row
' MsgBox d
k = 2
'---ソート
sh1.Range(sh1.Cells(1, "A"), sh1.Cells(d, "E")).Sort key1:=sh1.Range("B2")
For i = 1 To d
c = WorksheetFunction.CountIf(Range(sh1.Cells(1, "B"), sh1.Cells(d, "B")), sh1.Cells(i, "B"))
If c = 1 Then
cmode = "n"
Else
If cmode = "n" Then
cmode = "y"
l = i + c - 1
End If
'---
sa = sh1.Cells(i, "D")
ea = sh1.Cells(i, "E")
For j = i + 1 To l
' MsgBox i & "=" & j
s = sh1.Cells(j, "D")
e = sh1.Cells(j, "E")
'---
If s >= sa And s < ea Then
' MsgBox Format(Cells(i, "D"), "hh:mm") & Format(Cells(i, "E"), "hh:mm") & Format(Cells(j, "D"), "hh:mm")
ers = "S"
End If
'---
If e > sa And e <= ea Then
' MsgBox Format(Cells(i, "D"), "hh:mm") & Format(Cells(i, "E"), "hh:mm") & Format(Cells(j, "E"), "hh:mm")
ers = ers & "E"
End If
'---
If ers <> "" Then
prt01 k, i, j, ers
ers = ""
k = k + 1
End If
Next j
End If
Next i
End Sub
Sub prt01(k, i, j, ers)
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
sh2.Cells(k, 1) = i
sh2.Cells(k, 2) = sh1.Cells(i, "A")
sh2.Cells(k, 3) = sh1.Cells(i, "B")
sh2.Cells(k, 4) = sh1.Cells(i, "D")
sh2.Cells(k, 5) = sh1.Cells(i, "E")
sh2.Cells(k, 6) = j
sh2.Cells(k, 7) = sh1.Cells(j, "A")
sh2.Cells(k, 8) = sh1.Cells(j, "D")
sh2.Cells(k, 9) = sh1.Cells(j, "E")
sh2.Cells(k, 10) = ers
End Sub
結果 Sheet2 A-J列
ソート後行ソート前行氏名スタートエンドソート後行ソート前行スタートエンドかぶり具合
28近藤 次郎10:0011:00310 10:3016:00S
51山田 太郎10:3011:0075 10:5011:00SE
84山田 太郎11:3017:30107 12:2013:50SE
もっとテストを繰り返すべきで、エラーがあるかも知れないが、時間もあって、お許し願いたい。
Sheet2のD,E,H,I列は書式をユーザー定義のhh:mmにしてください。
お礼が遅くなりました。
いまだ内容研究しています。ごめんなさい。
完全に理解できないままですが、一度締めます。
今後ともご指導をよろしくお願いいたします。
No.3
- 回答日時:
B1セルに設定として
入力値の種類が「ユーザー設定」で
数式が「=SUMPRODUCT(($A$1:$A$65000=$A1)*($B$1:$B$65000<=B1)*($C$1:$C$65000>=B1))=1」
これをコピーして「編集」「形式を選択して貼り付け」で「入力規則」で貼り付けてください。
ただし入力済みの時間には反応しません。
入力済みで確認したい場合は「書式」「条件付書式」で
「数式が」「=AND(ISNUMBER(B1),SUMPRODUCT(($A$1:$A$65000=$A1)*($B$1:$B$65000<=B1)*($C$1:$C$65000>=B1))>1)」
として書式で文字色か背景色を変えてください。
お礼が遅くなりました。
いまだ内容を研究しています。
結果がうまくだせません。もう少しいただいた内容をもとに勉強してみます。
いったん締めさせてください。
ありがとうございました。今後ともお願いいたします。
No.1
- 回答日時:
こんにちは
なによりもまず、出したいエラーメッセージというものによって決まります。
俗に言う「メッセージボックス」
つまりExcelでブックに記入後、保存せず閉じようとするとメッセージが出ますよね?
アレを出したいですか?
色が変わる程度でいいですか?
まずそこです。
メッセージボックスでないと困るならマクロ書くしかないですね。
あと、B・C列に入力される時間ですが、手入力ですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの参照について教えてください 1 2022/12/08 16:06
- Visual Basic(VBA) エクセルについて教えてください。 3 2023/06/28 09:11
- その他(学校・勉強) 吹奏楽界の慣習、伝統についての疑問 2 2022/12/24 22:45
- Excel(エクセル) エクセル 関数 指定の繰り返しの回数 以降(以前)を削除するには、 2 2022/04/24 10:29
- Excel(エクセル) Excelの社員名簿 6 2023/07/10 16:35
- X(旧Twitter) X(Twitter)で名前を例えば山本太郎→山田花子→山本太郎に変更しようとしたら、プロフィール変更 1 2023/08/20 22:00
- 会社・職場 仕事ができない先輩保育士との関わり方。 正規職員10年目です。 20年も上の先輩保育士の仕事ぶりで気 3 2023/08/23 20:56
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Excel(エクセル) エクセルで休憩時間を引く時と、引かない時の数式 3 2022/11/05 11:48
- その他(ソフトウェア) 一太郎付属の”全件検索”ツールの不具合 3 2023/07/25 15:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelの関数について教えてくだ...
-
エクセルファイルがファイルの...
-
一つのセルに(例えばA1)入力...
-
エクセル vbaについて教えてく...
-
Excel 複数列 A列B列C列一致 D...
-
【マクロ】名前を保存する際に...
-
Excelについて教えてください
-
エクセル マクロ チェックボックス
-
エクセルであるセルに数字を入...
-
【Excel】数字を3倍にし、なお...
-
エクセル共有したが、アクセス...
-
【マクロ】顧客番号にて一致さ...
-
Excel分析ツールでのポアソン回...
-
エクセルで年休を管理する方法...
-
エクセルのデーターが2か月前の...
-
LOOKUP関数を使えばいいのでし...
-
エクセル②
-
エクセルを使っていて2024/5/15...
-
Excelでセルの値が同じか...
-
エクセルでの作業計算方法について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報