数値の取り出しについて

解決


けーじ  2008-03-28 13:07:00  No: 139415  IP: 192.*.*.*

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

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

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

編集 削除
魔界の仮面弁士  2008-03-28 13:14:43  No: 139416  IP: 192.*.*.*

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

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 14:02:35  No: 139417  IP: 192.*.*.*

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

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

よろしくお願いします。

編集 削除
魔界の仮面弁士  2008-03-28 18:36:30  No: 139418  IP: 192.*.*.*

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

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

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


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

編集 削除
けーじ  2008-03-31 09:30:18  No: 139419  IP: 192.*.*.*

返信が遅くなりました。

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

参考にさせて頂きます。

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

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

編集 削除