M12i.

学術書・マンガ・アニメ・映画の消費活動とプログラミングについて

ある列のセルのうち空白セルを間引いて“詰める”

B列の一連のセルには空のセルが含まれている。この空のセル部分を詰めて、空でないセルがひと続きとなるようにしたい。

  1. D列: B列の各行のセルが空でないかどうかを判定する。
  2. E列: B列の空でないセルを上から検索して、最初に空でないセルが見つかった位置を出力する。ただし検索開始位置(検索範囲の上端)は、直前の検索(現在セルがE2ならば直前の検索式のセルはE1)で空でないセルが見つかった位置の1つ下になる。
  3. F列: 直前の検索(現在セルがE2ならば直前の検索式のセルはE1)で空でないセルが見つかった位置を出力する。F5セルはE4セルの値を表示するし、F12セルはE11セルの値を表示する。F4セルは参照先がないので0である。
  4. G列: F列の値から"D4:D10000"形式のセル範囲記述を生成して表示する。この値は、E列で行う検索の検索対象範囲(とくにその検索開始位置)を決定する。
  5. H列: E列の検索で結果(空でないセルの位置情報)が得られたかどうかを判定して表示する。
  6. J列: H列の判定結果をみて、TRUEならばE列のセルの値(位置情報)を使用してB列のセルの値(詰めて表示したい情報)を抽出して表示する。FALSEならば単に""(空文字列)を表示する。

列名 説明/計算式
B列 (空白を含む一連のセル)
D列 =B4<>""
E列 =MATCH(TRUE,INDIRECT(G4),0)+F4
F列 =IF(ROW($F$4)=ROW(),0,INDIRECT("R"&(ROW()-1)&"C"&(COLUMN()-1),FALSE))
G列 ="D"&(ROW($E$4)+F4)&":D10000"
H列 =NOT(ISNA(E4))
J列 =IF(H4,INDIRECT("B"&(ROW($E$4)-1+E4)),"")

※計算式はシート4行目でのもの。"$B$4"形式ではなく"B4"形式になっているものは、当然セルのコピーによって相対的に変化していく。