VBAで半角・全角を統一するには、StrConv関数を使います。全角に統一するなら vbWide、半角に統一するなら vbNarrow を指定するだけです。選択範囲のセルをループして一括変換すれば、複数人が入力した表のバラつきをまとめて解消できます。
この記事では、次の内容を順番に解説します。
- StrConv関数の引数と動作の一覧
- 選択範囲を全角に統一する基本コード
- 半角統一・ひらがな/カタカナ変換のパターン
- Trim・UCase/LCaseと組み合わせた総合クリーニングコード
- よくある質問(数値セルへの影響・ひらがなが残るケース等)
StrConv関数の引数と動作を理解するには?
StrConv(文字列, 変換の種類) という書き方で使います。よく使う引数は次の通りです。
| 引数 | 変換内容 | 例 |
|---|---|---|
vbWide | 半角 → 全角 | abc123アイウ → abc123アイウ |
vbNarrow | 全角 → 半角 | abc123アイウ → abc123アイウ |
vbKatakana | ひらがな → カタカナ | あいう → アイウ |
vbHiragana | カタカナ → ひらがな | アイウ → あいう |
vbUpperCase | 小文字 → 大文字 | abc → ABC |
vbLowerCase | 大文字 → 小文字 | ABC → abc |
引数は + で組み合わせることもできます。たとえば vbWide + vbKatakana にすると「半角カタカナを全角カタカナに変換しつつ、ひらがなはそのまま」という挙動になります。
選択範囲を全角に統一する基本コードを理解するには?
次のコードは、選択した範囲の文字列セルをすべて全角に統一します。
Sub CleanFullWidth()
Dim c As Range
For Each c In Selection
' 文字列のセルのみ変換(数値・日付は除外)
If VarType(c.Value) = vbString Then
c.Value = StrConv(c.Value, vbWide)
End If
Next c
MsgBox "全角に統一しました。"
End Sub
このコードのポイントは次の通りです。
VarType(c.Value) = vbStringで文字列セルだけを対象にし、数値・日付セルには触れないSelectionを使うことで、実行前に変換したい範囲を選んでから使える汎用マクロになっている- 全角に統一することで、フィルターや検索での不一致トラブルを防げる
半角統一・ひらがな/カタカナ変換のパターンを使い分けるには?
業務によって必要な変換は異なります。引数を変えるだけで対応できます。
半角に統一する場合
c.Value = StrConv(c.Value, vbNarrow)
カタカナだけ全角にして数字・アルファベットは半角のまま残す場合
' ひらがな→カタカナ変換+半角カタカナ→全角カタカナ
c.Value = StrConv(c.Value, vbKatakana + vbWide)
このように組み合わせることで「カタカナは全角、英数字は半角」という一般的な表記ルールに合わせることができます。
カタカナをひらがなに変換する場合
c.Value = StrConv(c.Value, vbHiragana)
Trim・大文字小文字統一と組み合わせた総合クリーニングコードを作るには?
現場でよく必要になる「前後のスペース削除」「全角統一」「アルファベット大文字統一」をまとめて行う総合版コードです。
Sub CleanAll()
Dim c As Range
For Each c In Selection
If VarType(c.Value) = vbString Then
Dim v As String
v = c.Value
' ① 前後のスペースを削除
v = Trim(v)
' ② 全角に統一
v = StrConv(v, vbWide)
' ③ アルファベットを大文字に統一
v = StrConv(v, vbUpperCase)
c.Value = v
End If
Next c
MsgBox "クリーニングが完了しました。"
End Sub
3つの処理を順番に重ねているため、「余分なスペースがある」「半角全角が混在している」「大文字小文字がバラバラ」という問題をまとめて解消できます。必要な処理だけを残してカスタマイズしてください。
まとめ
- 半角→全角は
StrConv(値, vbWide)、全角→半角はvbNarrow - 引数は
+で組み合わせ可能(例:vbKatakana + vbWide) VarType(c.Value) = vbStringで数値・日付セルへの誤変換を防ぐTrimやStrConv(vbUpperCase)と組み合わせると総合クリーニングになる- 外部データ取り込みや複数人入力の表に使うと特に効果が大きい
よくある質問
数値が入っているセルに実行しても大丈夫?
コード内で VarType(c.Value) = vbString の条件をつけているため、数値セルはスキップされます。ただし、数値が「文字列として入力」されているセル(左揃えになっているセルなど)は変換対象になります。変換後に数値として計算に使う場合は、書式の確認が必要です。
vbWideを使ってもひらがなが変わらないのはなぜ?
vbWide は「半角文字を全角に変換」する引数です。もともとひらがなはすでに全角文字なので、vbWide をかけても変化しません。カタカナ⇔ひらがなの変換は vbKatakana または vbHiragana を使います。
変換前の値に戻せる?
マクロ実行後は元の値に自動では戻せません。大切なデータを対象にする場合は、実行前にファイルをバックアップするか、別列に =A2 のような参照を残してから実行することをおすすめします。
特定の列だけを対象にしたい場合は?
Selection の代わりに列範囲を直接指定します。
' A列の2行目から最終行まで対象にする
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
Dim c As Range
For Each c In Range("A2:A" & lastRow)
If VarType(c.Value) = vbString Then
c.Value = StrConv(c.Value, vbWide)
End If
Next c
スペースも全角・半角で統一したい場合は?
StrConv はスペースも変換対象に含まれます。vbWide を適用すると半角スペースが全角スペースに、vbNarrow では全角スペースが半角スペースになります。スペースの種類を問わずすべて削除したい場合は、Replace(v, " ", "")(半角)と Replace(v, " ", "")(全角)を組み合わせて使ってください。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



