
エクセルのあるセル内に入力させた文字のチェックにあたり
で半角英数(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の場合エラーとしているのですが
半角カタカナや記号に対してチェックをかける関数が
分かりません。
入力されてくるセルに対するチェックの関数は
半角カタカナチェックの関数式
記号チェックの関数式と別に分けていただいても構いませんので
アドバイスいただけましたら幸いです。
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 の方がシンプルです。
頑張って下さい。
私は関数が苦手なので、もっと良い回答があるかもしれません。
すみません、あまりお力になれず。
再度ご回答有難うございました。一人目の回答の方を参考に以下のように作ってみました。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様はじめ皆様にお礼申し上げます。
有難うございました。
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
回答有難うございました。今回はVBAを使わない方法で作らないといけなかったので、nicotinism様の回答は今後の参考資料として勉強させていただきます。
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
今回はVBAを使わないでチェックを行なう方法を考えていたものですから、残念ながらご回答いただいたにもかかわらず、利用することができません。ただ正規表現につきましては重点課題でしたので、参考URLを教えていただきましたことに感謝しております。VBAのソースコードも有難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルの数式で教えてください。 1 2023/07/31 15:49
- Excel(エクセル) EXCELでの文字・数字入力の基本について教えてください。 2 2023/05/29 23:17
- その他(Microsoft Office) WordやExcelで英数字のみ半角または全角にしたい 6 2022/08/03 08:18
- Access(アクセス) Accessのテキストボックスの入力文字制限 1 2023/01/18 20:43
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- Excel(エクセル) Excelの入力規則にいれる関数について 7 2022/12/22 10:19
- その他(ソフトウェア) ソースネクストアプリをインストールし、製品登録で半角英数字が入力できない 5 2022/07/03 22:44
- Excel(エクセル) セルに入力した小文字アルファベット、数字を大文字表示させるには? 3 2022/07/13 10:01
- Visual Basic(VBA) VBA 「,」・空白・カタカナ等の複数条件のマクロ 2 2023/08/23 11:57
- Excel(エクセル) エクセル 関数について質問です。 2 2022/10/03 11:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
助けてください!出来ないと解...
-
正整数の半角数字かどうか判定する
-
VC#でテキストボックスに変数の...
-
「終了していない文字列型の定...
-
VB.NET2003 テキストボックスに...
-
文字認証の問題
-
エクセル 半角英数6文字以上 ...
-
VBAによる第3、4水準文字の判定...
-
replaceで正規表現を利用したい
-
クオーテーションの入力方法
-
エクセルVBA/ Formatで文字列が...
-
リクエスト結果が一瞬しか表示...
-
JSPの処理の途中で、JavaScript...
-
1つのVBAコードをすべてのコア...
-
以下のコードを実行しても、オ...
-
JavascriptでのExcel起動について
-
if(1){...}とはどういうことで...
-
ASP(VBS) ←→ JavaScript の変数...
-
JavaScriptでVBのOption Explic...
-
テキストエリア文字制限について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字認証の問題
-
正整数の半角数字かどうか判定する
-
VB.NET2003 テキストボックスに...
-
VC#でテキストボックスに変数の...
-
エクセルVBA/ Formatで文字列が...
-
禁止文字チェック
-
ハイフンだけ置換したい。
-
VBAによる第3、4水準文字の判定...
-
「終了していない文字列型の定...
-
Visual Basic 6.0 のテキストボ...
-
javascript 文字列の最後から1...
-
gas 全角数字を半角数字に変換
-
Vba SelStart、SelLen教えてく...
-
C#でTextBoxに数値のみ入力可能...
-
CListCtrl の特定のセル(アイ...
-
Excel VBA カタカナ セル判定...
-
エクセル 半角英数6文字以上 ...
-
入力された文字を1文字ずつチ...
-
正規表現について
-
c言語で「文字列(最大80文字)お...
おすすめ情報