OpenOfficeで、リスト内の合致するデータの行に◎をつける

下の表では選手の試合数、打数、安打が記されています。

送信者 OpenOffice
このファイルは、SKYDRIVEからcalc151.odsをダウンロードしてください。
ここで、特定の条件以上の選手に◎を付けたいと思います。
検索判断の対象にする列は、K1セルに入力されている項目の列とします。K2セルに入力されている値を下限にします。

単純な数式にすると、例えばK1セルには打数が入っているので、打数が入っているC列の値がK2以上であれば良いことになります。
17行目の場合、=IF(C17>=K2;"◎";"") で292が判断の対象になり、K2の値300よりも小さいので空白が返されます。
18行目の場合、=IF(C18>=K2;"◎";"") で351が判断の対象になり、K2の値300よりも大きいので◎が返されます。
さて、上の場合は、打数が入力されているC列を選んで数式の中に手で打ち込みました。この場合、はっきり言って面倒くさいし、実用的ではありません。


そこで、K1セルの項目が、元の表のなかで何列目にあるかを検索して自動的に判断する列を移動する数式を作ってみます。

使用するのは、MATCH関数とROW関数の組み合わせです。
=MATCH($K$1;$A$1:$E$1;0)
これで、K1の値が、A1:E1のなかで何列目かが返されます。
ここでK1には打数が入力されているので、3が返されます。

次に、ROW関数で、判断する対象のデータが入力されている行を自動的に返すようにします。
=ROW() と、()のなかを空白にして、例えば17行めのどこか適当なセルに入れると、17が返ってくるはずです。
このことを、ADDRESS関数でアドレスを生成するときに利用して =ADDRESS(ROW();MATCH($K$1;$A$1:$E$1;0))とすると、判断する対象のセルが17行目の場合、$C$17 が返されます。
この値($C$17)をそのままINDIRECT関数に当てはめます。
=INDIRECT(ADDRESS(ROW();MATCH($K$1;$A$1:$E$1;0)))

◎をつけた行だけを抜き出してリストアップしたいときは、
OpenOfficeで全員の売上一覧表から特定の営業員の成績だけを抜き出す

基準以上の数字の選手だけをリストアップする
をどうぞ。



ここまでで、F2セル判断する対象の列の、対象となるデータを返すことができました。(上の画像のF2セルを参照してください)

ここまできたら、後は簡単で、対象になるデータがK2のデータ以上かどうかを判断してやればいいのですから、
=IF(INDIRECT(ADDRESS(ROW();MATCH($K$1;$A$1:$E$1;0)))>=$K$2;"◎";"")

で、完了です。
これでK1の値を変えても、=IF(C17>=K2;"◎";"")のC17をD17、B17と変える面倒は必要なくなりました。



さらに、K1セルを楽に変更するには

  1. ツールバーのデータから入力規則を選んで
  2. 条件タブをクリック
  3. 入力値の種類をセルの範囲に設定
  4. ソースの横の空白を一度クリックしてから、見出しの対象にしたい項目が入っているセルを選択してOKをクリック

これで、K1セルはリストボックスして使えます。つまり、いちいち項目を入力しなくてもリストから選択できる状態、です。

送信者 OpenOffice
この記事をクリップ!