変奏現実

パソコンやMMORPGのことなどを思いつくまま・・・記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。

この画面は、簡易表示です

ISERROR

[EXCEL]ネストした表の拾い出し

こんなネストした表から(nnn)形式の番号とその後のテキストを拾い出すとしたら・・・

ネストした表

VBAではなくセルの数式で頑張ると

(nnn)を拾い出す簡易な数式
(nnn)の後のテキストを拾い出す簡易な数式

な感じだろうか・・・

一応6行目の様なケースも考慮してSEARCH関数で(nnn)な何かを判定している。

手元のEXCELは数式に改行コードが入るので、図の様に改行できて見やすい。けど、手元のPCのCPUは古いけどi9-9900でメモリ32GBだから不自由なく使えてるダケかもしれない。よくあるハズレPCアンド旧EXCELな状況ではそうもいかない。

多分、重い数式の説明やらヘルプ機能が邪魔で手に負えなくなるから、sakuraエディタで最終行を複製し1行範囲でセル座標を置換して貼り付けた方がマシな気がする。

FINDやSEARCHの検索対象を範囲指定してスピンさせる範囲分列を消費させる方法もあるけど、CONCATでかき集めないといけないし、悪質なくらいネストしている表の場合は列が足りなくなる恐れがあるので複数行な数式の方がマシな気がする。

でも行方向にスピルさせれば・・・

長すぎる番号を拾い出す数式
長すぎる番号の後のテキストを拾い出す数式

数式を行数分コピペしなくていいから便利かもしれない。

※範囲が1行分足りなくなった時に、数式の6を7に一斉置換するためにsakuraエディタが必須かも。

もし10ネストとかになると数式の長さに引っかかったりしそうだし、やっぱり編集も面倒!

「長いIF数式」をLAMBDA関数で括り、セル名の参照範囲に割り当ててみよう。

長い数式をセル名付きのLAMBDA式化
短くなった番号を拾い出す数式
短くなった番号の後のテキストを拾い出す数式

範囲パラメータを指定すると自動的にスピルされてしまうので、4つの番号取得を一つにまとめる方法が無いのかな?

複数列でまとめた数式をLAMBDA化してみよう

複数列からxxxな式を追加してみた

セル名の範囲をシートにすると「シート名!セル名」になってしまうのでセル名の範囲をブックに変更。

セルの数式の方も

もっと短くなった番号を拾い出す数式
もっと短くなった番号の後のテキストを拾い出す数式

とまれ、ここまで短くなれば十分かな。

ネストが深くなったら、

  1. 「複数列からxxx」の参照範囲のLAMBDAのパラメータと式を増やす
  2. セルの数式もパラメータ増やす

で何とかなりそう。

「複数列のxxx」セル名でBYCOL関数を使ってみる

ん-。やはり列範囲を指定した時点でスピルされてしまう。

うまく行かないや(笑

ここまで数式で頑張らなくても

シートからCSVに吐き出して、エディタでTAB(¥t)を一斉削除してシートに戻せばよいのは、秘密です。




top