• ベストアンサー

エクセル 半角英数6文字以上 8文字の入力制限

エクセルのあるセル内に入力させた文字のチェックにあたり で半角英数(0,1,2,3,4,5,6,7,8,9)と(a,b,c,d,e,f,g,h,i,j,k,l,n,m,o,p,q,r,s,t,u,v,w,x,y,z) (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,) の組み合わせによる6文字以上8文字以内、さらに数字のみの 組み合わせを禁止したチェックを行ないたいのです。 現状 LENB関数で6未満 LENB関数で9以上をエラー ISNUMBER関数でTRUEの場合エラーとしているのですが 半角カタカナや記号に対してチェックをかける関数が 分かりません。 入力されてくるセルに対するチェックの関数は 半角カタカナチェックの関数式 記号チェックの関数式と別に分けていただいても構いませんので アドバイスいただけましたら幸いです。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

> 今回はVBAを使わないでチェックを行なう方法を考えていたものですから... 了解です。では、関数でやってみます。 ・テキストか調べる  =IF(ISTEXT(A1),"文字列です","文字列以外です") ・全角文字があるか調べる  =IF(LEN(A1)=LENB(ASC(A1)),"全角なし","全角あり") 以上2つを連結させます。  =IF(AND(ISTEXT(A1),LEN(A1)=LENB(ASC(A1))),"OK","NG") これで、「全角文字が含まれない文字列か?」を判定できます。 ・記号や数字があるか調べる  =IF(ISERROR(FIND({"+","-",";"},A1)),"記号なし","記号あり")  FIND 関数の第 1 引数に { } で判定させるリストを渡します。  上記例だと記号 + - ; だけです。したがって、要は禁止文字をリスト化  すれば良いのですが、半角カナを除いても、  =ISERROR(FIND({0,1,2,3,4,5,6,7,8,9,"!","""","#","$","%","&","'","(",")","-","=","^","~","\","|","@","`","[","{",";","+",":","*","]","<",",",">",".","/","?","_"},A1))  で数字や記号があるかをやっと調べられます。半角カナも含めるなら、  リストはさらに増えますね、、、  というか、面倒なので半角カナ対応のためのリスト追加はご自分で  お願いします。  これらを組あわせれば、ご希望の入力チェックは可能だと思いますが、  確認はしてません。 私には関数による解は、こんな方法しか思いつきません。そもそも、関数は ループ処理ができないし、Excel 既存の関数には、「配列内の文字を含む」 を調べるものがないのですから、こんな感じで複雑を極める数式になります。 VBA がなぜダメなのか良くわかりませんが、この数式のメンテナンスは 容易ではないと思いますよ。。。むしろ、VBA の方がシンプルです。 頑張って下さい。 私は関数が苦手なので、もっと良い回答があるかもしれません。 すみません、あまりお力になれず。

ab-chan
質問者

お礼

再度ご回答有難うございました。一人目の回答の方を参考に以下のように作ってみました。A1に文字列が記入された場合 A2 6桁以下チェック =IF(LENB(A1)<6,1,0) A3 8桁以上チェック =IF(LENB(A1)>8,2,0) A4 数字のみチェック =IF(ISNUMBER(A1)=TRUE,3,0) A5 A1一文字目抜き出し =MID(A1,1,1) A6 A1二文字目抜き出し =MID(A1,2,1) 以下八文字まで同じ B5 A5コード番号取り出し =IF(A5="",0,CODE(A5)) B6 A6コード番号取り出し =IF(A6="",0,CODE(A6)) 以下八文字まで同じ C5 B5コード番号チェック =IF(B5="",0,IF(OR(AND(B5>=48,B5<=57),AND(B5>=65,B5<=90),AND(B5>=97,B5<=122)),0,1)) C6 B6コード番号チェック =IF(B6="",0,IF(OR(AND(B6>=48,B6<=57),AND(B6>=65,B6<=90),AND(B6>=97,B6<=122)),0,1))  以下八文字目まで同じ A13 C5~C12コード番号チェックの合計 =IF(SUM(C5:C12)>0,4,0) A14 A2,A3,A4,A13のチェックで 全てが0だった場合に正しい処理を行なうようにして1~4のいずれかの数字がたった場合はそれに見合ったエラー表示を行なうように作りました。(ここではエラー表示の式は示しておりません) 私の場合関数が長くなりすぎるとパニックになってしまいますもので不細工ではありますが式を分け分けしながら作りました。 全てお知恵をお借りしてできたものでありまして 親身にお答えいただいたKenKen_SP様はじめ皆様にお礼申し上げます。 有難うございました。

その他の回答 (3)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.3

No1さんのをお借りして ベタな方法ですが 標準モジュールにこんな風では? A1にチェックしたいのがあるとしてB1に =pwdchk(A1) Function PWDchk(ChkString As Variant) As String '数値0~9はCODE48~57 'A~ZはCODE65~90 'a~zはCODE97~122 Dim i As Integer If Len(ChkString) < 6 Or Len(ChkString) > 8 Then   PWDchk = "文字数違反。" End If If IsNumeric(ChkString) Then   PWDchk = PWDchk & "数字だけじゃ却下。" End If For i = 1 To Len(ChkString)   Select Case Asc(Mid(ChkString, i, 1))     Case 48 To 57, 65 To 90, 97 To 122          Case Else       PWDchk = PWDchk & "文字種違反。"       Exit For   End Select Next End Function

ab-chan
質問者

お礼

回答有難うございました。今回はVBAを使わない方法で作らないといけなかったので、nicotinism様の回答は今後の参考資料として勉強させていただきます。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

こんにちは。KenKen_SP です。 VBA でユーザー定義関数を作った方が早いと思いますが、、ダメですかね? ご参考までに。 1. VBE で標準モジュールを挿入し、下部のソースコードをコピペ 2. VBE を閉じ、ワークシート上で次の数式を入力   =DATACHECK(A1,"^[0-9A-z]{6,8}$") これで、A1 セルについて判定できます。第 2 引数の”パターン”は正規表現 で渡します。入力チェックのパターンは柔軟に対応できますよ。例えば、 半角アルファベットのみ → "^[A-z]{1,}$" 半角数字のみ → "^[0-9]{1,}$" 書式 ID-000000 → "^ID-[0-9]{6}$" とか。 正規表現をご存知ない場合は、下記 URL が参考になります。わかり易いです。 私はちんぷんかんぷんだった(今もですが)ので、ここで勉強しました。 http://www.mnet.ne.jp/~nakama/ 以下はソースコードです。 ' 正規表現でわたされたパターンと一致すれば TRUE を返す Function DATACHECK( _   ByRef データ As Variant, _   ByRef パターン As Variant) As Boolean   Dim Reg As Object   Set Reg = CreateObject("VBScript.RegExp")   With Reg     .Pattern = パターン     .IgnoreCase = False     .Global = True     DATACHECK = .Test(データ)   End With   Set Reg = Nothing End Function

ab-chan
質問者

お礼

今回はVBAを使わないでチェックを行なう方法を考えていたものですから、残念ながらご回答いただいたにもかかわらず、利用することができません。ただ正規表現につきましては重点課題でしたので、参考URLを教えていただきましたことに感謝しております。VBAのソースコードも有難うございました。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

きっとほかにいい方法があるのでしょうが・・・・。 文字コードでチェックしたらいかがでしょうか? 数値0~9はCODE48~57 A~ZはCODE65~90 a~zはCODE97~122 CODEは =CODEで求められます。(一個ずつ調べるのは大変そうですが・・・)

ab-chan
質問者

お礼

CODE関数の詳細をお教えくださいまして有難うございました。入力される値を分割してコードチェックをかけるような方法ができそうですね。

関連するQ&A

  • エクセル 全角英文字のみを半角に!

    全角英カナを半角にする関数「asc」は知っているのですが、 英文字のみを半角にする方法はありますでしょうか? ※英文字とカタカナが同セル内に存在しているのですが、カタカナは全角のままで、英文字のみを半角にする事を希望しています。 よろしくお願い致します。

  • 全角・半角混在の文字列から半角文字のみ取り出す

    エクセル勉強中です。問題集で理解できないところがあります。 数式がどういう意味をもつのか教えて頂けるとありがたいです。 よろしくお願いします。 画像添付の問題になります。 A列に製品名が入っています。(製品番号:半角文字)(製品名:全角文字) B列に半角文字の製品番号だけを取り出しなさいというものです。 半角文字の開始位置がバラバラになっているところが問題のポイントになっています。 回答ですが B2: =MID(A2,MATCH(1,INDEX(LENB(MID(A2,COLUMN(2:2),1))*1,0),),LEN(A2)*2-LENB(A2)) こちらで半角文字のみ取り出せるようです。回答には数式のみで何故この関数を使うのか? 使うことでどういった結果を導くなどの解説が一切ありません。(ちなみに出版会社の便利技的な問題集です) MID関数で製品名A2から開始位置を指定して、全角半角をLEN関数LENB関数で半角文字数を 算出して文字列を抽出するという事は理解できます。 ただ、この開始位置の指定の所が理解できません。 数式を分割してみましたが =MID(A2,COLUMN(2:2),1)の所はどの行も製品名の1文字目ですよね・・・ その値にLENB関数で文字数? 数式の検証で見てみると配列のような結果が次々と現れて・・・ MATCH関数もありますしINDEX関数が何か関係しているような気はしているのですが、 INDEX関数と言えば配列に行番号・列番号と例えば表の該当するセルの位置抽出の 知識しかありません。一つのセルでINDEX関数? すいません。独学で勉強していてこの程度の知識ですが、この数式の考え方教えてくださる方よろしくお願いします。

  • エクセルで英数のみを半角に変換するマクロ

    エクセル2003を使っています エクセルで英数のみを半角に変換するマクロの作り方を教えてください。 予め複数のセルを選択しておいて、それらに含まれる文字列の英数のみを半角に(カタカナは全角のまま)変換したいのです。 以前他のサイトで同様の機能のユーザー関数の作り方は見つけたのですが、マクロにする方法がわかりません。 よろしくお願いします。

  • エクセルのセルに入力文字の制限

    エクセルのセルに文字の制限をしたいのですが、例えばA1セルには半角英数、B1セルにはひらがな、C1セルには半角カタカナという感じでキーボートの半角/全角や英数キーを変更しなくても入力出来る方法がありましたら教えて下さい。宜しくお願いします。

  • セル内の文字で半角2文字で1文字とカウントしたい

    openofficeを利用しています。 セル内の全角と半角が混じった文章から半角2文字で1文字とカウント 全角はそのまま1文字とカウント して文字数を数えることはできますでしょうか? LENBが利用できないので困っています。 よろしくお願いします。

  • エクセルで英数字のみを半角にしたい。

    エクセル2000を使用しています。 1つのセルにカタカナと英数字が混在しています。 英数字のみを半角にすることはできるでしょうか。 「ASC関数」を使用したら、 カタカナも半角になってしまいました……。

  • EXCELで一番多く入力されている文字を探す関数

    EXCELで例えば、300個のセルにA~Zまでの記号のうちどれかが入っているとします。 300個のセルに入っている記号の中で、もっとも数が多い記号を表示させる関数があれば教えてください。

  • ACCESS2000の文字数制限について

    ACCESS2000のテーブルで文字数制限をすると、全角でも半角でも 1文字と数えられてしまい、困っています。 全角は2文字、半角は1文字として数えたいのです。 モジュールを使い、LENB()、LEFTB()関数を使っても、上記と同様の現象で 解決しません。よい方法はありますでしょうか?

  • エクセルの文字入力

    ヘボン式の文字入力でYO(よう)とかYU(ゆう)の時にOとUの上に付けるへの様な記号の入力のやり方を教えてください。

  • Excel 条件付き書式:条件を半角文字にしたい

    条件付き書式でセルに色を付けたいのですが、 条件は、「半角文字を使用している事」です。 対象となる半角文字は、”英数カナ記号”です。 どのようにすればよいのでしょうか?

専門家に質問してみよう