• ベストアンサー

エクセルで半角カナや特殊文字を入力制限する

エクセルの入力規則に、「20文字以内」「半角カナ不可」「機種依存する特殊文字不可」という条件をかけたいのですがいまいちわかりません。 今のところ、 =AND(A4=JIS(A4),LEN(A4)<=20)*(COUNTIF(A4,"*(株)*")=0) として、全角のみ、20文字以下、特殊文字は個々で入れるというかんじでしか対応できていません。 誰かご存知でしたら方法教えてください! どうぞよろしくお願いします!

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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 '------------------------------------------------

dreamcon
質問者

お礼

今オフィスのエクセル素人集団を集めて実験しましたところ、完璧です!!みな「おおーーー」と歓声を上げました! 本当に、本当にありがとうございます!早速使わせていただきます!

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 考えてみました。元のご質問の内容が、揺らいでいるようですが、「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) 私個人としては、イベントドリブン型のマクロ処理のほうがよいような気がします。

dreamcon
質問者

お礼

ありがとうございます!確かに入力できず、いい感じです! ただ、入力規則だとデータ入力する際にコピーペーストされると適用外になってしまうため、おっしゃるようにマクロの方がいいのかもしれません。しかし、やり方がわからず・・・(エクセル初級)。 どこに何をすればいいのかもしよろしければ教えてください。よろしくお願いします。

関連するQ&A