OpenOfficeで膨大なリストのなかから、ほしい項目を効率的に見つけ出すには

たくさんのアルバムリストや、営業所、部署ごとの社員名などを管理するのは結構大変ですよね。
下の形式でリスト管理すると案外楽にできるかもしれないです。

このリストでは、E2セルでアーチスト名をリスト選択すると

送信者 OpenOffice

選択したアーチストの登録アルバムのタイトルがF列で選択できるようになり

送信者 OpenOffice

さらに選択したアルバムの中の曲名がG列で選択できるようになります。

送信者 OpenOffice
この便利なフォームは、データの入力規則を設定することで作ることができます。
入力規則は、関数を含めた数式を使って設定することができるので、上のようなことが可能になります。
このファイルは、SKYDRIVEからcalc161.odsをダウンロードしてください。

E2セルの入力規則に設定する数式を作成

A2:A300

これは数式というようなものではなく、ただのセルの範囲です。
ただし、そのままではおなじアーチスト名が何度もリストの中に登場することになるので、下の2点の設定を行ないます。

  1. ツールバーのデータ>入力規則で、入力値の種類をセルの範囲に設定する
  2. 空白セルの許可のチェックを外す
  3. エントリを昇順に並べるにチェックを入れる
  4. ソースの欄に上記のプロセスで作成した数式を入力する

送信者 OpenOffice
送信者 OpenOffice
これで重複するデータがリストで何度も表示されることがなくなります。
このことは、以下F2セルの設定、G2セルの設定でも同じです。



F2セルの入力規則に設定する数式を作成

INDIRECT(ADDRESS(MATCH(E2;A1:A300;0);2)):INDIRECT(ADDRESS(COUNTIF(A2:A300;E2)+MATCH(E2;A1:A300;0)-1;2))

リストの起点の設定

MATCH関数を使ってE2セルに入力されているアーチストのセルが何行目から始まっているかを探す。MATCH関数で返された値を行番号とする
 MATCH(E2;A1:A300;0)

アドレスを生成
 ADDRESS(MATCH(E2;A1:A300;0);2)

INDIRECT関数をかぶせて数式の中で利用できるようにする
 INDIRECT(ADDRESS(MATCH(E2;A1:A300;0);2))



リストの終点の設定

A2:A300の間に、E2の値が何個入力されているかを数える
 COUNTIF(A2:A300;E2)

入力されている個数に、MATCH関数を使って求めた行番号を加えて1を引く。 この値を行番号にする。 
 COUNTIF(A2:A300;E2)+MATCH(E2;A1:A300;0)-1

曲名はB列に入っているので列番号を2に設定してアドレスを生成 
 ADDRESS(COUNTIF(A2:A300;E2)+MATCH(E2;A1:A300;0)-1;2)

INDIRECT関数をかぶせて数式の中で利用できるようにする 
 INDIRECT(ADDRESS(COUNTIF(A2:A300;E2)+MATCH(E2;A1:A300;0)-1;2))
完成したら始点と終点の設定を、始点:終点の形にして、入力規則にする。



G2セルの入力規則に設定する数式を作成

INDIRECT(ADDRESS(MATCH(F2;B1:B300;0);3)):INDIRECT(ADDRESS(COUNTIF(B2:B300;F2)+MATCH(F2;B1:B300;0)-1;3))


F2セルの設定と同じ構造です。
ただし今度は、検索する対象をF2にする。
曲名が入っているC列を対象にするので、ADDRESS関数で列番号を3にする。
完成したら始点と終点の設定を、始点:終点の形にして、入力規則にする。


注意すること

元のリストを下の手順で並べ替えておく必要があります。

送信者 OpenOffice
送信者 OpenOffice