アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になります。

いままで、ある項目の入力チェックを数字のみで
行っていたところ【IsNumeric】を英数字で行いたいのですが
いくら調べても見当たりません・・・

知っている方、どうかご指南ください。
よろしくお願いします。

A 回答 (5件)

IsAlphaが無いですね。


チェック用に、半角に統一して(StrConv)文字列を作り、
1字づつ、JISコードの65-90、97-122をエラーにするチェックを行い、上記作った文字列はチェック後は使い捨てる。
こういうルーチンを作るより他ないでしょう。
記号なども含めて考える。
ただ記号は十分検討が必要です。制限しすぎると、運用後にダウンとか、大騒ぎになる恐れをこめてます。
    • good
    • 0
この回答へのお礼

ありがとうございます。
仕様が変わってしまい、また新たな問題が発生してしまいました・・
また行き詰ったらご教授ねがうやもしれません。
今回はとても勉強になりました!

お礼日時:2007/10/18 16:31

#04です。

補足ありがとうございました
ですが想像力が貧困なので、何をどうすれば良いのか理解できませんでした

おそらく事前チェックと事後チェックを一緒くたに書いているからだと思います。もし事前チェック方法は回答として求めていないなら、混乱しますから書かなくて結構です。

具体的な文字列(○×1Ab)を示して、このような結果(1AやError)を得たいというように再度説明をお願いできませんか
    • good
    • 0

正規表現を用いたユーザ定義関数を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
    • good
    • 0
この回答へのお礼

ありがとうございます。
とても参考になりました。
ぜひ取り入れたいのですが、仕様が変わってしまい、
また新たな問題が発生してしまいました。

フォームでの事前チェックで、全角入力を”必ず弾きたい”、かつ
カタカナ・ひらがな入力を無効化する仕様に…
現在、KeyPress()で、大小A~Zと0~9のみ受け入れるようにしました。
が、キーボードで大小変換を押されてしますと(2バイト)は
チッェク対象外になってしまうようです。

ご教授いただければよろしくお願いします。

お礼日時:2007/10/18 16:39

>どうしてもチェックをいれないといけないようなのです。



imogasi さんの提案のように、ループで1文字ずつチェックするしか無いと思います。
    • good
    • 0

全角入力を”必ず弾きたい”のですか?



StrConv(str, vbNarrow)
で半角変換して受け入れるのは駄目ですか?

この回答への補足

その項目はフォームで、IME設定で半角英数字のみ入力
させています。(この状況ならチェックは要らないはずなのですが)
どうしてもチェックをいれないといけないようなのです。

なので、全角入力はありえない状況での、wチェックということ
になります。
入力前で半角英数字をはじいて、入力後チェックで半角英数字を
確認というような感じです。

もしよろしければご教授ください。

補足日時:2007/10/17 19:20
    • good
    • 0
この回答へのお礼

ありがとうございます。参考にいただきました。

しかし仕様が変わってしまい、
また新たな問題が発生してしまいました。

フォームでの事前チェックで、全角入力を”必ず弾きたい”、かつ
カタカナ・ひらがな入力を無効化する仕様に…
現在、KeyPress()で、大小A~Zと0~9のみ受け入れるようにしました。
が、キーボードで大小変換を押されてしますと(2バイト)は
チッェク対象外になってしまうようです。

ご教授いただければよろしくお願いします。

お礼日時:2007/10/18 16:37

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

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


このQ&Aを見た人がよく見るQ&A