LoginSignup
2
0

More than 5 years have passed since last update.

ズンドコキヨシ for Excel

Last updated at Posted at 2017-09-29

今更にも程がある、とは思ったが、せっかくなので書き残しておこう。

[Excel関数]

=IFERROR(IF(MATCH("ドコ",OFFSET(A1,-5,0,5),0)=5,"キ・ヨ・シ!",NA),
  IFERROR(T(FIND(OFFSET(A1,-1,0),"キ・ヨ・シ!")),
   IF(RAND()<0.5,"ズン","ドコ")))

[使い方]

  1. A1セルに上記を入力
  2. そのセルを選択し、下方のセル範囲(2〜30行程度)にコピーペースト(またはフィル)する (コード中の A1 となっているところは、A2、A3・・・と自セルのアドレスになるはず)
  3. F9キーを押すたびに、再計算で結果が変わります

[説明]

■1行目

IFERROR(IF(MATCH("ドコ",OFFSET(自セル,-5,0,5),0)=5,"キ・ヨ・シ!",NA),

「ここで"キ・ヨ・シ!"と叫ぶかどうか」を判断している
叫ぶ条件に当てはまらない場合はエラーとなり、IFERROR関数の第2引数(2行目以降の記述)を表示することになる

OFFSET関数で「自セルの5行前から5行分(つまり直近の5つ)」の範囲を指定して、その範囲内で、"ドコ"という値が何個目に登場するかをMATCH関数で調べる

  • 自セルが1〜5行目の場合、「直近の5つ」が存在しないので、OFFSET関数でエラーになる
  • 直近の5つの中に"ドコ"が1つもない場合は、MATCH関数がエラーになる
  • 5個目(ズン・ズン・ズン・ズン・ドコ)なら、"キ・ヨ・シ!"を返す
  • 1〜4個目の場合、NA関数を使ってわざとエラーにしている

■2行目

IFERROR(T(FIND(OFFSET(自セル,-1,0),"キ・ヨ・シ!")),

ここでは、「"キ・ヨ・シ!"が既に登場済みかどうか」を判断している
一つ上のセルが、"キ・ヨ・シ!"または空文字なら、登場済みということになるし、"ズン"や"ドコ"なら、未登場ということになる
登場済みなら自セルは空文字にする(未登場の時はエラーとなり、IFERROR関数の第2引数(3行目の記述)へ移る)

一つ上のセルをOFFSET関数を再び使って取得し、それを検索値として、FIND関数で、文字列"キ・ヨ・シ!"の中を検索する
セル値は"ズン","ドコ","キ・ヨ・シ!",空文字 のどれかなので、

  • 検索値が"ズン"や"ドコ"の場合はヒットしないのでFIND関数がエラーになる(それによって後述のT関数もエラーになる)
  • 検索値が"キ・ヨ・シ!"の場合は1桁目でヒット
  • 検索値が空文字の場合も、1桁目でヒットしたという扱いになる

この戻り値を、T関数(引数が文字列以外の場合は空文字を返す)に与えている

■3行目

IF(RAND()<0.5,"ズン","ドコ")

ここは、キヨシ未登場の場合の記述
"ズン"か"ドコ"をランダムで表示するために、RAND関数(0〜1の範囲での乱数を返す)を利用している


■追記(18.11.17)

以下のようにすれば全てのセルが同じ数式で行ける

=IFERROR(IF(MATCH("ドコ",OFFSET($A$1,ROW()-6,0,5),0)=5,"キ・ヨ・シ!",NA),IFERROR(T(FIND(OFFSET($A$1,ROW()-2,0),"キ・ヨ・シ!")),IF(RAND()<0.5,"ズン","ドコ")))
2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0