プロが教えるわが家の防犯対策術!

エクセルの入力規則に、「20文字以内」「半角カナ不可」「機種依存する特殊文字不可」という条件をかけたいのですがいまいちわかりません。

今のところ、
=AND(A4=JIS(A4),LEN(A4)<=20)*(COUNTIF(A4,"*(株)*")=0)
として、全角のみ、20文字以下、特殊文字は個々で入れるというかんじでしか対応できていません。

誰かご存知でしたら方法教えてください!
どうぞよろしくお願いします!

A 回答 (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
'------------------------------------------------
    • good
    • 1
この回答へのお礼

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

お礼日時:2006/01/25 12:35

こんにちは。



考えてみました。元のご質問の内容が、揺らいでいるようですが、「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)

私個人としては、イベントドリブン型のマクロ処理のほうがよいような気がします。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/01/24 05:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています