プロが教えるわが家の防犯対策術!

VBAについて教えてください。

文字をHPにアップできるように、カタカナのみを半角から全角に変換したいのですが
何か良い方法はありますか?

文字は英字・ひらがな・カタカナ・漢字がランダムに入っています。

例えば

Sub test()
Dim a As String
a = "aaaアアア<>BBB"


End Sub

の状態で。「アアア」のみを全角にするにはどうすればいいでしょうか?
アルファベットは半角のままにしたいです。

「カタカナのみを半角から全角に変換したいの」の質問画像

A 回答 (6件)

 回答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
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2014/01/24 20:41

Mougに正規表現を使うコードがありました。


<参考>
正規表現を利用して半角カナを全角に変換する(RegExpオブジェクト)
http://www.moug.net/tech/exvba/0140015.html
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2014/01/24 20:41

 文字列型変数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
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2014/01/24 20:41

半角カタカナだけ全角に変換


http://hanatyan.sakura.ne.jp/vbhlp/HanToZen.htm

上記の 「ゆう(U)さんから投稿」 が美しいですね。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2014/01/24 20:41

半角 カタカナ の濁点「゛」・半濁点「゜」は、全角カタカナでは、直前の文字と一体に(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
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2014/01/24 20:42

マニュアルで順次選択変換するのでしたら、次で出来ます。



a = "aaaアアア<>BBB"
アアアの先頭にマウスを持ってきて、左マウスボタンを押しながら半角部分の最後まで進めてアアアが全部選択された状態にします。
次に右マウスボタンをクリックすると、ハンカクに変換、全角カタカナに変換 等のメニューが表示されるので、 全角カタカナに変換 を選択します。

上記は秀丸での例です。(IME入力機能を使用)

TeraPadでは同様に操作後、アアアが全部選択された状態で右クリックし、変換(V)にマウスを合わせ、
全角に変換(Z) (半角に変換(H).....)をクリックします。

なおfirefoxやthunderbird等では、入力済み文字列の全角半角の変換は簡単には出来ないようです。
(上記のアアア等は殆どが半角で入力したのですが、確認するの表示窓では全角で表示されています)
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2014/01/24 20:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!