- ベストアンサー
データの入力規制についての質問
- データの入力規制について、変更があったため再度教えていただきたいです。sheet2のB列にデータの入力規制のセルを設け、頭文字を入力するとsheet1のリストからマッチした項目を表示したいと考えています。前回のやり方とは異なり、今回はsheet1のB列にリストがあり、sheet2のB列に変更したいです。
- 前回のコードではsheet1のAK列までデータが入っていましたが、現在は使えなくなっています。前回のコードについては、Sheet1とSheet2を実際のシート名に変更して実行することができます。
- 画像を他のページから貼り付けてしまったため、削除されてしまいました。もう一度質問をさせていただきます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
No.1です。 補足の >sheet1のB列のデータに同じ名称が2つ以上の場合が とありますので、 前回のコード内の >If StrConv(wS.Cells(i, "B"), vbKatakana) Like StrConv(Selection, vbKatakana) & "*" Then の行を If StrConv(wS.Cells(i, "B"), vbKatakana) Like StrConv(Selection, vbKatakana) & "*" And _ WorksheetFunction.CountIf(wS.Range("AL:AL"), wS.Cells(i, "B")) = 0 Then に変更してみてください。m(_ _)m
その他の回答 (1)
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 今回はひらがな・カタカナが混在しているようですので、 どちらの文字でも1文字以上入力すると、両方が表示されるようにしてみました。 まずAlt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面に ↓のコードをコピー&ペーストしておいてください。 Sub リスト() Dim i As Long, cnt As Long, wS As Worksheet Set wS = Worksheets("Sheet1") i = wS.Cells(Rows.Count, "AL").End(xlUp).Row '←リスト表示列を変更 Application.ScreenUpdating = False If i > 1 Then Range(wS.Cells(2, "AL"), wS.Cells(i, "AL")).ClearContents End If cnt = 1 For i = 2 To wS.Cells(Rows.Count, "A").End(xlUp).Row If StrConv(wS.Cells(i, "B"), vbKatakana) Like StrConv(Selection, vbKatakana) & "*" Then '←B列がリスト候補 cnt = cnt + 1 wS.Cells(cnt, "AL") = wS.Cells(i, "B") '←Sheet1のB列データをAL列に表示 End If Next i Application.ScreenUpdating = True End Sub 次にSheet2のシートモジュールに↓のコードを! Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 2 And Target.Count = 1 Then '←列をB列(2)に変更 Call リスト End If End Sub 最後にSheet2の入力規則の「元の値」の欄に =OFFSET(Sheet1!AL$1,1,,COUNTA(Sheet1!AL:AL)-1) これで何とかご希望に近い形にならないでしょうか? ※ 今回も一旦データを入力 → Enter → 元のセルに戻る という操作になってしまいます。m(_ _)m
お礼
おはようございます。 無事に動きました。いろいろとお手数おかけしました。 本当にありがとうございます。 また、お力お借りするすることがあるとおもいますが、 またよろしくお願いいたします。
補足
こんばんは~。返事が遅れて申し訳ございません。 無事に動かすことができました。本当にたすかりました。ありがとうございます。 大変申し訳ないのですが。 ちょっと困ったことがおきまして、sheet1のB列のデータに同じ名称が2つ以上の場合が あるのですが、リストにすべて表示されてしまうので、1つ表示にしたいのですが可能なのでしょうか? お手数おかけして申し訳ございません。