
No.2ベストアンサー
- 回答日時:
IsAlphaが無いですね。
チェック用に、半角に統一して(StrConv)文字列を作り、
1字づつ、JISコードの65-90、97-122をエラーにするチェックを行い、上記作った文字列はチェック後は使い捨てる。
こういうルーチンを作るより他ないでしょう。
記号なども含めて考える。
ただ記号は十分検討が必要です。制限しすぎると、運用後にダウンとか、大騒ぎになる恐れをこめてます。
ありがとうございます。
仕様が変わってしまい、また新たな問題が発生してしまいました・・
また行き詰ったらご教授ねがうやもしれません。
今回はとても勉強になりました!
No.5
- 回答日時:
#04です。
補足ありがとうございましたですが想像力が貧困なので、何をどうすれば良いのか理解できませんでした
おそらく事前チェックと事後チェックを一緒くたに書いているからだと思います。もし事前チェック方法は回答として求めていないなら、混乱しますから書かなくて結構です。
具体的な文字列(○×1Ab)を示して、このような結果(1AやError)を得たいというように再度説明をお願いできませんか
No.4
- 回答日時:
正規表現を用いたユーザ定義関数を2つ書きました。
MyFunc1は文字列から半角英数字だけを取り出す関数で、MyFunc2は半角英数字以外がある時に「Error(文字列)」を返す関数です質問のデータがどのように引き渡されるのか分かりませんので、とりあえずエクセルのユーザ定義関数として作りました。ワークシートに値を入力して関数の動作を確認してみてください。仕様に問題がなければロジックだけを流用できると思います。関数は
=MyFunc(A1)
のようにして使います(A1はデータの入力されたセルアドレス)
Function MyFunc1(ByVal trg As Range) As String
'半角英数字を取り出す
Dim RE, mchItems
Dim strPattern As String
Dim idx As Integer
If trg <> "" Then
Set RE = CreateObject("VBScript.RegExp")
strPattern = "[0-9A-Z]"
With RE
.Pattern = strPattern
.IgnoreCase = True
.Global = True
Set mchItems = .Execute(StrConv(trg.Value, vbNarrow))
If mchItems.Count > 0 Then
For idx = 0 To mchItems.Count - 1
MyFunc1 = MyFunc1 & mchItems(idx).Value
Next idx
End If
End With
Set RE = Nothing
End If
End Function
Function MyFunc2(ByVal trg As Range) As String
'半角英数字以外があればエラーを返す
Dim RE, mchItems
Dim strPattern As String
Dim idx As Integer
If trg <> "" Then
Set RE = CreateObject("VBScript.RegExp")
strPattern = "[^0-9A-Z]"
With RE
.Pattern = strPattern
.IgnoreCase = True
.Global = True
Set mchItems = .Execute(StrConv(trg.Value, vbNarrow))
If mchItems.Count > 0 Then
MyFunc2 = "Error"
End If
End With
Set RE = Nothing
End If
End Function
ありがとうございます。
とても参考になりました。
ぜひ取り入れたいのですが、仕様が変わってしまい、
また新たな問題が発生してしまいました。
フォームでの事前チェックで、全角入力を”必ず弾きたい”、かつ
カタカナ・ひらがな入力を無効化する仕様に…
現在、KeyPress()で、大小A~Zと0~9のみ受け入れるようにしました。
が、キーボードで大小変換を押されてしますと(2バイト)は
チッェク対象外になってしまうようです。
ご教授いただければよろしくお願いします。
No.1
- 回答日時:
全角入力を”必ず弾きたい”のですか?
StrConv(str, vbNarrow)
で半角変換して受け入れるのは駄目ですか?
この回答への補足
その項目はフォームで、IME設定で半角英数字のみ入力
させています。(この状況ならチェックは要らないはずなのですが)
どうしてもチェックをいれないといけないようなのです。
なので、全角入力はありえない状況での、wチェックということ
になります。
入力前で半角英数字をはじいて、入力後チェックで半角英数字を
確認というような感じです。
もしよろしければご教授ください。
ありがとうございます。参考にいただきました。
しかし仕様が変わってしまい、
また新たな問題が発生してしまいました。
フォームでの事前チェックで、全角入力を”必ず弾きたい”、かつ
カタカナ・ひらがな入力を無効化する仕様に…
現在、KeyPress()で、大小A~Zと0~9のみ受け入れるようにしました。
が、キーボードで大小変換を押されてしますと(2バイト)は
チッェク対象外になってしまうようです。
ご教授いただければよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルでアルファベットか数値の判定をしたいのですが
Excel(エクセル)
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
-
4
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
5
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
6
InputBoxの入力値を半角数字のみと限定する方法
Excel(エクセル)
-
7
文字列から英数字のみを抽出する関数
Excel(エクセル)
-
8
エクセルで英数大文字のみの入力制限は可能ですか
Excel(エクセル)
-
9
Access サブフォームでの選択行の取得
その他(データベース)
-
10
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
11
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
12
文字列にアルファベットが何文字目に含まれているかの算出
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字の入力で横バー上段、中断...
-
全角括弧と全角読点の間隔を狭...
-
メッセージボックスで1025文字...
-
Accessの文字数を調べたい
-
エクセルのCOUNTIFが正しくカウ...
-
VBAで英数字入力チェックしたい。
-
PPT ファイルの文字カウント=...
-
半角文字と全角文字の判別の仕方
-
「半角スペース」と「 」...
-
ホームページにMP3を
-
エクセルでの漢字、カタカナ、...
-
VBAのコマンドボタンの文字列の...
-
文字化け変換方法
-
文字列の置換をCStringで(C++)
-
ラベル(スタティックテキスト)...
-
、"(ダブルクォーテーション)...
-
COBOLの改行
-
ソースコードの1行が長いとき...
-
コンボボックスの項目中に改行を
-
グレープシティのSPREAD...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PPT ファイルの文字カウント=...
-
文字の入力で横バー上段、中断...
-
エクセルのCOUNTIFが正しくカウ...
-
メッセージボックスで1025文字...
-
Excel関数「COUNTIF」で”文字”...
-
全角括弧と全角読点の間隔を狭...
-
Accessの文字数を調べたい
-
VBAで英数字入力チェックしたい。
-
XMLのタグ名の禁則文字
-
エクセルでの漢字、カタカナ、...
-
全角英数文字が嫌われる理由を...
-
Replace関数は文字数の制限ある...
-
なぜインターネットでは半角カ...
-
=code(" ") で値が160となる文...
-
記号は半角と全角どちらがよい...
-
VBのソース検索で、コメントア...
-
マクロできる方教えてください...
-
半角文字と全角文字の判別の仕方
-
全角半角混在の文字列から○文字...
-
ショートメールの文字数
おすすめ情報