• ベストアンサー

必要な文字のみに変換する場合

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バイト文字の扱い方などが思いつきません。 何か方法がありましたら、お教えください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

こんな感じで 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

gogomama
質問者

お礼

StrConv関数やUCase関数などの使い方など知らない部分を多く知ることができてよかったです。おかげで完成させることができました。ありがとうございました。

その他の回答 (3)

回答No.4

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

回答No.3

#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

gogomama
質問者

お礼

以前も質問に回答いただき、1050YENさんありがとうございます。少しまだ分からないところがありますが、おなじVB(?)つながりなのか書き方が似ているような印象は受けました。 勉強したいと思います。ありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 VBScript.RegExp の正規表現でやってみたらいかがですか?ANSI で、検索させてしまえばよいと思います。 アルファベットだけなら、パターンは、[A-Za-z]+ です。

gogomama
質問者

お礼

申し訳ございませんでした。VB6.0を使用している、ということを記述していませんでした。全く知らないのですが、検索してみたらVBScriptというのは少し違いがあるようなのですね。 ですが後々いつか勉強することになるでしょうし、1050YENさんがおっしゃる様に非常に便利な説明なのだと感じました。今から少し勉強したいと思います。 ありがとうございました。

関連するQ&A

  • VBAでテキストファイルに書き出し時の改行方法

    Excel VBAでテキストファイルに書き出しをしたいと思っています。テキスト内で改行を指定したいと思うのですが、どのようにやったらよいでしょうか? Dim str As String str = "ABC" & vbCrLf str = str & "DEF" & vbCrLf とやってもうまくいきません。何が悪いと考えられるでしょうか?

  • .NET 文字コードの変換

    VB2008で文字列を他の文字コードにする方法が知りたいです。 何かしての部分がわかりません。 VB2005でも使えるものだったらうれしいです。 Dim str_sjis as string Dim str_euc as string = "パソコン" '例えばEUC-JP '''何かして str_sjisにシフトJISで文字列が入っている。 .Netの文字コードの変換の仕方がごちゃごちゃして分かりづらいです。

  • PHPの空白除去

    PHP5において 半角の前後空白を削除する関数trimは理解してます。 文字列中にある半角及び全角の空白を除去するには 文字列置換用の関数、例えばstr_replaceを使って置換すれば 全て空白を除去出来ます。 例: ---------------------------------- $string=" あ い う え お "; $all=" ";//全角スペース $half=" ";//半角スペース $no="";//削除用変数 $string=str_replace($all,$no,$string); $string=str_replace($half,$no,$string); ---------------------------------- 最後の2行を書けば置換が出来るのですが、問題はこの二つの関数をまとめてクラス化し、再利用したいと思っています。 クラスの作成方法及び使用方法がまだまだ理解していないので、困ってます。どなたかお力になって頂ければ幸いにございます。

    • ベストアンサー
    • PHP
  • byte[]→String変換後の文字列が違うのはなぜ?

    byte[]→String変換の処理を行っていたのですが、 使うメソッド(コンストラクタ)によって結果が違ってきます。なぜだかよくわからないのですが、どなたかご説明していただけないでしょうか。 byte[] bt; String str1 = "12345", str2; bt = str1.getBytes(); (1)str2 = new String(bt); (2)str2 = bt.toString(); (1)の方法と(2)の方法では答えが違ってきます。(1)では"12345"でしたが、(2)ではなんだか記号などまざったぐちゃぐちゃな文字列でした。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • 【PHP】半角「\」を全角「¥」に変換したい

    PHP初心者です。 バージョンは4.4.4 ファーストサーバ 文字コードはUTF-8 です。 マルチバイト文字の中の半角「\」をそれ以外の文字に変換したいのですがどうすればできるでしょうか? (1)$str = mb_ereg_replace("\\", '¥', $str); (2)$str = preg_replace("\\", '¥', $str); (1)も(2)もエラーとなり変換できません。 お詳しい方、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 文字列aを一文字ずつExcelのセルに入力する方法

    Excel VBAについて確認させてください。 下記のエクセルマクロはエクセルのA列に入力されてある文字を順に読み込んで ユーザが入力したテキストファイル(=FN1)を開いて エクセルのA列に入力されてある文字が見つかった場合は削除する作業を 文字が入力されてある最後の行までループによって行い、 最終的に処理した文字列aを出力ファイル(=FN2)に保存するプログラムです。 このプログラムを改良して文字列aを出力ファイル(=FN2)に保存するのをやめて 文字列aを一文字ずつ、Excelのセルごとに1行ずつ入力するプログラムを作成したいのですが どのようにすればよいかご教授いただけますでしょうか。 以下、プログラム本文です。 ------------------------- Sub sample() Dim a As String Dim y As Long Dim x As String Dim FN1 As String Dim FN2 As String x = InputBox("チェックするファイル名を入力してください。(拡張子も含めてください。)") FN1 = ThisWorkbook.Path & "\" & x FN2 = ThisWorkbook.Path & "\チェック済" & x With CreateObject("Scripting.FileSystemObject").GetFile(FN1).OpenAsTextStream a = .ReadAll For y = 1 To Cells(Rows.Count, 1).End(xlUp).Row a = Replace(a, Cells(y, 1), "") '読み込んだテキストファイルにエクセルのA列にある文字が見つかった場合削除 a = Replace(a, vbCrLf, "") '改行コードの削除 a = Replace(a, vbTab, "") 'タブコードの削除 Next .Close End With With CreateObject("Scripting.FileSystemObject").OpenTextfile(FN2, 2, True) .Write a .Close End With End Sub

  • 小文字、大文字変換

    こんにちは。 javaの勉強をやっているのでですが 思うとおりに進みません。 一文字ずつ小文字なら大文字に大文字なら小文字に変換するといったものです。 途中経過です。 import java.io.*; class Ex60{ public static void main(String args[])throws IOException{ String str3 ="0"; String output = "0"; String s1 = new String("end"); while(str3.equals(s1) == false ){ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while(str3.equals(s1) == false ){ System.out.print(">"); str3 = br.readLine(); if(str3.equals(s1) == true) break; for(int i=0; i<str3.length(); i++){ char c = str3.charAt(i); if(Character.isLowerCase(c)) output = str3.toUpperCase(); else if(Character.isUpperCase(c)) output= str3.toLowerCase(); } System.out.println("入力された文字列は" + str3 + "です。"); System.out.println("大文字小文字を変換すると" + output + "です。"); } } } } /* 実行結果 >abc 入力された文字列はabcです。 大文字小文字を変換するとABCです。 >AbC 入力された文字列はAbCです。 大文字小文字を変換するとabcです。 >AAb 入力された文字列はAAbです。 大文字小文字を変換するとAABです。 */ 条件として一文字が大文字か小文字の判定にはCharacterクラスの isLowerCase()メソッド、isUpperCase()メソッド 一文字の変換はtoUpperCase()メソッド、toLowerCaseメソッドを使います。 どなたかよろしくおねがいします。

  • テキストデータなのですが、

    途方に暮れてます。教えて下さい。 VB6にて、テキストファイルを読み込みます。 改行の部分はReplace(テキストファイル, vbLf, vbNewLine)として、 改行しました。(私はバイナリの扱いをほとんど知りません) 次に問題となったのが、バイナリエディタで見てみると、00という空白 文字です。(ドットかはっきりわからないのですが、.となってます) この空白文字を素直に空白文字としたいのですが、空白が削除されて 変換されます。 前 ABCDEF 後ABCDEF といった感じです。 そのままの状態で改行のように、空白文字を変換したいのですが、 どうすればよいでしょうか? 私自身、バイナリについてわかっていないので、内容がわかりにくい と思いますが、どうぞよろしくお願いします。

  • Excelマクロでファイルで重複する文字の削除方法

    Excel VBAについて確認させてください。 下記のExcelマクロはエクセルのA列に入力されてある文字を順に読み込んで ユーザが入力したテキストファイル(=FN1)を読み込んで エクセルのA列に入力されてある文字が見つかった場合は削除する動作の繰り返し作業を行い、 エクセルのA列の文字が入力されてある最後の行まで行ったら 出力ファイル(=FN2)として保存するプログラムです。 ここで出力ファイルにはエクセルのA列に入力されていない文字が 残るものと思われますが、ここで入力されていない文字で 重複する文字があった場合はまとめて一つにする方法をを ご教授いただけますでしょうか。 以上お手数おかけしますがよろしくお願いします。 以下、プログラム本文です。 ----------------------------------------------- Sub sample() Dim a As String Dim y As Long Dim x As String Dim FN1 As String Dim FN2 As String x = InputBox("チェックするファイル名を入力してください。(拡張子も含めてください。)") FN1 = ThisWorkbook.Path & "\" & x FN2 = ThisWorkbook.Path & "\チェック済" & x With CreateObject("Scripting.FileSystemObject").GetFile(FN1).OpenAsTextStream a = .ReadAll For y = 1 To Cells(Rows.Count, 1).End(xlUp).Row a = Replace(a, Cells(y, 1), "") '読み込んだテキストファイルにエクセルのA列にある文字が見つかった場合削除 a = Replace(a, vbCrLf, "") '改行コードの削除 a = Replace(a, vbTab, "") 'タブコードの削除 Next .Close End With With CreateObject("Scripting.FileSystemObject").OpenTextfile(FN2, 2, True) .Write a .Close End With End Sub

  • エクセルのマクロについて質問、次のマクロが欲しいです。「選択した範囲のセルに左から○○番目に半角スペースを挿入」

    エクセルのマクロについて質問、次のマクロが欲しいです (1)選択した範囲のセルに左から○○番目に半角スペースを挿入。 例:○○を1とした場合 1234 5678 9101 1235 5679 9102 1236 5680 9103 ↓ 1■234 5■678 9■101 1■235 5■679 9■102 1■236 5■680 9■103 *■はスペースのつもりです (2)選択した範囲のセルに右から○○番目に半角スペースを挿入。 例:○○を1とした場合 1234 5678 9101 1235 5679 9102 1236 5680 9103 ↓ 123■4 567■8 910■1 123■5 567■9 910■2 123■6 568■0 910■3 (3)選択セルの1番右の文字を上付き文字。 例: 1234 1235 1236 ↓ 1234←4を上付き 1235←5を上付き 1236←6を上付き 「選択した範囲のセル中にスペースやタブがあれば全部削除」 といった似たようなマクロを発見したのですが。これを利用してできないでしょうか? Sub 空白除去() Dim rng As Range Dim str as String For Each rng In Selection ' --- タブを除去 str = Replace(rng.Value, vbTab, "") ' --- 半角スペースを除去 str = Replace(str , " ", "") ' --- 全角スペースを除去 rng.Value = Replace(str , " ", "") Next End Sub お力添えよろしくお願いします。