アンケート結果や入力データを集計しようとすると、全角・半角のバラつき、改行コードの混入、「なし」「該当なし」「-」などの表記ゆれが邪魔をすることがよくあります。これを目視で修正するのは時間がかかり、見落としも発生します。
この記事では、バラバラな入力データをVBAで一括整形する方法を、Replace・StrConv・Chr を使ったコード例で解説します。
アンケートデータのバラつきを一括整形するには?
次のような変換をマクロで自動化します。
- 氏名の全角スペース除去・半角→全角統一
- 回答の改行コード除去
- 「該当なし」「なし」「特になし」「-」を「無し」に統一
Sub survey_clean()
Dim i As Long
Dim ls_rw As Long
Dim res As String
' C列の最終行を取得
ls_rw = Cells(Rows.Count, 3).End(xlUp).Row
For i = 2 To ls_rw
' 氏名列(A列):全角スペース削除 → 半角を全角に統一
Cells(i, 1).Value = Replace(Cells(i, 1).Value, " ", "")
Cells(i, 1).Value = StrConv(Cells(i, 1).Value, vbWide)
' 回答列(C列):変数に取り出して処理
res = Cells(i, 3).Value
res = Replace(res, Chr(10), "") ' 改行コード(LF)削除
res = Replace(res, Chr(13), "") ' 改行コード(CR)削除
' 表記ゆれを「無し」に統一
res = Replace(res, "該当なし", "無し")
res = Replace(res, "なし", "無し")
res = Replace(res, "特になし", "無し")
res = Replace(res, "-", "無し")
Cells(i, 3).Value = res
Next i
MsgBox "完了しました"
End Sub
コードのポイントを理解するには?
Replace(文字列, 検索文字, 置換文字)
文字列の中の特定の文字を別の文字に置き換えます。複数回連続して使うことで、複数パターンの表記ゆれをまとめて処理できます。
StrConv(文字列, vbWide)
半角文字を全角文字に変換します。逆に全角→半角にしたい場合は vbNarrow を使います。
Chr(10) と Chr(13)
それぞれ改行コードの LF(ラインフィード)と CR(キャリッジリターン)です。セル内改行が混入している場合、この2つを削除することできれいな1行データになります。
変数 res を使う理由
複数の Replace を直接セルに書くとコードが長くなります。一度変数に取り出して加工し、最後にセルに書き戻す方がすっきりします。
他の列や条件に応用するには?
整形対象の列を増やす場合は、列番号を変えるだけで同じ処理を追加できます。
' B列(性別)を半角→全角に統一する例
Cells(i, 2).Value = StrConv(Cells(i, 2).Value, vbWide)
「未回答」を空欄にしたい場合は Replace の置換文字を空文字 "" にします。
res = Replace(res, "未回答", "")
まとめ
Replace()で表記ゆれや不要な文字を一括置換できるStrConv(文字列, vbWide)で半角→全角に統一できるChr(10)・Chr(13)でセル内改行コードを削除できる- 変数に取り出して加工してからセルに書き戻すとコードがすっきりする
- 定期的なデータ整形作業ほどマクロ化の効果が大きい
よくある質問
StrConvで半角カナを全角に変換できますか?
できます。StrConv(文字列, vbWide) は半角カタカナも全角カタカナに変換します。半角英数も全角になるため、英数字はそのままにしたい場合は別途処理を分けることを検討してください。
Replaceは大文字・小文字を区別しますか?
デフォルトでは区別します。区別しない場合は Replace(文字列, 検索, 置換, , , vbTextCompare) のように比較モードを指定します。
想定外の表記が出てきた場合はどうすればいいですか?
新しい表記パターンが見つかったら、Replace の行を追加するだけで対応できます。パターンが増えてきた場合は配列や Select Case でまとめて管理する方法も有効です。
整形前のデータを残しておくことはできますか?
できます。整形前に別シートやE列以降にデータをコピーしてからマクロを実行すると、元データを保持したまま作業できます。
複数のシートにまたがるデータを一括整形できますか?
できます。For Each ws In ThisWorkbook.Worksheets でシートをループさせ、各シートに対して同じ整形処理を実行する構成にすれば対応できます。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



