Excel。VBA。セル内のカタカナだけを全角にしたいけど、どうしたらいいの?
<Excel VBA>
Excelにはデータベース機能がありますが、並び替えや集計をするには、そのデータが綺麗である必要があります。
綺麗になっていない一例として、次のようなデータ。
A列の氏名をみてみると、大文字小文字、全角半角、カタカナひらがなが混在しています。
これをB列の調整のように、アルファベットは、半角大文字。
「カタカナ」は全角にしたい。
「ひらがな」は、そのままとするには、どうしたらいいのでしょうか?
自力で修正するとしたら、大変です。
というか、やりたくない作業ですが、現場ではこのような修正が結構あるんですよね。
なので、ここは、Excel VBAでマクロをつくったほうがよさそうです。
プログラム文はこんな感じです。
Sub セル内カタカナ()
Dim i As Long
Dim j As Long
Dim zenkaku As String
Dim moji As String
Dim c_moji As String
Dim lastrow As Long
lastrow = Cells(Rows.Count, "a").End(xlUp).Row
For i = 2 To lastrow
zenkaku = StrConv(Range("a" & i).Value, vbWide + vbUpperCase)
c_moji = ""
For j = 1 To Len(zenkaku)
moji = Mid(zenkaku, j, 1)
If moji Like "[ァ-ー]" Then
c_moji = c_moji & moji
Else
c_moji = c_moji & StrConv(moji, vbNarrow)
End If
Next j
Range("b" & i).Value = c_moji
Next i
End Sub
ちょっと長いプログラム文に見えますが、やっていることは単純です。
最初は変数宣言ですね。
Dim i As Long
Dim j As Long
Dim zenkaku As String
Dim moji As String
Dim c_moji As String
Dim lastrow As Long
lastrow = Cells(Rows.Count, "a").End(xlUp).Row
lastrowには、データの最終行の行番号を代入します。
For i = 2 To lastrow ~ Next i は、データの件数分を繰り返すためのFor To Nextです。
zenkaku = StrConv(Range("a" & i).Value, vbWide + vbUpperCase)
iが1の時で説明しましょう。
A1のセルの値を、vbWide(半角を全角に変更) さらに、 vbUpperCase(アルファベットを大文字に変更))した値を、zenkakuに代入します。
c_moji = "" は、c_mojiに空の文字列を代入しておきます。
For j = 1 To Len(zenkaku)~Next j は、セル内の文字数分繰り返しを行います。
Len関数はセル内の文字数を算出してくれます。
moji = Mid(zenkaku, j, 1)
セル内の1文字ずつをmojiに代入します。
この代入したmojiをつぎのIf文で該当した場合は文字種を変更させていきます。
If moji Like "[ァ-ー]" Then
c_moji = c_moji & moji
Else
c_moji = c_moji & StrConv(moji, vbNarrow)
End If
If文の条件がわかりにくいですね。
文字が、Like "[ァ-ー]"。
「ァ」から「ー」の間だったら、変更の必要がないので、空文字に追加していきます。
なぜか、「ア」からはじまらないで、「ァ」から始まっているんですね。
外国名の人もいた場合、「・」をつかっていることも想定されるので、「ー」までを範囲にしています。
それ以外ならば、StrConv(moji, vbNarrow)で、全角を半角に変更します。
最後に、b列に変更した値を代入して完了ですね。
Range("b" & i).Value = c_moji
ポイントは、セル内の文字、一文字ずつ確認して変更している点ですね。
このようなプログラム文をつくることで、セル内の文字種を統一することができます。
ひらがなも、カタカナにすべて変わってOKならば、次のプログラム文でも同じ処理をすることができます。
Sub セル内カタカナ()
Dim i As Long
Dim lastrow As Long
lastrow = Cells(Rows.Count, "a").End(xlUp).Row
For i = 2 To lastrow
Cells(i, "b").Value = StrConv(Cells(i, "a"), vbWide) '全角にする
Cells(i, "b").Value = StrConv(Cells(i, "b"), vbUpperCase) '大文字にする
Cells(i, "b").Value = StrConv(Cells(i, "b"), vbHiragana) 'ひらがな
Cells(i, "b").Value = StrConv(Cells(i, "b"), vbNarrow) '半角にする
Cells(i, "b").Value = StrConv(Cells(i, "b"), vbKatakana) 'カタカナにする
Cells(i, "b").Value = Replace(Cells(i, "b"), "ー", "ー")
Cells(i, "b").Value = Replace(Cells(i, "b"), "ヴ", "ヴ")
Next
End Sub
「全角」にして「大文字」にして、いったん「カタカナ」を「ひらがな」にして、カタカナ以外を「半角」にもどしてから、ひらがなを「カタカナ」に変換します。
最後に、Replaceを使って、「ー」や「ヴ」に置換する
また、処理時間はちょっとかかるかもしれませんが、こんな方法もあります。
ちょっと、邪道な方法かもしれませんね。