色々調べたのですが、的を得た答えが見つからなかったため、質問させていただきます。
VB6.0を使用しています。
TextBoxに例えば、「AB12CD34」という、
数値と文字が混合しているものが入っているとします。
この中で、数値のみを取り出す方法を教えていただきたいのですが、どのように記述すればよいのか分かりません。
アドバイスの方、よろしくお願いします。
やり方はいろいろあるかと思いますが、たとえばこのように書けます。
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
という感じで。
素早いアドバイスありがとうございます。
また質問なんですが、アルファベットを入力できないようにするには、
やはり、KeyAsciiで一文字づつ制御をかけるしかないのでしょうか?
よろしくお願いします。
KeyAscii では不足だと思いますよ。
たとえば、クリップボードからの「貼り付け」は防げませんよね。
貼りつけにしても、Ctrl + V、Shift + Insert、マウス右クリックの貼り付け、
あるいは、多機能マウス[貼り付け]ボタンなど、複数の操作方法がありますし。
(まぁ、貼り付けだけならば、WM_PASTE で拾えそうですけれども)
その他、手元の Tablet PC 環境(Vista + VB6)で、ペン入力を試してみたところ、
「abcde」という文字列を一度に入力した場合、Text1_KeyPress に届いた
KeyAscii は、最後の e の文字(&H65)だけでしたので、キーボード以外からの
入力においても考慮しておいた方が良いでしょう。
> KeyAsciiで一文字づつ制御をかけるしかないのでしょうか?
KeyPress の制御「を」かけるのではなく、
KeyPress の制御「も」かけた上で、別途、入力検証を設けるべきかと。
返信が遅くなりました。
丁寧なアドバイスありがとうございます。
参考にさせて頂きます。
一旦、これで解決とさせて頂きます。
ありがとうございました。