【Excel VBA】全角文字を半角に変換する方法

Excel VBA

Excelでデータを扱っていると、

「全角英数字を半角にしたい」
「全角カタカナを半角カタカナに直したい」
「フォームや名簿のデータをきれいに整えたい」

と感じる場面が多いです。
そこでこの記事では、VBAを使って簡単に全角文字を半角文字に変換する方法を、初心者にもわかりやすく説明します。

Excel VBAで全角を半角に変換する基本方法

まず、結論からお伝えします。
全角から半角への変換は、「StrConv関数」を使えば簡単にできます。

StrConv関数とは?

StrConv(ストリングコンバート)は、文字列を変換するための関数です。
たとえば、

  • 小文字→大文字
  • ひらがな→カタカナ
  • 全角→半角

など、さまざまな変換ができます。

今回使うのはこの中の「vbNarrow」というオプションです。
「vbNarrow」は、文字を半角に変換するための指定になります。

基本の書き方

StrConv(変換したい文字列, vbNarrow)

たったこれだけです。
これを知っておくだけで、全角→半角の変換ができます。

サンプルコード:セルの値を半角に変換するマクロ

では、実際に使えるサンプルコードを紹介します。

例:選択したセルの全角文字を半角に変換する

Sub 全角を半角に変換する()
  Dim cell As Range

  ' 選択している範囲をループ
  For Each cell In Selection
    ' セルが空でなければ処理
    If Not IsEmpty(cell.Value) Then
      ' セルの値を半角に変換
      cell.Value = StrConv(cell.Value, vbNarrow)
    End If
  Next cell

  MsgBox "変換が完了しました!"
End Sub

使い方

1.Excelを開いて、Alt + F11キーでVBAエディタを起動します。

2.「挿入」→「標準モジュール」を選び、上のコードを貼り付けます。

3.Excelに戻り、半角に変換したいセルを選択します。

4.Alt + F8キーで「全角を半角に変換する」を実行します。

これで、選択したセル内の文字列がすべて半角に変わります。

注意点:StrConvでは変換されないものもある

ここで注意が必要です。
StrConvを使っても、すべての全角文字が完全に変換できるわけではありません。

たとえば、

  • 漢字
  • ひらがな

などは、半角にはなりません。
(もともと半角に対応していないためです)

また、全角スペースは半角スペースに変換されないので注意しましょう。
この場合は、置換機能を組み合わせる必要があります。

応用編:全角スペースも半角スペースに変換したい場合

は、全角スペース(” ”)を半角スペース(” “)に変えたい場合はどうするか?これも簡単です。Replace関数を組み合わせるだけです。

スペースも含めた変換マクロ

Sub 全角を半角に変換(スペース対応版)
  Dim cell As Range

  For Each cell In Selection
    If Not IsEmpty(cell.Value) Then
      Dim temp As String
      temp = StrConv(cell.Value, vbNarrow)
      temp = Replace(temp, " ", " ") ' 全角スペースを半角スペースに置換
      cell.Value = temp
    End If
  Next cell

  MsgBox "全角スペースも含めた変換が完了しました!"
End Sub

これで、全角英数字・カタカナだけでなく、全角スペースまで一括で半角に変換できます。

なぜ全角半角の統一が重要なのか?

データ処理の現場では、「全角と半角が混ざっている」と大きな問題になります。
たとえば、

  • 重複チェックが正しくできない
  • ソートや検索でヒットしない
  • データベースに登録できない

など。
見た目が似ていても、コンピューターは「全角A」と「半角A」を別物と認識します。
だから、データをきれいにするためには半角統一がとても大切なんですね。
特に、

  • 名簿管理
  • 顧客データベース
  • 商品リスト

などでは、必ず全角半角の統一を意識しましょう。

シート全体を対象にする場合

For Each cell In ActiveSheet.UsedRange

このように書き換えると、アクティブなシートのすべてのデータが対象になります。

特定の列だけ対象にする場合

例えば、A列だけを対象にしたいなら、こうします。

For Each cell In Range("A:A")

また、範囲を絞るなら、

For Each cell In Range("A2:A100")

とすれば、A2からA100までだけ変換できます。

まとめ

この記事では、「Excel VBAで全角文字を半角に変換する方法」を詳しく説明しました。

  • StrConv(文字列, vbNarrow)で半角変換できる
  • スペースも置換すれば完璧
  • データ統一のために非常に重要
  • セル選択、シート全体、列指定など自由にカスタマイズできる

最初は難しそうに見えても、やってみると意外と簡単です。
一度マクロを作っておけば、今後のデータ処理がとても楽になります。

タイトルとURLをコピーしました