|
VBA初心者です。
★youtube.com/watch?v=urNR55Ly5gE&si=BsLig7iB2QudvSqk (★→https://)
こちらの動画を参考に、検索できるドロップダウンリストを1つのセルに作成しました。
(例:セルに「佐藤」と入力すると佐藤太郎と佐藤花子がリストに表示される)
このドロップダウンリストを列全てに設定したいのですが、どのようにしたら良いかわからず、ご教示いただけますと幸いです。
前提
・会社のPCに入ってるExcelが2019のため、FILTER関数などは使用できません
・入力シートのC列にドロップダウンで従業員氏名を入力したいです(下記ではC3セルに適用してますが、C列全てに検索できるドロップダウンを適用したいです)
・従業員名簿シートC列に従業員氏名(フルネーム・漢字)が羅列されています
・従業員氏名は今後追加・削除などを行う予定がありますが、参照を列にしているため問題ないと思われます
・従業員名簿シートJ列(空白列)に検索結果を表示させています
・参考動画ではかな、カナでも検索できるようにしてますが、漢字のみで検索できれば十分です
・また、or・and検索も不要です
・入力シートC3セルにデータの入力規則を設定(リスト)
=OFFSET(従業員名簿!$J$2,0,0,4)
※同姓者が2・3名なので仮で4行表示としてます
___以下、コード_____
Private Sub Worksheet_Change(ByVal Target As Range)
'C3セルではないので終了
If Target.Address <> "$C$3"
Exit Sub
End If
'候補を作成
Call 候補を作成
'入力された値が候補と一致する場合は、選択されたので終了
If Worksheets(“入力シート”).Range("C3").Value = Worksheets(“従業員名簿”). Range("J2").Value And _
Worksheets(“入力シート”).Range("C3").Value <> "" And _
Worksheets(“従業員名簿”).Range("J3").Value = "" Then
Exit Sub
End If
'プルダウン表示
Worksheets(“入力シート”). Range("C3").Select
If Worksheets(“入力シート”). Range("C3").Value <> "" Then
SendKeys "%{DOWN}"
End If
End Sub
Public Sub 候補を作成()
Dim 元の行 As Long
Dim 先の行 As Long
Dim 検索文字 As String
'現在のプルダウン候補の列をクリア
Worksheets(“従業員名簿”).Range("J:J").ClearContents
元の行 = 2
先の行 = 2
検索文字 = Worksheets(“入力シート”). Range("C3").Value
'大元のデータ終了までループ
Do Until Worksheets(“従業員名簿”). Cells(元の行, 3).Value = ""
If InStr(Worksheets(“従業員名簿”).Cells(元の行,3).Value,検索文字)>0 Or_
検索文字 = “” Then
'該当あり
Worksheets(“従業員名簿”). Cells(先の行, 10).Value = Worksheets(“従業員名簿”). Cells(元の行, 3).Value
先の行 = 先の行 + 1
End If
元の行 = 元の行 + 1
Loop
End Sub
|
|