入力規則と同じような機能を作ってみました。参考程度に見てください。
入力規則のユーザー設定には余り複雑な算式は設定できないみたいですね。
入力した文字全部が小文字かどうかを判定するセル用の関数を作って登録しましたが、『入力規則には、OR演算、AND演算、配列定数は使用できません。』が出てしまいました。
ユーザー定義関数を作って、その結果を入力規則に使用した結果、うまく動きますが、入力セルに対し判定セルが必要になります。
下では、入力規則と(ほぼ)同じ機能のマクロです。判定用のセルは不要にしています。判定はより複雑にできます。
入力規則の日本語入力の『半角英数字』などは、全角でも入力できたと思いますが、下では不可にしています。
判定するなら、『小文字→大文字』、『全角→半角』などの自動変換も簡単にできる事になります。マクロの最後に参考に書いています。
Sheet1で行う例です。
ツール→マクロ→Visual Basic Editor でVBE画面に移り、表示→プロジェクトエクスプローラでプロジェクトエクスプローラを表示し、Sheet1をダブルクリック。
出てきたコードウインドウに下記マクロをコピーして貼り付けます。
Const 入力規則 = "B2:D20" の行に入力規則を適用する実際の範囲を設定します。
ここから
↓
Const 入力規則 = "B2:D20" '入力規則範囲(***自分で設定します***)
'エラーメッセージ
Const erMsg1 = "入力した値は正しくありません。" & vbCrLf & vbCrLf
Const erMsg2 = "ユーザーの設定によって"
Const erMsg3 = "セルに入力できる値が制限されています。"
'複雑、煩雑な入力規則を行う例。
' Excelの機能では、
' 『条件データの入力規則には、OR演算、AND演算、配列定数は使用できません』
' のメッセージがでて、余り複雑な入力規則は設定できない。
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim erMsg As String '入力エラーメッセージ
erMsg = erMsg1 & StrConv(erMsg2, vbNarrow) & "、" & StrConv(erMsg3, vbNarrow)
Dim moji As String, elm As String '入力文字、入力文字の1文字
Dim L As Integer 'カウンタ
Dim chkFlg As Boolean 'エラーチェックフラグ
chkFlg = True
If Target.Count = 1 Then
If Not Intersect(Range(入力規則), Target) Is Nothing Then
moji = Target.Text
For L = 1 To Len(moji)
elm = Mid(moji, L, 1)
If Abs(Asc(elm)) < 256 Then
Select Case Asc(elm)
Case 97 To 122
'入力が誤りのケース
chkFlg = False: Exit For
Case Else
'入力が正しいケース
End Select
Else
'入力が誤りのケース
chkFlg = False: Exit For
End If
Next
End If
End If
'入力後の処理
If chkFlg = False Then
If MsgBox(erMsg, vbRetryCancel + vbCritical) = vbRetry Then
'Target = StrConv(moji, vbNarrow + vbUpperCase) '半角大文字にしてしまう
Target.Select '再試行
Else
Target = "" 'キャンセル
Target.Select
End If
End If
End Sub
お礼
何度もトライしていただきありがとうございました。 入力時に自動的に大文字になることは不可能のようですね。 上記方法を採用させていただきます!助かりました。