- ベストアンサー
Excel リストの選択回数のカウントアップ
- Excelでドロップダウンリストの選択回数をカウントアップする方法について質問です。
- シフト管理表でドロップダウンリストを使用し、選択された氏名に応じてリストの内容を表示させたいです。
- マクロや関数を使用してセルの条件に合致する場合に選択回数をカウントアップする方法について教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
おそらく1ヶ所だけ.Offset(1)を省けばうまくいくと思います。 ↓このコードもご確認ください。 Private Sub Worksheet_Change(ByVal Target As Range) 'Sheet1のC16:C65が変化したときだけに限定 If Intersect(Target, Range("C16:C65")) Is Nothing Then Exit Sub If Len(Target.Text) = 0 Then Exit Sub Dim mySht As Worksheet Dim valB As String, valC As Variant Dim myRng1 As Range, myRng2 As Range, r As Range Set mySht = Worksheets("Sheet2") With Target valB = .Offset(, -1).Value '左隣B列の氏名 valC = .Value 'Sheet1のC列の値 End With 'Sheet1のC列の値をSheet2のD3の横方向から探す Set myRng1 = mySht.Range("D3").Resize(, 140) '70人分 Set r = myRng1.Find(valB, LookIn:=xlValues) If r Is Nothing Then GoTo Err_1 'Sheet1のB列の値をSheet2の上で見つかったセルの下方向から探す Set myRng2 = r.Resize(50) '50件分 Set r = myRng2.Find(valC, LookIn:=xlValues) If r Is Nothing Then GoTo Err_2 With r.Offset(, 1) '見つかったSheet2のセルの右隣の.. .Value = .Value + 1 'カウントをひとつ増やす End With Exit Sub Err_1: MsgBox "氏名を確認してください。" Exit Sub Err_2: MsgBox "リストから選んでください。" End Sub
その他の回答 (2)
- n_na_tto
- ベストアンサー率70% (75/107)
構成をチェックしてください。 おそらく、ずれていると思います。 ↓こんな感じだと思って回答しました。 Sheet1 ____B___C_ 15_氏名_内容_ 16_あ▼__あ1▼ 17_い▼__い4▼ 18_う▼__う3▼ Sheet2 ___D__E__G_H__J_K_ 3__あ____い___う__ 4_あ1__5_い1_5_う1_1_ 5_あ2___い2_1_う2_3_ 6_あ3__5_い3___う3_1_ 7_あ4___い4_1_う4__ 8_あ5_10_い5___う5_1_
お礼
大変申し訳ございません。 こちらの説明が分かり辛かったですね。 ご理解頂いて本当に有難うございました。
- n_na_tto
- ベストアンサー率70% (75/107)
マクロなら シートモジュール[Sheet1(Sheet1)みたいのをダブルクリック]に Private Sub Worksheet_Change(ByVal Target As Range) 'Sheet1のC16:C65が変化したときだけに限定 If Intersect(Target, Range("C16:C65")) Is Nothing Then Exit Sub If Len(Target.Text) = 0 Then Exit Sub Dim mySht As Worksheet Dim valB As String, valC As Variant Dim myRng1 As Range, myRng2 As Range, r As Range Set mySht = Worksheets("Sheet2") With Target valB = .Offset(, -1).Value '左隣B列の氏名 valC = .Value 'Sheet1のC列の値 End With 'Sheet1のC列の値をSheet2のD3の横方向から探す Set myRng1 = mySht.Range("D3").Resize(, 140) '70人分 Set r = myRng1.Find(valB, LookIn:=xlValues) If r Is Nothing Then GoTo Err_1 'Sheet1のB列の値をSheet2の上で見つかったセルの下方向から探す Set myRng2 = r.Offset(1).Resize(50) '50件分 Set r = myRng2.Find(valC, LookIn:=xlValues) If r Is Nothing Then GoTo Err_2 With r.Offset(, 1) '見つかったSheet2のセルの右隣の.. .Value = .Value + 1 'カウントをひとつ増やす End With Exit Sub Err_1: MsgBox "氏名を確認してください。" Exit Sub Err_2: MsgBox "リストから選んでください。" End Sub
お礼
ご連絡が大変遅くなり申し訳ございません。 下記のご回答、有難うございました。 ほぼ理想通りの形で出来ました。 凄いですね。 ただSheet2のD4をはじめ4行目に入れている項目についてはカウントしてくれません。5行目以下の項目はきちんとカウントしてくれてます。 申し訳ございませんが4行目もカウント出来る様に修正は可能でしょうか? こちらの設定に問題があるのかも知れませんが何故4行目だけがカウントされないのか全く見当がつきませんので・・・。 申し訳ございませんが御教授頂けないでしょうか? 以上、宜しくお願い申し上げます。
お礼
度々の御回答、誠に有難うございました。 完璧に理想通りの形で動いてくれました。 本当に助かりました。 ここ1週間この問題がクリア出来ずに非常に困っておりましたので本当に嬉しいです。 御丁寧且つ御親切にお教え下さり誠に有難うございました。