Excel VBAにあるSplit関数を使用して文字列を分割し、それらを配列に入れる実例

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関数でデータを取得できます。

2番目のフィールドにあるデータを取得する

3番目のフィールドを取り出すには、2つのSEARCH関数を使用して2番目の斜線の位置を見つけ、LEN関数を使用してデータ全体の長さを計算し、2番目の斜線の位置を減算して、3番目のフィールドの長さが取得できます。最後にRIGHT関数を使用して、右から3番目のフィールドのデータを抽出します。(ここで、3番目のフィールドは最後のフィールドであるためです。)

=RIGHT(A2,LEN(A2)-SEARCH("/",A2,SEARCH("/",A2,1)+1))
3番目のフィールドにあるデータを取得する

さまざまな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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です