Excelマクロ・VBA CSVなどの文字列の分割を行う方法

2020年6月3日

カンマなど特定の文字で区切られている文字列を

セルごとに分割する方法がExcelでは三つあります。

  1. テキストファイルウィザード
  2. 文字列関数
  3. ユーザ定義関数(マクロ・VBA)

それぞれ下記の特徴があります。

方法特徴
テキストファイルウィザード柔軟性が高いが手間も大きい。
定型化されていない業務に適切。
文字列関数一度関数を作れば、その後の手間が小さい。
ただし数式が非常に複雑。
何度も分割を行う場合に適切。
ユーザ定義関数(マクロ・VBA)マクロ・VBAを使う必要があるが
手間の少なさと数式のシンプルさで
②より優秀

この記事では③のユーザ定義関数(マクロ・VBA)で行う方法を紹介します。

他の方法は関連記事よりリンクする別の記事で紹介します。

サンプルファイル

使用方法

※セキュリティの警告が出る場合は有効化してください。(解除方法↓)

サンプルファイルの中に保存されている

ユーザ定義関数MySplitを利用します。

=MySplit(文字列,区切り文字,取得する要素番号)
引数省略時の値説明
文字列省略不可対象文字列を指定。
区切り文字省略不可,などの区切り文字を指定。||など2文字以上でも可。
取得する要素番号省略不可分割した結果の何番目の結果を返すかを指定
引数の詳細

一つ目の引数にCSVなどの文字列、

二つ目の引数にカンマなどの区切り文字、

三つ目の引数に何番目の結果を表示するかを指定します。

(例では2行目にセル指定)

カンマ区切りを分割

||(パイプ)など区切り文字が2文字以上でも構いません。

||(パイプ)区切りを分割

コードサンプル

コードは下記のとおりです。

標準モジュールを追加してペーストすれば

任意のブックで使用可能です。

on Explicit
Function MySplit(文字列 As String, 区切文字 As String, 取得する要素番号 As Integer)
  On Error GoTo catchError 
  MySplit = Split(文字列, 区切文字)(取得する要素番号 - 1) 
  Exit Function
catchError:
    ' 該当する文字列が存在しない場合は空白を結果とする
    MySplit = ""
End Function

関連記事

マクロ・VBAの学習・活用方法の記事一覧

他の方法で区切り文字列の分割を行う

テキストファイルウィザード

文字列関数

活用例

姓と名(苗字と名前)を結合・分割する方法