文字列操作の基本(Left・Mid・InStr・Replace・Split・StrConv で取引先名やコードを整える)

公開日:2026年10月7日 執筆:Takuya カテゴリ:基本・高速化

取引先名の表記ゆれや、コードに混じった全角文字・空白を、Left・Mid・Right・InStr・Replace・Split・Trim・StrConv で整える方法です。Trim で全角スペースが消えない点などの落とし穴も解説します。

どんな場面で使うか

複数の部署やシステムから集めたデータでは、同じ取引先が「株式会社山田商事」「(株)山田商事」「山田商事 」のように別々の書き方で入っていることがよくあります。商品コードも「ab-001」「AB-001」のように全角と半角が混在し、そのままでは集計や突合で別物として扱われてしまいます。

集計や照合の前に文字列の表記をそろえておくと、Dictionary や VLOOKUP での一致漏れを大きく減らせます。この記事では、表記をそろえるときによく使う関数と、その組み合わせ方を紹介します。

よく使う文字列関数

VBA の文字列関数は、ワークシート関数と名前が似ているものが多く、覚えやすいのが特徴です。主なものは次のとおりです。InStr は見つからないときに 0 を返すため、「含まれているか」の判定にも使えます。

  • Left(文字列, n)/Right(文字列, n):先頭・末尾から n 文字を取り出す
  • Mid(文字列, 開始, n):途中から n 文字を取り出す(開始位置は 1 から)
  • InStr(文字列, 探す文字):最初に見つかった位置を返す。見つからなければ 0
  • Replace(文字列, 前, 後):文字を置き換える。後に空文字を指定すると削除になる
  • Split(文字列, 区切り):区切り文字で分割して配列にする(0 始まり)
  • Trim:前後の半角スペースを取り除く
  • StrConv(文字列, vbNarrow/vbWide/vbUpperCase):半角・全角・大文字に変換する

取引先名とコードを整える関数

次の2つの関数は、取引先名とコードをそれぞれのルールでそろえます。取引先名は会社の種類の表記を取り除いて比較用の名前にし、コードは英数字を半角の大文字にそろえます。ワークシートからも =NormalizeCode(A2) のように呼び出せます。

' 取引先名を比較用にそろえる(例:「(株)山田商事 」→「山田商事」)
Function NormalizeCompany(ByVal src As String) As String
    Dim s As String, i As Long
    Dim marks As Variant

    s = StrConv(src, vbWide)                 ' 社名はいったん全角にそろえる(半角カナも全角になる)
    marks = Array("株式会社", "有限会社", "合同会社", "(株)", "(有)", "㈱", "㈲")
    For i = LBound(marks) To UBound(marks)
        s = Replace(s, marks(i), "")
    Next i
    s = Replace(s, ChrW(12288), "")          ' 全角スペース(途中の空白も含む)を取り除く
    NormalizeCompany = Trim(s)
End Function

' コードを半角・大文字にそろえる(例:「ab-001」→「AB-001」)
Function NormalizeCode(ByVal src As String) As String
    Dim s As String
    s = StrConv(src, vbNarrow)               ' 全角英数字・記号を半角に
    s = Replace(s, "ー", "-")                 ' ハイフンのつもりで入力された長音をそろえる
    s = UCase(Trim(s))
    NormalizeCode = s
End Function

Split と InStr で項目を分ける

「営業部/山田太郎」のように1つのセルに複数の情報が入っている場合は、Split で分割できます。区切り文字が入っていない値もあるときは、先に InStr で含まれているかを確認すると、配列の範囲外を参照するエラーを防げます。

Dim parts As Variant, dept As String, staff As String
If InStr(cellText, "/") > 0 Then
    parts = Split(cellText, "/")
    dept = Trim(parts(0))
    staff = Trim(parts(UBound(parts)))
Else
    dept = ""
    staff = Trim(cellText)
End If

つまずきやすい点

VBA の Trim は半角スペースしか取り除きません。全角スペースが混じったデータでは、見た目は同じでも一致しないままになります。上のコードのように、全角スペースは Replace で明示的に取り除くか、半角に置き換えてから Trim します。

StrConv の vbNarrow は、英数字だけでなくカタカナも半角カナに変えてしまいます。社名や氏名に使うと「ヤマダ」のようになるため、カタカナを含む項目には使わず、英数字中心のコードに限定してください。また、ハイフンのつもりで長音記号の「ー」が入力されていると、半角にしたときに「ー」となり、ハイフンと一致しません。どの記号が混じっているかはデータによって違うため、変換後の結果を実データで一度確認することをおすすめします。

表記をそろえた値は、元の列を上書きせず別の列に出力しておくと、変換ルールに誤りがあったときに元に戻せます。

  • Trim は全角スペースを消さない
  • vbNarrow はカタカナも半角にする
  • 整えた値は別の列に出力し、元データを残す

ほかの記事