- ベストアンサー
必要な文字のみに変換する場合
Text1に入力された文字からアルファベットの大文字のみをText2へ表示させたい(つまり記号、2バイト文字などは省き、小文字は大文字に変換)と考えています。 Dim Str as String Str = Text1.text Str = Trim(Str) Str = Replace(Str, " ", "") Str = Replace(Str, " ", "") Str = Replace(Str, vbTab, "") Str = Replace(Str, vbCrLf, "") スペース、タブ、改行は空白文字に置き換えることができたのですが、アルファベット以外の記号や小文字への変換、2バイト文字の扱い方などが思いつきません。 何か方法がありましたら、お教えください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じで Sub aaa() Dim i As Long Dim str As String Dim strTmp As String str = "あいうエオABcdEfG" For i = 1 To Len(str) If LenB(StrConv(Mid(str, i, 1), vbFromUnicode)) = 2 Then 'なにもしない Else strTmp = strTmp & UCase(Mid(str, i, 1)) End If Next i str = strTmp Debug.Print str End Sub
その他の回答 (3)
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
Wendy02さんの発言 >VBScript.RegExp の正規表現でやってみたらいかがですか? これは「VBScriptのライブラリを、VBから利用しましょう」と言うことです。 私もこの便利なライブラリの存在を知りませんでしたので、「目から鱗」レベルの 情報に、VBへの導入サンプルを#3で載せたのです。 ちなみにVBでCreateObjectで実現するサンプルは、「VBA」でも「.NET」でも ほとんど利用可能だと思っていいと言っても過言ではありません。 http://www.microsoft.com/japan/msdn/library/ja/script56/html/vsobjregexp.asp http://www.interq.or.jp/student/exeal/dss/ref/vbscript/object/regexp.html 私は業務中は、.NETしか環境が無いので、VB6への投稿はExcel.VBAでサンプルを 作成しております。 #3のサンプルもVBAで作成いたしました。VBAの方言(なまり)を利用していませんので、 サンプルはVB6でも動作が可能です。 なぜ、ここまで熱く語るかというと、 ※理由1 私はそこそこ長く開発をしておりましすので、 ボチボチのスキルはあると思っておりました。が!!、 このライブラリの存在自体を知りませんでした。 ※理由2 実際使ってみると、「今後に役立つライブラリ」であり「今まで知っていたら、 過去の関数プロジェクトの関数の仕組みを変えていたのになぁ」という 後悔の念があり、この掲示板形式での情報共有を行いたい。 ということです。 一度サンプルを実行してみることをお勧めします。 文字列が、ものすごく長い場合には、多大な威力を発揮するはずです。 おまけでですが、、、先ほどのURLを調べるときに出てきた情報を載せます。 RegExpオブジェクトはJScriptのライブラリでも存在するようです。 http://www.microsoft.com/japan/msdn/library/default.asp? url=/japan/msdn/library/ja/script56/html/js56jsobjregexp.asp
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
#1のWendy02さん すばらしい。 初めて >VBScript.RegExp の存在を知りました。 調べて見ると、大変便利なライブラリですねー 自分の履歴として、残したいので、作ってみたサンプルを載せます。 Wendy02さん 本当にありがとうございました。 Sub Main() Dim strパラメータ As String Dim str取得値 As String 'パラメータ文字列 strパラメータ = "WWgWあ" & vbCrLf & "egnうdえyy" '取得する [文字列/パターンはアルファベット/比較モードは、大小を問わない] str取得値 = パターンでの取得(strパラメータ, "[A-Z]", True) 'str取得値 = パターンでの取得(strパラメータ, "[A-Za-z]") '← これでもいい 'デバッグ(結果内容は敬意を込めて・・・) MsgBox _ "パラメータ:" & vbCrLf & strパラメータ _ & vbCrLf & vbCrLf _ & "取得値:" & vbCrLf & str取得値 _ & vbCrLf & vbCrLf _ & "変換結果:" & vbCrLf & UCase(str取得値) End Sub Function パターンでの取得( _ ByVal p_str文字列 As String _ , ByVal p_strパターン As String _ , Optional ByVal p_ASCII比較 As Boolean = False _ ) As String Dim vbsRegExp As Object Dim vbsMCol As Object Dim vbsMch As Object Dim strRet As String 'オブジェクト生成 Set vbsRegExp = CreateObject("VBScript.RegExp") 'パラメータをセット vbsRegExp.Pattern = p_strパターン vbsRegExp.IgnoreCase = p_ASCII比較 vbsRegExp.Global = True 'これをTRUEにしておかないと、最初に見つかった部分しか返らないっぽい '実行 'GlobalがTRUEだと、一致部分が分割されて、MatchCollectionに分割されて格納されるらしい Set vbsMCol = vbsRegExp.Execute(p_str文字列) '分割されて格納された結果の連結 For Each vbsMch In vbsMCol strRet = strRet & vbsMch.Value Next Set vbsMch = Nothing Set vbsRegExp = Nothing Set vbsMCol = Nothing パターンでの取得 = strRet End Function
お礼
以前も質問に回答いただき、1050YENさんありがとうございます。少しまだ分からないところがありますが、おなじVB(?)つながりなのか書き方が似ているような印象は受けました。 勉強したいと思います。ありがとうございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 VBScript.RegExp の正規表現でやってみたらいかがですか?ANSI で、検索させてしまえばよいと思います。 アルファベットだけなら、パターンは、[A-Za-z]+ です。
お礼
申し訳ございませんでした。VB6.0を使用している、ということを記述していませんでした。全く知らないのですが、検索してみたらVBScriptというのは少し違いがあるようなのですね。 ですが後々いつか勉強することになるでしょうし、1050YENさんがおっしゃる様に非常に便利な説明なのだと感じました。今から少し勉強したいと思います。 ありがとうございました。
お礼
StrConv関数やUCase関数などの使い方など知らない部分を多く知ることができてよかったです。おかげで完成させることができました。ありがとうございました。