【Excel】対象範囲から対象文字列を含む行を抽出 覚書き
最初に
対象範囲から対象とする文字列を含む行を抽出したい時がよくあるので,覚書きとして残しておきます。
★★★参考にさせていただいたサイト様★★★
こちらのサイトは所謂「AND検索」のような形だったので,自分がしたい「OR検索」が出来るように少し手を加えました。
使用する式
=IFERROR(INDEX(①元の表の範囲,MATCH(LARGE(IF(IFERROR(FIND(②条件1,③条件範囲1),0 )+IFERROR(FIND(②条件2,③条件範囲2),0)>0,1,0)/ROW(④元表の1列範囲),ROWS($A$1:$A1)),1/ROW(④元表の1列範囲),0),COLUMNS($A$1:A$1)),"")
この式をコピペして①~④までを適用したい範囲に置き換える
①元の表の範囲...抽出元の表の範囲を絶対指定指定する
②条件...対象文字列を入れる
③条件範囲...対象文字列を含む列を絶対指定
④元表の1列範囲...表の行番号を取得するため,「①元の表の範囲」と同じ行数の一列(どの列でもよい)を指定する
中身(関数) [1]
=IFERROR(INDEX(①元の表の範囲,MATCH(LARGE(IF(IFERROR(FIND(②条件1,③条件範囲1),0 )+IFERROR(FIND(②条件2,③条件範囲2),0)>0,1,0)/ROW(④元表の1列範囲),ROWS($A$1:$A1)),1/ROW(④元表の1列範囲),0),COLUMNS($A$1:A$1)),"")
IFERROR(値, エラーの場合の値)...値がエラーの場合の例外処理
INDEX(配列, 行番号, 列番号)...行,列の交差点のセルを参照
MATCH(検索値, 検査範囲, 照合の種類)...[検査値]の相対位置を求める
LARGE(配列, 順位)...[配列内]の[順位]番目を大きい方から取り出す
IF(論理式, 真の場合, 偽の場合)...説明不要
FIND(検索文字列, 対象, 開始位置)...[検索文字列]において[対象が]左から何文字目か求める
ROW(参照)...[参照]の行番号を求める
ROWS(配列)...[配列]の行方向の大きさを求める
COLUMNS(参照)...[参照]の列番号を求める
中身(動き)
①
=IFERROR(INDEX(①元の表の範囲,MATCH(LARGE(IF(IFERROR(FIND(②条件1,③条件範囲1),0 )+IFERROR(FIND(②条件2,③条件範囲2),0)>0,1,0)/ROW(④元表の1列範囲),ROWS($A$1:$A1)),1/ROW(④元表の1列範囲),0),COLUMNS($A$1:A$1)),"")
IFERROR(FIND(②条件1,③条件範囲1),0 )
IFERROR(FIND(②条件2,③条件範囲2),0)
[条件範囲]に[条件]があればFIND()が数値を返す。
なければ#VALUEを返してくるので,IFERROR()を用いて0に直す
条件を増やしたければこれに +IFERROR(FIND(②条件3,③条件範囲3),0) のように追加していく
②
=IFERROR(INDEX(①元の表の範囲,MATCH(LARGE(IF(IFERROR(FIND(②条件1,③条件範囲1),0 )+IFERROR(FIND(②条件2,③条件範囲2),0)>0,1,0)/ROW(④元表の1列範囲),ROWS($A$1:$A1)),1/ROW(④元表の1列範囲),0),COLUMNS($A$1:A$1)),"")
IF(IFERROR(FIND(②条件1,③条件範囲1),0 )+IFERROR(FIND(②条件2,③条件範囲2),0)>0,1,0)
[条件]に一致していれば1以上の数値を返してきているので,IF文を使用して1(検索条件に合致) or 0(検索条件に合致せず)に振り分け
他 参考サイト様
[1]Excel関数 機能別一覧(全486関数)