こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

【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

こちらのコードは、「あああ」も全角カタカナになりました。
"のののノノノ"も同様です。

平仮名は平仮名のままにしたいのですが
そのような方法はありますか?

投稿日時 - 2016-11-20 21:23:13

QNo.9258216

暇なときに回答ください

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

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

投稿日時 - 2016-11-21 08:15:15

お礼

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

投稿日時 - 2016-12-01 22:55:40

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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文字とは限らないような場合)、とか、いろいろな組み合わせがあり、詳しい解説書になると、数百ページに及ぶ本も出ているぐらい、奥深いもので、私も普段は、「外字の検索」(外字の範囲を上記のように指定して検索)ぐらいしか使いこなせていません。

しかし、これが理解できると、先ほどのプログラムなども、極端に簡単になるはずですが、理解できるまではあきらめて、上記のように、コツコツと、プログラムを組んで、対処しています。

投稿日時 - 2016-11-20 21:57:29

お礼

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

投稿日時 - 2016-12-01 22:55:42

あなたにオススメの質問