Excel VBA 入力されたデータの表記を統一する

スポンサーリンク

セルに入力されたデータの表記を統一する方法

数値やアルファベット、カタカナのデータを入力するときに注意したいのが、全角・半角の入力形式の違いです。いずれも、一つのデータ内では、入力形式が統一されていないと、データの抽出や集計がうまくいかないことがあります。例えば、複数の人が入力したデータで入力形式が統一できていないデータがあった場合に、データの表記を統一するには文字列の種類を変換するStrConv【ストリングコンバーション】関数を使用します。

StrConv【ストリングコンバーション】関数

StrConv【ストリングコンバーション】関数の書式と引数の説明

[]内は省略可能です。
StrCov(String,Conversion[,LocaleID])

  • String【ストリング】(必須)
    種類を変換したい文字列を指定します。
  • Conversion【コンバーション】(必須)
    変換する種類をVbStrConv列挙型の定数または値で指定します。

    VbStrConv列挙型
    定数内容
    vbUpperCase1文字列を大文字に変換
    vbLowerCase2文字列を小文字に変換
    vbProperCase3文字列の各単語の先頭の文字を大文字に変換
    vbWide4文字列内の半角文字を全角文字に変換
    vbNarrow8文字列内の全角文字を半角文字に変換
    vbKatakana16文字列内のひらがなをカタカナに変換
    vbHiragana32文字列内のカタカナをひらがなに変換
    vbUnicode64システムの既定のコードページを使って文字列をUnicodeに変換
    vbFromUnicode128文字列をUnicodeからシステムの既定のコードページに変換
  • LocaleID【ローカルアイディ】(省略可)
    「国別情報識別子」を指定します。システムとは異なる「国別情報識別子」を指定できます。
    省略した場合は、システムで使用している「国別情報識別子」が指定されます。

データを半角英数でひらがなを半角カタカナに変換するコードと解説

Sub 変換()
Dim 最終行 As Long
Dim 最終列 As Long
Dim 行 As Long
Dim 列 As Long
 最終行 = Cells(Rows.Count, 1).End(xlUp).Row
 最終列 = Cells(1, Columns.Count).End(xlToLeft).Column
Application.ScreenUpdating = False
 For 行 = 1 To 最終行
  For 列 = 1 To 最終列
   Cells(行, 列).Value = StrConv(Cells(行, 列).Value, vbNarrow + vbKatakana)
  Next 列
 Next 行
Application.ScreenUpdating = True
End Sub
2行目【Dim 最終行 As Long】
データが入力されている最終行番号を格納する変数「最終行」を長整数型(Long)で宣言します。


3行目【Dim 最終列 As Long】
データが入力されている最終列番号を格納する変数「最終列」を長整数型(Long)で宣言します。


4行目【Dim 行 As Long】
繰り返し処理の中で行番号を表す1~最終行番号が代入されるカウンター変数「行」を長整数型(Long)で宣言します。


5行目【Dim 列 As Long】
繰り返し処理の中で列番号を表す1~最終列番号が代入されるカウンター変数「列」を長整数型(Long)で宣言します。


6行目【最終行 = Cells(Rows.Count, 1).End(xlUp).Row】
Rows.Countプロパティで取得したセルの最終行からRange【レンジ】オブジェクトのEnd【エンド】プロパティを使用してデータが入力されている行を参照してRow【ロウ】プロパティでその行番号を取得して変数「最終行」に代入します。


7行目【最終列 = Cells(1, Columns.Count).End(xlToLeft).Column】
Columns.Countプロパティで取得したセルの最終列からRange【レンジ】オブジェクトのEnd【エンド】プロパティを使用してデータが入力されている列を参照してColumn【カラム】プロパティでその列番号を取得して変数「最終列」に代入します。


8行目【Application.ScreenUpdating = False】
Application【アプリケーション】オブジェクトのScreenUpdating【スクリーンアップディーティング】プロパティにFalseを設定して、画面の更新を抑止してメモリの使用抑止と処理の高速化を図ります。


9行目【For 行 = 1 To 最終行】
For Next【フォーネクスト】ステートメントを使用して繰り返し処理を実行します。行番号を表すカウンター変数「行」に1~データの最終行番号の値が順次代入されます。


10行目【For 列 = 1 To 最終列】
ネスト(入れ子)のFor Next【フォーネクスト】ステートメントを使用して繰り返し処理を実行します。列番号を表すカウンター変数「列」に1~データの最終列番号の値が順次代入されます。


11行目【Cells(行, 列).Value = StrConv(Cells(行, 列).Value, vbNarrow + vbKatakana)】
繰り返し処理の中でStrConv【ストリングコンバーション】関数で変換したセルの値をそのセルに代入します。

ネストされたForステートメントの実行イメージ

このケースでは、下図のようにネストされた列方向が先に処理されます。

実行結果

以上で、入力されたデータの表記を統一する方法についての解説を終了します。ありがとうございました。

スポンサーリンク

関連記事・広告