前回の日記に引き続き、エクセルのリストのお話。
前回と同じ「預金通帳明細→弥生会計仕訳日記帳変換シート」ですが、今度はところどころに空白がある列を入力規則でリスト入力することに。
こういうリストをそのまま範囲指定してしまうと、ドロップダウンリストも以下のような感じで歯抜けになってしまい、入力がちょっとまどろっこしくなってきます。
このリストから空白を詰めたリストを作成し、それをリスト入力の範囲とすると、ドロップダウンリストも歯抜けにならずきれいになるのですが、以下のような配列数式を使うとVBAを使わずとも空白を抜いたリストに自動的に変換できます。
=[IFERROR(INDEX(D:D,SMALL(IF($D$9:$D$1300<>"",ROW($D$9:$D$1300)),ROW()-8)),"")]
何をやっている数式か、自分でもよく分からなくなってきますが(^^;、内側の関数から見ていくと
- IF関数を使って、D列で空白じゃないセルがあれば、その行番号を返す。
- SMALL関数を使って、1の行番号と、数式が入っているセルの行番号の、どちらか小さい行番号を返す。
- INDEX関数を使って、2の行番号に該当するD列の値を返す
- IFERROR関数で、エラーが出た場合は空白とする。
- これを範囲内のすべてのセルに対して行う。
うーむ・・・、自分で手順を書いていても、頭がこんがらがってきそうです・・・。
この配列数式や配列、関数でもVBAでも使いこなせると便利だと思うのですが、個人的にはどうしても苦手意識が強いです。作業セルを使って二段階で計算できる場合には、ブサイクでもそちらの方法を選んでしまいます。
数式を書いていても、一つの配列数式で複数の計算を同時に行うというのが、なかなかイメージしにくいのですよね・・・。
この辺りはやはり文学部の人間の頭の限界でしょうか(^^;?
※文学部でググってみると、こんな記事がヒット。
withnews.jp
母校の文学部の卒業式の式辞ということなのですが、
「しかし、文学部の学問が本領を発揮するのは、人生の岐路に立ったときではないか、と私は考えます」
大学を卒業してから、友人からは渡り鳥人生と笑われる人生を送ってきましたが、自分自身で振り返ると「好きなようにやってきた割には、大きな失敗もせずうまくやってきてるなあ」と、まあ今のところは満足できる結果になっているような気がします。
確かに人生の岐路に立つたびに、その時点での自分を客観視した上で結論を出して選択を行ってきましたが、「ここまでは大丈夫かな」と自分の能力の見極めができたのは文学部の史学科で勉強した賜物なのかしらん・・・。