• ベストアンサー

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

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

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.5

 回答No.4です。  先程挙げたVBAマクロの中に、(試行錯誤を行っていた時に付けたまま、削除し忘れていた)必要のない部分が残っておりました。  削除し忘れていた部分は、必要が無いというだけで、残したままでも動作上は特に問題は無いと思いますが、一応、不要部分を削除したものも挙げておきます。 Sub Macro01() Dim a As String '置換前の文字列 Dim b As String '置換後の文字列 Dim i As Integer a = "aaaアアア<>BBB" b = a For i = 31850 To 31936 b = Replace(b, StrConv(Chr(-i), vbNarrow), Chr(-i)) Next i End Sub Sub Macro02() Dim i As Integer For i = 31850 To 31936 Selection.Replace What:=StrConv(Chr(-i), vbNarrow), Replacement:=Chr(-i) Next i End Sub

cjpjuleoqrh
質問者

お礼

ありがとうございます。

その他の回答 (5)

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.6

Mougに正規表現を使うコードがありました。 <参考> 正規表現を利用して半角カナを全角に変換する(RegExpオブジェクト) http://www.moug.net/tech/exvba/0140015.html

cjpjuleoqrh
質問者

お礼

ありがとうございます。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 文字列型変数aに入っている文字列の中のカタカナのみを半角から全角に変換して、変数bに格納するのでしたら次の様なVBAマクロになります。 Sub Macro01() Dim a As String '置換前の文字列 Dim b As String '置換後の文字列 Dim i As Integer a = "aaaアアア<>BBB" b = a For i = 31850 To 31936 b = Replace(b, StrConv(Chr(-i), vbNarrow), Chr(-i), 1, -1, vbTextCompare) Next i End Sub  又、選択したセル範囲内のセルに入力されている文字列の中のカタカナのみを半角から全角に変換するのでしたら次の様なVBAマクロになります。 Sub Macro02() Dim i As Integer For i = 31850 To 31936 Selection.Replace What:=StrConv(Chr(-i), vbNarrow), Replacement:=Chr(-i), MatchByte:=True Next i End Sub

cjpjuleoqrh
質問者

お礼

ありがとうございます。

  • m3_maki
  • ベストアンサー率64% (296/460)
回答No.3

半角カタカナだけ全角に変換 http://hanatyan.sakura.ne.jp/vbhlp/HanToZen.htm 上記の 「ゆう(U)さんから投稿」 が美しいですね。

cjpjuleoqrh
質問者

お礼

ありがとうございます。

回答No.2

半角 カタカナ の濁点「゛」・半濁点「゜」は、全角カタカナでは、直前の文字と一体に(1 文字に)なっています。 そのため下のコードでは、(1)一旦 StrConv 関数で全ての半角の文字を全角にし、(2)アルファベット、「<」、「>」などの半角だった文字のうちカタカナ以外のものを Replace により半角に戻すよう置換する、という手順で処理してみます。文字列中の各文字がアルファベットか否かは、Asc によりその文字コードに基づいて判定し、Chr で文字に戻すというふうにしています。 具体的な文字コードがいくつなのか知りたい場合は、上の Asc とか、Excel のワークシート関数 CODE などで調べてください。あるいはインターネットで検索してください。 Sub test()   Dim v1 As Variant, v2 As Variant, a As String, i As Long   v1 = Array("<", "=", ">", "(", ")", "+", "-", "*", "/", "^", ",", ":")   v2 = Array("<", "=", ">", "(", ")", "+", "-", "*", "/", "^", ",", ":")   If UBound(v1) <> UBound(v2) Then     MsgBox ("置換前後の文字の種類数が揃っていないので、マクロを終了します。")     Exit Sub   End If   a = "aaaアアア<>BBB"   a = StrConv(a, vbWide)   For i = 0 To UBound(v1)     a = Replace(a, v1(i), v2(i))   Next i   For i = Asc("A") To Asc("Z")     a = Replace(a, Chr$(i), Chr$(i + Asc("A") - Asc("A")))   Next i   For i = Asc("a") To Asc("z")     a = Replace(a, Chr$(i), Chr$(i + Asc("a") - Asc("a")))   Next i   Debug.Print a End Sub

cjpjuleoqrh
質問者

お礼

ありがとうございます。

  • ninoue
  • ベストアンサー率52% (1288/2437)
回答No.1

マニュアルで順次選択変換するのでしたら、次で出来ます。 a = "aaaアアア<>BBB" アアアの先頭にマウスを持ってきて、左マウスボタンを押しながら半角部分の最後まで進めてアアアが全部選択された状態にします。 次に右マウスボタンをクリックすると、ハンカクに変換、全角カタカナに変換 等のメニューが表示されるので、 全角カタカナに変換 を選択します。 上記は秀丸での例です。(IME入力機能を使用) TeraPadでは同様に操作後、アアアが全部選択された状態で右クリックし、変換(V)にマウスを合わせ、 全角に変換(Z) (半角に変換(H).....)をクリックします。 なおfirefoxやthunderbird等では、入力済み文字列の全角半角の変換は簡単には出来ないようです。 (上記のアアア等は殆どが半角で入力したのですが、確認するの表示窓では全角で表示されています)

cjpjuleoqrh
質問者

お礼

ありがとうございます。

関連するQ&A