【VBA】半角カタカナのみを全角にするには?

このQ&Aのポイント
  • VBAで半角カタカナのみを全角にする方法について知りたいです。特定のコードを使用しているのですが、平仮名も全角カタカナに変換されてしまいます。どのようにすれば、平仮名をそのままにすることができるでしょうか?
  • VBAを使用して、半角カタカナを全角に変換する方法を教えてください。現在、特定のコードを使用していますが、平仮名も全角カタカナに変換されてしまいます。平仮名をそのままにする方法はありますか?
  • VBAで半角カタカナのみを全角に変換したいのですが、平仮名も全角カタカナに変換されてしまいます。平仮名をそのままにする方法はありますか?VBAの正規表現を使用していますが、正確な方法がわかりません。
回答を見る
  • ベストアンサー

【VBA】半角カタカナのみを全角にするには?

http://bekkoame.okwave.jp/qa8979427.html こちらのページを参考にしたのですが カタカナのみ全角にしたいのですが 平仮名がカタカナになってしまいます。 正規表現と言うのがよくわからないので コピペで使ってますが Sub Sample2() Dim myStr As String Dim Match As Object, Matches As Object Dim CW As String With CreateObject("VBScript.RegExp") .Pattern = "[\uFF61-\uFF9F]+" '---(1) .Global = True myStr = "あああイイイ" If Len(myStr) > 0 Then Set Matches = .Execute(myStr) 'マッチしたすべての文字列を置換 For Each Match In Matches myStr = Replace(myStr, Match.Value, _ StrConv(Match.Value, vbWide)) '---(2) Next Match CW = myStr End If End With End Sub だと「あああ」は平仮名のままなのですが myStr = "のののノノノ" にすると、ひらがなの「ののの」が全角カタカナになってしまいます。 Sub test() Call KanaJisF("あああイイイ") End Sub Function KanaJisF(ByVal sSrc As String) As String Dim sTempW As String Dim sTempN As String Dim i As Long ' ' 全角カナに相当する文字コードを総当たりでループ For i = -31852 To -31936 Step -1 sTempW = Chr(i) ' 全角カナ変数に格納 sTempN = StrConv(sTempW, vbNarrow) ' 半角カナに変換して変数に格納 ' ' 半角カナ各文字が、文字列に含まれている場合、全角カナに置換 If InStr(1, sSrc, sTempN) Then sSrc = Replace(sSrc, sTempN, sTempW) Next i ' ' 半角長音、文字列に含まれている場合、全角長音に置換 sTempN = Chr(176) If InStr(sSrc, sTempN) Then sSrc = Replace(sSrc, sTempN, "ー") KanaJisF = sSrc End Function こちらのコードは、「あああ」も全角カタカナになりました。 "のののノノノ"も同様です。 平仮名は平仮名のままにしたいのですが そのような方法はありますか?

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

  • ベストアンサー
  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.2

こんにちは 質問がイマイチ良く分からないのですが、 Sub test()   Dim myStr As String   myStr = "あああガペヅイイイ"   MsgBox Evaluate("DBCS(""" & myStr & """)") End Sub この程度じゃダメなのですか?

xrkxhzfrzn
質問者

お礼

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

その他の回答 (1)

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.1

「正規表現」については、後述。 Public a この1行を、元の「Sub」プロシージャの上の行に追加してください。 Public a←この1行は、すべての「Sub」プロシージャの上の行です。 Sub Test() For i = 1 to 3 a = Cells(i, 1).Value Call k Cells(i + 4, 1).Value = a End Sub などと、お使いください。 「a」に入っている、すべての半角カタカナを全角カタカナにします。 Sub k() a = Replace(a, "ヴ", "ヴ") a = Replace(a, "ガ", "ガ") a = Replace(a, "ギ", "ギ") a = Replace(a, "グ", "グ") a = Replace(a, "ゲ", "ゲ") a = Replace(a, "ゴ", "ゴ") a = Replace(a, "ザ", "ザ") a = Replace(a, "ジ", "ジ") a = Replace(a, "ズ", "ズ") a = Replace(a, "ゼ", "ゼ") a = Replace(a, "ゾ", "ゾ") a = Replace(a, "ダ", "ダ") a = Replace(a, "ヂ", "ヂ") a = Replace(a, "ヅ", "ヅ") a = Replace(a, "デ", "デ") a = Replace(a, "ド", "ド") a = Replace(a, "バ", "バ") a = Replace(a, "ビ", "ビ") a = Replace(a, "ブ", "ブ") a = Replace(a, "ベ", "ベ") a = Replace(a, "ボ", "ボ") a = Replace(a, "パ", "パ") a = Replace(a, "ピ", "ピ") a = Replace(a, "プ", "プ") a = Replace(a, "ペ", "ペ") a = Replace(a, "ポ", "ポ") a = Replace(a, "ヲ", "ヲ") a = Replace(a, "ァ", "ァ") a = Replace(a, "ィ", "ィ") a = Replace(a, "ゥ", "ゥ") a = Replace(a, "ェ", "ェ") a = Replace(a, "ォ", "ォ") a = Replace(a, "ャ", "ャ") a = Replace(a, "ュ", "ュ") a = Replace(a, "ョ", "ョ") a = Replace(a, "ッ", "ッ") a = Replace(a, "ー", "ー") a = Replace(a, "ア", "ア") a = Replace(a, "イ", "イ") a = Replace(a, "ウ", "ウ") a = Replace(a, "エ", "エ") a = Replace(a, "オ", "オ") a = Replace(a, "カ", "カ") a = Replace(a, "キ", "キ") a = Replace(a, "ク", "ク") a = Replace(a, "ケ", "ケ") a = Replace(a, "コ", "コ") a = Replace(a, "サ", "サ") a = Replace(a, "シ", "シ") a = Replace(a, "ス", "ス") a = Replace(a, "セ", "セ") a = Replace(a, "ソ", "ソ") a = Replace(a, "タ", "タ") a = Replace(a, "チ", "チ") a = Replace(a, "ツ", "ツ") a = Replace(a, "テ", "テ") a = Replace(a, "ト", "ト") a = Replace(a, "ナ", "ナ") a = Replace(a, "ニ", "ニ") a = Replace(a, "ヌ", "ヌ") a = Replace(a, "ネ", "ネ") a = Replace(a, "ノ", "ノ") a = Replace(a, "ハ", "ハ") a = Replace(a, "ヒ", "ヒ") a = Replace(a, "フ", "フ") a = Replace(a, "ヘ", "ヘ") a = Replace(a, "ホ", "ホ") a = Replace(a, "マ", "マ") a = Replace(a, "ミ", "ミ") a = Replace(a, "ム", "ム") a = Replace(a, "メ", "メ") a = Replace(a, "モ", "モ") a = Replace(a, "ヤ", "ヤ") a = Replace(a, "ユ", "ユ") a = Replace(a, "ヨ", "ヨ") a = Replace(a, "ラ", "ラ") a = Replace(a, "リ", "リ") a = Replace(a, "ル", "ル") a = Replace(a, "レ", "レ") a = Replace(a, "ロ", "ロ") a = Replace(a, "ワ", "ワ") a = Replace(a, "ン", "ン") End Sub プログラムは、見て分かるように、極めて鈍くさいものですが、確実に変換してくれます。 さて「正規表現」ですが、極めて奥の深いもので、テキストエディタなどで使える場合があります。 例えば、「A-Z」の次の文字が「0~9」の場合を検索したい、とすると、「[A-Z][0-9]」となります。 上記の場合、文字列のどこに存在しても検索されます(「a;dkjaS6aldkaj」の「S6」)。 「先頭の」とか、「後ろから」とか、「[0-9]を含まない」とか、任意の1文字とか、スペースとか、何文字繰り返してもいい(例えば、スペースが1文字とは限らないような場合)、とか、いろいろな組み合わせがあり、詳しい解説書になると、数百ページに及ぶ本も出ているぐらい、奥深いもので、私も普段は、「外字の検索」(外字の範囲を上記のように指定して検索)ぐらいしか使いこなせていません。 しかし、これが理解できると、先ほどのプログラムなども、極端に簡単になるはずですが、理解できるまではあきらめて、上記のように、コツコツと、プログラムを組んで、対処しています。

xrkxhzfrzn
質問者

お礼

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

関連するQ&A

  • vba カタカナのみ全角にするには?

    ひらがな・英字・数字・記号が組み合わさったランダムな文字を カタカナのみ全角にしたいです。 Sub test() Dim moji As String moji = "あああ123AAAアアア<>()" MsgBox StrConv(moji, vbWide) End Sub これだと全て全角になってしまいます。 moji に格納される文字列は規則はなくランダムです。 この状態でカタカナのみ全角にする方法はありますか?

  • カタカナのみを半角から全角に変換したいのですが

    VBAについて教えてください。 文字をHPにアップできるように、カタカナのみを半角から全角に変換したいのですが 何か良い方法はありますか? 文字は英字・ひらがな・カタカナ・漢字がランダムに入っています。 例えば Sub test() Dim a As String a = "aaaアアア<>BBB" End Sub の状態で。「アアア」のみを全角にするにはどうすればいいでしょうか? アルファベットは半角のままにしたいです。

  • 半角カタカナのみ全角にするには

    http://bekkoame.okwave.jp/qa8426331.html を参考にvbaコードを作っています。 "あああイイイ"(「イイイ」のみ半角カタカナ) を "あああイイイ" にしたいのですが、 Sub Macro01() Dim str置換前 As String '置換前の文字列 Dim str置換後 As String '置換後の文字列 Dim i As Integer str置換前 = "あああイイイ" str置換後 = str置換前 For i = 31850 To 31936 str置換後 = Replace(str置換後, StrConv(Chr(-i), vbNarrow), Chr(-i)) Next i MsgBox str置換前 MsgBox str置換後 End Sub を実行すると、 「あああ」が全角カタカナになり、「アアアイイイ」になってしまいます。 For i = 31850 To 31936 の部分に原因があるのかな、とは思いますが、 For i = 31850 To 31936の意味がよくわからないままコピペで使ってしまいました。 多分文字コードの数値だと思うのですが、どう変更すれば、ひらがなは除外されますか? よろしくお願いします。

  • エクセルvba カタカナは全角、それ以外は半角に

    セルにはカタカナ、数字、漢字、文字がすべて混在しています。 カタカナは全角に、カタカナ以外(数字や記号)は半角に統一しようかと思っています。 一度すべてを半角にし、カタカナだけ全角に戻そうかと考えました。 Sub test() Dim e As Range Dim f As Integer Dim rData As Variant, ansData As Variant Range("A1:A10").Select For Each e In Selection ansData = "" For f = 1 To Len(e.Value) rData = StrConv(e.Value, vbNarrow) If Mid(rData, f, 1) Like "[ア-ン]" Then ansData = ansData & StrConv(Mid(rData, f, 1), vbWide) Else ansData = ansData & Mid(rData, f, 1) End If Next f e.Value = ansData Next e End Sub しかしこれでは、 「ッ」「ァ」など小さい文字や、「ー(長音)」が半角から全角に戻りません。 また、「ズ」など濁音が「ス゛」と2文字になってしまいます。 これらの正しく変換されないものをすべて列挙し、Replaceなどを使って修正するしかないのでしょうか? 実は最初に、すべてを「全角→半角」にするようマクロ作成したのですが、半角にする文字をReplaceですべて列挙しるのは大変だと思い、「半角→全角」にしたらうまくいくかと思ったのですが、それでもうまくいきませんでした・・・ よろしくお願いします。

  • 【1】と【2】のvbaは同じ意味ですか?

    【1】 Option Explicit Sub test1() Call test2("aaa") End Sub Sub test2(MyStr As String) MsgBox MyStr End Sub 【2】 Option Explicit Dim MyStr As String Sub test1() MyStr = "aaa" Call test2 End Sub Sub test2() MsgBox MyStr End Sub 結果は同じですが、中身が違います。 今後コードを作っていく上で どちらの方式の方が良いのでしょうか?

  • vbaで配列に値を格納する場合

    vbaで配列に値を格納する場合 変数の宣言はどちらを使った方が良いのでしょうか? Sub Sample1() Dim i As Long Dim myStr As String Dim tmp() As String myStr = "a,i,u,e,o" tmp = Split(myStr, ",") End Sub か Sub Sample1() Dim i As Long Dim myStr As String Dim tmp As Variant myStr = "a,i,u,e,o" tmp = Split(myStr, ",") End Sub でも問題なく動くのですが、 Variant型での宣言はあまりしない方が良いですか? あと Dim tmp() As String ならエラーにならないのですが Dim tmp As String だとエラーになってしまう理由がよくわからないので教えて頂けますか?

  • IFステートメントで半角でも全角でもtrueとさせ

    IFステートメントで半角でも全角でもtrueとさせるには? Sub test1() Dim str As String str = "ABC"’←全角のA If str Like "*A*" Then ’←半角のA MsgBox "Aがあります" End If End Sub これで、半角Aもメッセージを表示させたいのですが、 マッチバイトみたいなのってありますか?

  • 変数の中身がアルファベットだけなのか取得するには

    変数がアルファベットだけか取得するには? Sub test() Dim mystr As String mystr = "abc" If ??? Then MsgBox "アルファベットだけです" End If End Sub のように、変数の中身がアルファベットだけなのか取得するにはどうすればいいでしょうか? ひらがな、カタカナ、漢字、記号を含んでいるかどうかを評価したいです。

  • VBA 変数にアスタリスクが含んでるかどうか

    変数にアスタリスクが含んでるかどうかをIFステートメントで取得するには? Sub test() Dim mystr As String mystr = "*/" If mystr Like "*" Then MsgBox "mystrはアスタリスクを含んでます。" End If End Sub このようなことをしたい場合、 mystr = "*/" でも mystr = "/" でも、結局は*が、どの文字でも含まれると認識してしまいます。 変数にアスタリスクが含まれてるかどうかを判定する方法を教えてください。

  • 半角カタカナがVBAだと全角カタカナになる

    フォームを作って「フォーム1」にしてその上に「テキスト1」を置きました。(どちらも半角です) Private Sub Form_Open(Cancel As Integer) Form_フォーム1.テキスト1.Value = "a" End Sub にすると自動でフォームがフォームのように全角になります。 なのでこの状態でフォームを開こうとすると、 Form_フォーム1の部分でコンパイルエラーになります。 (変数が定義されてません) Private Sub Form_Open(Cancel As Integer) Me.テキスト1.Value = "a" End Sub にするとうまく行きました。 でもテキスト1は、半角のままです。 フォームだけが全角になってしまいます。これは何と言う現象でしょうか? なるべくオブジェクト名には半角を使わない方がいいのですか? ・・・と今質問分を書いて見直したら、gooでも半角を全角に自動修正するんですね。

専門家に質問してみよう