- 締切済み
入力規則のリストで大文字小文字を区別させたい
入力規則で元の値に直接リストを書き込んだ場合は、大文字小文字も区別されますよね。 元の値にセルの範囲や名前の定義で範囲を指定したものにした場合、大文字小文字が区別されずに困っております。 例えばシート2のA列をリストの範囲として「一覧」と名前の定義をしたとして、元の値に =一覧 と入れるとちゃんとリストとしては機能します。 ただ、入力規則を設定したセルに直接入力した場合、リストにない単語についてはきちんとエラーメッセージが出てはじかれますが、小文字大文字までは区別してくれません。 例えば、リストの中に「abc」という小文字だけの単語があったとして、セルに「Abc」と大文字を混ぜて直接入力してもそのまま書き込むことができてしまうのです。 「abc」だけを許可して「Abc」だの「aBC」だの大文字を混ぜた物はエラーとしてはじいて欲しいのですが、そういうことはできないのでしょうか? 入力規則だけで片付けたいのですが、VBAを絡めないと無理でしょうか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- Chiquilin
- ベストアンサー率30% (94/306)
入力規則は「リスト」と「ユーザー定義」は両立できません。どっちかです。 > 入力規則だけで片付けたいのですが、VBAを絡めないと無理でしょうか? 入力規則は入力を規制する目的では使えません。あくまで入力補助機能だから です。どう設定したところで コピー&ペーストされたらどうやったって望まな いデータを入力できてしまいます。 VBAで設定して下さい。入力したものを強制的に小文字にしてやればいいです。
- eden3616
- ベストアンサー率65% (267/405)
何度も申し訳ありません。 No2の補足ですが、前者の関数式を用いて入力時の判断を行う場合の入力規則の設定時に 「空白を無視する」のチェックは外してください。 もし入れる場合は「一覧」のセル範囲指定をA列すべてではなく、空白を除くリスト範囲のみにしてください。
- eden3616
- ベストアンサー率65% (267/405)
失礼しました範囲定義での入力規則ですね。 「リストで選ぶ際に直接入力に対する判定も行う」ということは存じませんが、 直接入力において所定の範囲と大文字小文字を比較することは以下の方法で可能です。 「一覧」に「=Sheet2!$A:$A」が名前定義されているとして、 Sheet1のA1セルの入力規則にて「ユーザー設定」を選び、 「数式」に以下の数式を入力する。 =IF(ISERROR(VLOOKUP(A1,一覧,1,FALSE)),FALSE(),EXACT(A1,VLOOKUP(A1,一覧,1,FALSE))) ======================== VBAを用いた方法も念のため記述しておきます。 リスト選択及び直接入力での大文字小文字を判断し、リストにない文字が入力された場合はメッセージを表示し、前回入力された文字に戻します。 Sheet1のA1セルに「リスト」、「=一覧」の入力規則を設定し、 Sheet1のシートタブを右クリックで「コードの表示」を選択しVBEを開く。 下記のVBAコードを貼り付けてVBEを閉じる。 「A1」セル、「Sheet2」「一覧」が異なる場合はコード内の 該当部分(4、5行目)を合わせて変更してください。 Dim myValue As String Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Target.Address(False, False) <> "A1" Then Exit Sub If Worksheets("Sheet2").Range("一覧").Find( _ What:=Target.Value, _ LookIn:=xlValues, _ LookAt:=xlWhole, _ MatchCase:=True, MatchByte:=True) Is Nothing Then MsgBox "その値は入力できません" Application.EnableEvents = False Target.Value = myValue Application.EnableEvents = True End If myValue = Target.Value End Sub
- eden3616
- ベストアンサー率65% (267/405)
A1のセルに入力規則を設定するとして、B1のセルに「abc」と入力します。 A1の入力規則で「ユーザー設定」を選んでから、 数式に「=EXACT(A1,B1)」と入力してOKを押してください。 ※EXACTは引数の文字列が同じかどうかを判定する関数です。