【Excel】1つのセルに複数行の文字列がある場合に特定の行の文字列を抽出する3つの方法

Excelでセルの中に複数行の文字列が入力されていることがあります。

そのようなExcelの使い方はご法度だと思っています。しかし、人から送っていただいたExcelファイルだとよくあるのも事実です。

特定の行の文字列を取得したい

そんなとき特定の行の文字列だけがほしくなるなることがあります。特定の行の文字列だけを取得する方法は大きく3つあります。その方法をお伝えしたいと思います。

データツールを利用して特定の行の文字列を取得する

一番簡単な方法はデータツールを利用して、特定の行の文字列を取得する方法です。

以下のようなデータがA2セルに入っていたとします。A2セルを選択します。

次に[データ]タブの[データツール]グループの[区切り位置]をクリックします。

以下の画面(区切り位置指定ウィザード-1/3)が表示されます。[カンマやタブなどの区切り文字によってフィールドごとに区切られたデータ]をクリックし、[OK]ボタンをクリックします。

以下の画面(区切り位置指定ウィザード-2/3)が表示されます。[タブ]、[セミコロン]、[カンマ]、[スペース]のチェックを外し、[その他]にチェックを入れます。その他の入力ボックスでCtrl+Jを入力し、[OK]ボタンをクリックします。

次の画面(区切り位置指定ウィザード-3/3)では特に何もせず、[完了]ボタンをクリックします。

そうすると以下のように1行目はA列、2行目はB列、3行目はC列と分割されます。

上記の例はA2セルだけを選択して行いましたが、例えばA2セルからA100セルまで同じようにデータが入力されていて、それらのデータに対して同じように分割したい場合はA2セルからA100セルまでを選択した状態で上記の操作を行えば、A2からA100までのデータが改行で分割されます。

 

  • 元のA2セルのデータは1行目の文字列に変わってしまいます。元のデータはそのままにして行う場合は、他の列にデータをコピーした上で行う必要があります。
  • この方法では特定の行のみの文字列を抽出することはできません。不要な列を削除する必要があります。

マクロでワークシート関数を作成し、特定の行の文字列を取得する

マクロを利用し、ワークシート関数を自作する方法があります。

マクロを利用する準備ができていない場合は「【Excel】マクロを利用する準備をする」を参考に準備をしてください。

[開発]タブの[コード]グループの[Visual Basic]をクリックします。

左側のペインの「VBAProject([ファイル名])」を右クリックし、[挿入]-[標準モジュール]をクリックします。

そうすると、以下のように挿入した標準モジュールの内容が右側に表示されます。「Option Explicit」という文字だけが入力されている状態です。ひとまず、「Option Explicit」が何なのかは気にしなくていいです。

「Option Explicit」の後(改行して)に以下のコードをコピーして貼り付けます。

Function ExtractLine(value As Range, i)
  Dim ArryValue
  ArryValue = Split(value.value, Chr(10))
  ExtractLine = ArryValue(i - 1)
End Function

上記で作成した関数はセルの中で利用できるワークシート関数です。

書式

ExtractLine(文字列が入ったセル,取得したい行)

関数と変数の説明

文字列が入ったセルの取得したい行を取得します。

  • 文字列が入ったセル(必須項目):文字列が入ったセルをA1のように指定します。
  • 取得したい行(必須項目):取得したい行を数値で指定します。
文字列が3行しかないのに4行目を指定した場合は#VALUE!を返します。

使用例

以下が使用例になります。

ABC
1対象文字列
2あああ
いいい
aaa
3
4取得したい内容出力結果計算式
51.1行目を取得あああ=ExtractLine(A2,1)
62.2行目を取得いいい=ExtractLine(A2,2)
73.3行目を取得aaa=ExtractLine(A2,3)
84.4行目を取得#VALUE!=ExtractLine(A2,4)

関数を組み合わせて特定の行の文字列を取得する

この方法は現実的に2行目くらいまでが管理上限界です。あまりおすすめの方法ではありません。マクロが使えるならマクロを使った方法を、マクロが無理ならデータツールを使った方法を利用するのが無難です。

この方法はLEFT関数、MID関数、FIND関数、CHAR関数を利用して指定した行を取得する方法です。が、あまりおすすめの方法ではありません。

ABC
1対象文字列
2あああ
いいい
aaa
3
4取得したい内容出力結果計算式
51.1行目を取得あああ=LEFT(A2,SEARCH(CHAR(10),A2)-1)
62.2行目を取得いいい=MID(A2,FIND(CHAR(10),A2)+1,FIND(CHAR(10),A2,FIND(CHAR(10),A2)+1)-FIND(CHAR(10),A2)-1)

コメント

タイトルとURLをコピーしました