dポイントプレゼントキャンペーン実施中!

毎月の会員来店記録管理を以下のような表でしています。

 |A| B  | C  | D  | E  |  F  |  G  | ~AK
--+--+--------+--------+--------+--------+----------+----------+--------
2| | NO | 氏名 | 入会日 |来店累計|直近来店日|02/01(火)|02(水)
--+--+--------+--------+--------+--------+----------+----------+--------
3| |A-04-100|○山△子|04/10/10| 25回 | 02(水) | (空欄) | 12:55
--+--+--------+--------+--------+--------+----------+----------+--------
4| |A-04-101|□村×代|04/10/11| 12回 | 01(火) | 10:25 | (空欄)
--+--+--------+--------+--------+--------+----------+----------+--------

G2~AK2はF2に1を足していき、29日以降はMONTH関数の判定で""となっています。
F列およびG2~AK2の書式設定は「dd aaa」となっています。
B~D列はシート「会員名簿」から参照しています。
E列は=IF(D3<>"",COUNT(G3:AK3),"")等として求めています。
G~AK列は来店時間を手入力しています。

以上からF列の値を求めたいのですが、次のINDEX関数では領域番号に何を指定
すれば良いのか判りませんでした。

=INDEX($G$2:$AK$2,1,?)

まるでHLOOKUP関数の逆のようですが、なにか良い方法があればお教え下さい。

A 回答 (4件)

こんばんは。



No.1さんの配列数式でできませんか?
試してみましたが、こちらではできましたけど・・。

>「#VALUE!」が返ってきてしまいました。

配列数式になっています?
{ }が数式の前後についていなければ配列数式になっていませんよ。
{ } ←は手入力ではダメです。
もう一度、{ }のない数式をコピーして貼り付けてください。
<形式を選択して貼り付け>-<テキスト>
  ↓
そのあと数式バーにカーソルを置いて、Ctrl + Shift + ENTER で確定
  ↓
自動的に { } が前後に入ります。←コレが配列数式です。
---

◆ついでに配列数式を使わない方法として、
F3セルに↓ではどうでしょうか?
(F列も日付形式にしておいてくださいね)
-----------------------------------------
=LOOKUP(MAX(G3:AK3)+1,G3:AK3,$G$2:$AK$2)
-----------------------------------------

この回答への補足

配列数式の説明、ありがとうございます。
入力については問題なくできていました。
エラーの原因はANo.4のDoragonFangさんのご指摘の
通りでした。

結局、29日以降のMONTH関数の判定を活かせるのは
AloneAgainさんのLOOKUP関数とANo.3のDoragonFang
さんのINDEX関数でした。

今回はAloneAgainさんのLOOKUP関数を利用させて
頂きました。ありがとうございました。

補足日時:2005/02/27 11:29
    • good
    • 0
この回答へのお礼

補足に書いてしまいましたが、今回は
AloneAgainさんのLOOKUP関数を利用させて
頂きました。ありがとうございました。

お礼日時:2005/02/27 11:37

ANo.3です。

追記です。

>お教え頂いた配列数式を入力してみましたが、「#VALUE!」が
>返ってきてしまいました。

題意にあるように、29日以降、””になっているからでしょう。
配列数式は範囲内をすべて計算しようとしますが、29日以降の2行目が空欄("")なので、文字列と解釈し、計算できないと判断して、エラーになるのではないでしょうか。
    • good
    • 0

INDEX関数を使うなら、



=INDEX(G$2:AK$2,1,MATCH(MAX(G3:AK3),G3:AK3,1))

という式で出来ると思います。
MATCH関数で入力されている時間の最大値を探し、
その位置を列位置として返しています。

もっとも、ANo.2さんのlookupの方が簡単ですが・・。
    • good
    • 0
この回答へのお礼

MATCH関数についてはヘルプで使用例も読んで
いたのですが、すっかり失念していました。
ANo.4のご指摘も含めてありがとうございました。
いろんなやり方があるものだと関心しました。

お礼日時:2005/02/27 11:41

配列数式を使ってはどうでしょうか。


INDEXを使う代わりに、F3に

=MAX((ISNUMBER(G3:AK3))*(G$2:AK$2))

と入力して、Ctrl+Shiftを押しながらEnterを押します。
(この押し方は配列数式を入力する方法です。数式バーには{=MAX((ISNUMBER(G3:AK3))*(G$2:AK$2))}と表示されます。)

これをF4から下に必要なだけコピーします。
F3から下の書式は dd aaa にしておきます。

上に書いた式の意味は、「G3:AK3の中の数値セルを1、非数値セルを0とし、これをG$2:AK$2の各セルとそれぞれ掛け算し、その中で最大のものを求めなさい」という意味です。

この回答への補足

早速のご回答、ありがとうございます。
お教え頂いた配列数式を入力してみましたが、「#VALUE!」が
返ってきてしまいました。

>G3:AK3の中の数値セルを1、非数値セルを0とし、
ですが、ISNUMBER関数の返値はTRUEかFALSEですので、
0、1に置き換える必要があると思うのですが、IF関数
ではうまくいきませんでした。
考え方自体は的を得ていると思いますので、自分でも
更に試行錯誤してみたいと思いますが、もし良い案が
ありましたらお教え願います。

補足日時:2005/02/24 23:52
    • good
    • 0
この回答へのお礼

ANo.2のAloneAgainさんとANo.3のDoragonFangさんの
ご指摘で表の一部修正で利用可能なことが判りました。
未だISNUMBER関数の返値(TRUEかFALSE)がなぜ計算に
利用できるのかは判らずじまいですが、配列数式の
利用法を含めて新しいEXCELの使い方をご指導頂けて
大変ありがたかったです。

お礼日時:2005/02/27 11:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!