- ベストアンサー
エクセルで半角カナや特殊文字を入力制限する
エクセルの入力規則に、「20文字以内」「半角カナ不可」「機種依存する特殊文字不可」という条件をかけたいのですがいまいちわかりません。 今のところ、 =AND(A4=JIS(A4),LEN(A4)<=20)*(COUNTIF(A4,"*(株)*")=0) として、全角のみ、20文字以下、特殊文字は個々で入れるというかんじでしか対応できていません。 誰かご存知でしたら方法教えてください! どうぞよろしくお願いします!
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 返事が遅くなってしまいました。 >入力規則だとデータ入力する際にコピーペーストされると適用外になってしまうため、おっしゃるようにマクロの方がいいのかもしれません。しかし、やり方がわからず・・・ このマクロ自体は、思っていたよりもてこずってしまいました。あまり、うまい出来栄えではないとは思いますが、コピーペーストも禁止できます。使用勝手は、入力規則とほぼ同じです。 考え方は、dreamconさんが、特殊文字は個々で入れるという方法を使いました。 取り付け方は、シートタブを右クリックして、「コードの表示」をクリック。 次に、以下を貼り付けます。 入力規則の指定する場所に、Range("A:A") と、範囲を入力します。 複雑な範囲の場合は、例えば、このようにします。Range("A1:A10,B1:B2") 全体の場合を設定したい場合は、If Intersect ... の行そのものを削除します。 '------------------------------------------------ Dim KinshiMoji As Variant Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range Dim msg As String '以下は、A列のみに、入力規則を施しています。 If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub On Error GoTo ErrMsg If IsEmpty(Target) Then Exit Sub Application.EnableEvents = False If Len(KinshiMoji) < 1 Then Call MakingMoji For Each c In Target.Cells If Len(c.Text) > 20 And c.Value <> "" Then _ msg = "入力した値は20文字以上です。": Err.Raise 513 If c.Text Like "*[" & Chr(&HA6) & "-" & Chr(&HDF) & "]*" Or _ c.Text Like "*[" & KinshiMoji & "]*" Then msg = "入力した値は正しくありません。": Err.Raise 513 End If Next Application.EnableEvents = True Exit Sub ErrMsg: If MsgBox(msg & vbCrLf & vbCrLf & _ "ユーザーの設定によって、セルに入力できる値が制限されています。", _ 16 + vbRetryCancel) = vbRetry Then c.Select Application.SendKeys "{F2}" Else Target.ClearContents End If msg = "" Application.EnableEvents = True End Sub Private Sub MakingMoji() '禁じする文字を作ります。 Dim i As Long For i = &H8740 To &H878F KinshiMoji = KinshiMoji & Chr(i) Next End Sub '------------------------------------------------
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 考えてみました。元のご質問の内容が、揺らいでいるようですが、「20文字以内」「半角カタカナ」「機種依存する特殊文字不可」 というなら、おそらく、半角の数字とアルファベットは許可していると読みました。 =AND(LEN(A1)<=20,SUM((CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))>165)*(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<224)+(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))>11552)*(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<11633))=0) 私個人としては、イベントドリブン型のマクロ処理のほうがよいような気がします。
お礼
ありがとうございます!確かに入力できず、いい感じです! ただ、入力規則だとデータ入力する際にコピーペーストされると適用外になってしまうため、おっしゃるようにマクロの方がいいのかもしれません。しかし、やり方がわからず・・・(エクセル初級)。 どこに何をすればいいのかもしよろしければ教えてください。よろしくお願いします。
お礼
今オフィスのエクセル素人集団を集めて実験しましたところ、完璧です!!みな「おおーーー」と歓声を上げました! 本当に、本当にありがとうございます!早速使わせていただきます!