Excel全角・半角の一括変換ガイド|関数・VBAマクロですぐ統一できる

どうも、くまおやぢです。

「共有ファイルを開いたら、電話番号が全角と半角でバラバラ……」

――共有ファイルあるあるの代表格です。複数人が触るExcelファイルでは、同じ列に「03」と「03」が混在していたり、カタカナが全角と半角でバラバラだったり、気がつくとデータがカオスになっています。

わたしも以前の職場で、住所録の郵便番号に全角と半角が混在していたせいで、SUMIFの条件が一致せず集計が合わないというトラブルに遭遇しました。目視では同じ「1050001」に見えるのに、半角と全角の違いでExcelは別のデータとして扱っていたのです。

手作業で1セルずつ直すのは現実的ではありません。数百行あったら日が暮れます。

この記事では、関数(ASC / JIS)による変換から、VBAマクロでの一括変換複数シート同時変換まで、全角・半角変換のすべてを1記事で網羅します!


この記事でできること

対象者:Excelでデータ整理をする方(関数が使える方~VBAに挑戦したい方)

読み方ガイド

あなたの状態読むべき章
関数で変換したい(VBAは不要)→ 03章だけでOK
VBAで選択範囲を一括変換したい→ 04章へ
複数シートを一気に変換したい→ 05章へ直行
チルダ(~)が半角になって困る→ 06章へ直行

急いでいる人へ|最速の方法

関数で半角にする=ASC(A1) — 全角英数カナを半角に変換
関数で全角にする=JIS(A1) — 半角英数カナを全角に変換
VBAで一括半角変換:セル範囲を選択 → 下記マクロを実行

Sub 半角変換()
    Dim c As Range
    For Each c In Selection
        c.Value = StrConv(c.Value, vbNarrow)
    Next c
End Sub

03. 関数で変換する|ASC関数・JIS関数

VBAを使わずに変換する方法です。少量のデータや、マクロが使えない環境ではこちらが有効です。

ASC関数:全角→半角に変換

=ASC(A1)

全角の英数字・カタカナを半角に変換します。ひらがな・漢字には影響しません。

変換例

変換前(A1)変換後
03−1234−567803-1234-5678
アイウエオアイウエオ
東京都東京都(変化なし)

JIS関数:半角→全角に変換

=JIS(A1)

半角の英数字・カタカナを全角に変換します。ASC関数の逆方向。

関数での変換手順

  1. 空いている列(例:B列)に =ASC(A1) と入力
  2. 下方向にコピーして全行に適用
  3. B列全体を選択 → Ctrl+C(コピー)
  4. A列を選択 → Ctrl+Shift+V →「」で貼り付け
  5. B列(作業列)を削除

関数の限界:列が多くなると、列ごとに作業列を用意する必要があり手間がかかります。大量のデータを一括変換したい場合は、次の章のVBAマクロが圧倒的に効率的です。


04. VBAで一括変換する|基本マクロ(単一シート)

選択したセル範囲を一括で変換するVBAマクロです。セルを選んでマクロを実行するだけで完了します。

動作確認環境:Microsoft 365(Windows)
保存形式:マクロを使うため、.xlsm(マクロ有効ブック)で保存してください。

マクロの登録手順

  1. Alt + F11 でVBE(Visual Basic Editor)を開く
  2. 挿入」→「標準モジュール」をクリック
  3. 以下のコードを貼り付ける
  4. Alt + F11 でExcelに戻る

全角→半角に変換するマクロ

Sub 半角変換()
    Dim c As Range

    If Selection Is Nothing Then
        MsgBox "セルを選択してから実行してください。", vbExclamation
        Exit Sub
    End If

    For Each c In Selection
        If Not IsEmpty(c) Then
            c.Value = StrConv(c.Value, vbNarrow)
        End If
    Next c

    MsgBox "選択範囲を半角に変換しました!", vbInformation
End Sub

半角→全角に変換するマクロ

Sub 全角変換()
    Dim c As Range

    If Selection Is Nothing Then
        MsgBox "セルを選択してから実行してください。", vbExclamation
        Exit Sub
    End If

    For Each c In Selection
        If Not IsEmpty(c) Then
            c.Value = StrConv(c.Value, vbWide)
        End If
    Next c

    MsgBox "選択範囲を全角に変換しました!", vbInformation
End Sub

使い方

  1. 変換したいセル範囲を選択する
  2. Alt + F8 →「半角変換」(または「全角変換」)を選んで「実行

ショートカットキーの割り当て:頻繁に使うなら、マクロにショートカットキーを割り当てると便利です。Alt+F8 →マクロを選択 →「オプション」→ ショートカットキーを設定。

コードのポイント

  • StrConv(文字列, vbNarrow):全角→半角の変換。vbWide にすると逆方向(半角→全角)
  • If Not IsEmpty(c):空白セルを飛ばすことで、不要な処理を避けています
  • 数式が入ったセルに注意:このマクロはセルの値(Value)を書き換えるため、数式が入っているセルに実行すると数式が消えて値だけになります。数式セルを避けて選択してください

05. 複数シートを一括変換する|応用マクロ

「毎月の月別シートがあって、全シートの同じ列を一括で半角に統一したい」――そんな場面で使えるマクロです。

複数シートの指定範囲を一括変換

Sub 選択シートの指定範囲を半角変換()
    Dim ws As Worksheet
    Dim c As Range
    Dim targetRange As Range
    Dim targetAddress As String

    'ユーザーにセル範囲を入力させる
    targetAddress = InputBox( _
        "変換したいセル範囲を指定してください" & vbCrLf & _
        "(例: A2:A100)", _
        "セル範囲の指定")

    If targetAddress = "" Then
        MsgBox "キャンセルされました。", vbInformation
        Exit Sub
    End If

    '選択されたシートのみをループ
    For Each ws In ActiveWindow.SelectedSheets
        On Error Resume Next
        Set targetRange = ws.Range(targetAddress)
        On Error GoTo 0

        If Not targetRange Is Nothing Then
            For Each c In targetRange
                If Not IsEmpty(c) Then
                    c.Value = StrConv(c.Value, vbNarrow)
                End If
            Next c
        End If

        Set targetRange = Nothing
    Next ws

    MsgBox "選択シートの指定範囲で半角変換が完了しました!", vbInformation
End Sub

使い方

  1. 変換したい複数のシートタブをCtrl+クリックで選択する
  2. Alt + F8 →「選択シートの指定範囲を半角変換」を実行
  3. InputBoxが表示されるので、変換したいセル範囲(例:B2:B100)を入力
  4. 選択した全シートの指定範囲が一括で半角に変換される

全角変換にしたい場合:コード内の vbNarrowvbWide に変更するだけでOKです。


06. チルダ(~)問題の対処法

StrConv で半角変換すると、全角チルダ「~」が半角チルダ「~」に変換されてしまいます。住所や電話番号で「~」を使っている場合、意図しない変換が起きることがあります。

チルダを全角に戻すコード

半角変換の直後に Replace でチルダだけ全角に戻します。

Sub 半角変換_チルダは全角に戻す()
    Dim c As Range

    For Each c In Selection
        If Not IsEmpty(c) Then
            c.Value = StrConv(c.Value, vbNarrow)
            c.Value = Replace(c.Value, "~", "~")  'チルダだけ全角に戻す
        End If
    Next c

    MsgBox "半角変換(チルダ保持)が完了しました!", vbInformation
End Sub

他にも注意が必要な文字

文字変換前(全角)変換後(半角)対処
チルダ~Replace で戻す
長音ー(半角カナ)カタカナを半角にしたくない場合は正規表現で制御
中黒・(半角カナ)同上

数字と英字だけ半角にしたい場合StrConv はカタカナも半角にしてしまうため、「数字とアルファベットだけ半角にしたい(カタカナは全角のまま)」という要件には向きません。その場合は、正規表現で対象文字だけ変換するか、「汚れた名簿を一発で整えるExcelデータクレンジング術」のような専用マクロを使ってください。


07. よくあるトラブルと対処法

トラブル①:マクロを実行しても何も変わらない

原因A:セルを選択していない状態で実行した。
対処:変換したいセル範囲を選択してから実行してください。

原因B:セルに数値が入っている(文字列ではない)。
対処:数値は全角・半角の区別がないため、変換の対象外です。表示形式が全角に見えるだけの場合は、セルの書式設定を確認してください。

トラブル②:数式が消えてしまった

原因:マクロがセルの Value を書き換えるため、数式が値に置き換わった。
対処:数式セルを避けて選択するか、変換前にCtrl+Zで元に戻してください。大量のセルを扱う場合は、先にバックアップを取ることを強くおすすめします。

トラブル③:マクロが無効で実行できない

原因:社内ポリシーでマクロが無効化されている。
対処:マクロが使えない環境では、03章の関数(ASC / JIS)で変換してください。


08. まとめ|振り返りチェックリスト+今日の一歩

振り返りチェックリスト

  • [ ] ASC関数(全角→半角)とJIS関数(半角→全角)の使い方を理解した
  • [ ] VBAの StrConv で一括変換するコードを登録した
  • [ ] 複数シートを一括変換するマクロの使い方を把握した
  • [ ] チルダ(~)が半角になる問題と対処法を知った
  • [ ] 数式セルにマクロを実行しないよう注意することを覚えた

今日やるべき最小アクション

共有ファイルの電話番号列や郵便番号列を1つ選び、=ASC(A1) で半角に統一してみてください。

「全角と半角が混在していた列がピシッと揃った瞬間」は、小さいけれど確実な達成感があります。

関連記事

あせらず、くさらず、あきらめず。データの統一は地味な作業ですが、整ったデータは関数もVLOOKUPも正しく動く基盤になります。まずは1列から整えてみてください。

あなたのフィードバックが次の記事のヒントになります。「こんな変換パターンも知りたい」があれば、ぜひコメントで教えてください。

コメント

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