ExcelでVBAのSplit関数を使用して、特定の文字に従って文字列を分割し、文字列の配列に変換します。
目次
例
ローデータに多くのフィールドが含まれていて、異なるフィールドが斜線で区切られる場合には、データを分割して、個別のセルに配置するにはどうすればよいですか。
解決策
指定した文字で文字列を分割するには、2つの方法があります。1つは、SEARCH、LEFT、RIGHT、MIDなどのExcel関数を組み合わせて特定の位置にサブ文字/文字列を抽出する方法ですが、この方法には制限があり、複雑すぎるデータを処理できません。
もう1つは、VBAのSplit関数を使用して、文字列を特定の文字に従って配列に直接分割する方法です。この方法は、複雑なデータに適しています。データが長い場合でも、処理も非常に簡単です。
Excel関数を使用して文字列を分割する
比較的簡単なデータの場合、さまざまなExcel関数を組み合わせて処理できます。この方法は、Excelの数式しか使えなく、VBAが全然分からない人に適しています。
ローデータから斜線で分割された最初のフィールドを取得する場合、SEARCH関数を使用して最初の斜線の位置を見つけ、LEFT関数を使用してデータの先頭から最初の斜線までのデータを取得できます。
=LEFT(A2, SEARCH("/",A2,1)-1)
2番目のフィールドを取得するには、類似の方法を使用しますが、SEARCHを使用して最初の斜線と2番目の斜線の位置を見つけ、MID関数を使用して2つの斜線の間にあるデータを取得します。
=MID(A2,SEARCH("/",A2,1)+1,SEARCH("/",A2,SEARCH("/",A2,1)+1)-SEARCH("/",A2,1)-1)
MID関数の2番目の引数では、SEARCH関数を使用して最初の斜線の位置を見つけ、この斜線からデータを取得します。 MIDの3番目の引数では、最初に2つのSEARCH関数を使用して2番目の斜線の位置を見つけ(最初の斜線を見つけてから、2番目の斜線を見つけます。)、最初の斜線の位置を減算して、2番目のフィールドにあるデータの長さが取得できます。
2番目のフィールドの開始位置と長さが決まってから、MID関数でデータを取得できます。
3番目のフィールドを取り出すには、2つのSEARCH関数を使用して2番目の斜線の位置を見つけ、LEN関数を使用してデータ全体の長さを計算し、2番目の斜線の位置を減算して、3番目のフィールドの長さが取得できます。最後にRIGHT関数を使用して、右から3番目のフィールドのデータを抽出します。(ここで、3番目のフィールドは最後のフィールドであるためです。)
=RIGHT(A2,LEN(A2)-SEARCH("/",A2,SEARCH("/",A2,1)+1))
さまざまなExcel関数を組み合わせた後、各フィールドのデータを正しく取得できますが、フィールドの数量が多い場合には、この方法は非常に複雑になるため、VBAにあるSplit関数を使用して処理することをお勧めします。
VBAにあるSplit関数を使用して文字列を分割する
VBAにあるSplit関数は、文字列を分割するために使用されます。使用する場合はVBAコードの編集が必要ですが、大量のフィールドのデータを高速に処理できるため、データが複雑な場合に非常に便利です。
Step 1
「Excelにある[開発]ツールのチュートリアル」を参照して、Excelにある[開発]ツールを有効にします。
Step 2
Excelツールバーにある[開発]タブをクリックして、[マクロ]を開きます。
Step3
マクロ名(自分の好みに名称を作成してください)を入力し、[作成]をクリックします。
Step 4
VBAコードエディタで、フィールドを分割するVBAコードを編集します。
ここでは、Forループを使用して、ローデータを1つずつ(row)抽出し、Split関数を使用してすべてのフィールドを斜線で一連の配列に自動的に分割し、2番目のループを使用して各フィールドのデータをExcelテーブルに対応する位置に入力します。
Sub MySplit()
For i = 2 To 8
' ローデータを取得します
rawData = Cells(i, 1)
' Split関数でフィールドを分割します
fieldArray = Split(rawData, "/")
' 各フィールドのデータをExcelテーブルに対応する位置に入力します
For j = 0 To 2
Cells(i, j + 2).Value = fieldArray(j)
Next j
Next i
End Sub
コメントを残す