数値の取り出しについて

解決


けーじ  2008-03-28 22:07:00  No: 139415

色々調べたのですが、的を得た答えが見つからなかったため、質問させていただきます。
VB6.0を使用しています。

TextBoxに例えば、「AB12CD34」という、
数値と文字が混合しているものが入っているとします。
この中で、数値のみを取り出す方法を教えていただきたいのですが、どのように記述すればよいのか分かりません。

アドバイスの方、よろしくお願いします。


魔界の仮面弁士  2008-03-28 22:14:43  No: 139416

やり方はいろいろあるかと思いますが、たとえばこのように書けます。

S = "AB12CD34"

X = ""
For pos = 1 To Len(S)
    C = Mid(S, pos, 1)
    If C Like "#" Then
        X = X & C
    End If
Next
Debug.Print X

全角空白も除外するなら、
  If C Like "#" Then
の部分を
  If C Like "[0-9]" Then
にかえて、Option Compare Binary で実行すれば OK。

もし、Option Compare に依存させたくないのであれば、
  If InStr(1, "0123456789", C, vbBinaryCompare) > 0 Then
という感じで。


けーじ  2008-03-28 23:02:35  No: 139417

素早いアドバイスありがとうございます。

また質問なんですが、アルファベットを入力できないようにするには、
やはり、KeyAsciiで一文字づつ制御をかけるしかないのでしょうか?

よろしくお願いします。


魔界の仮面弁士  2008-03-29 03:36:30  No: 139418

KeyAscii では不足だと思いますよ。

たとえば、クリップボードからの「貼り付け」は防げませんよね。
貼りつけにしても、Ctrl + V、Shift + Insert、マウス右クリックの貼り付け、
あるいは、多機能マウス[貼り付け]ボタンなど、複数の操作方法がありますし。
(まぁ、貼り付けだけならば、WM_PASTE で拾えそうですけれども)

その他、手元の Tablet PC 環境(Vista + VB6)で、ペン入力を試してみたところ、
「abcde」という文字列を一度に入力した場合、Text1_KeyPress に届いた
KeyAscii は、最後の e の文字(&H65)だけでしたので、キーボード以外からの
入力においても考慮しておいた方が良いでしょう。

> KeyAsciiで一文字づつ制御をかけるしかないのでしょうか?
KeyPress の制御「を」かけるのではなく、
KeyPress の制御「も」かけた上で、別途、入力検証を設けるべきかと。


けーじ  2008-03-31 18:30:18  No: 139419

返信が遅くなりました。

丁寧なアドバイスありがとうございます。

参考にさせて頂きます。

一旦、これで解決とさせて頂きます。

ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加