プロが教える店舗&オフィスのセキュリティ対策術

範囲内で空白を除いて一番左端のセルの位置を取得する方法というのはあるでしょうか?

たとえば以下のような表の場合にA1にはC1、A2にはD2、A3にはE3が入るようにしたいのです。
以下のような表の場合に
 A  B  C  D  E
1      1  2   3
2           2   3
3             3

わかりづらい質問で申し訳ありませんが、よろしくお願いします。

A 回答 (9件)

こんなので p(..) どうでしょう?



A1:
=INDEX(B1:E1,MATCH(1,INDEX(SIGN(LEN(B1:E1)),0),0))

下にコピー
    • good
    • 0

A1=ADDRESS(ROW(),SUMPRODUCT(MIN(10^(B1:E1="")*COLUMN(B1:E1))),4,1)


コピーしてA2以降に貼り付けてください。
    • good
    • 0
この回答へのお礼

ありがとうございます。期待通りの動作しております。
ただ、なぜそうなるのかがわかりません(泣
SUMPRODUCT(MIN(10^(B1:E1="")*COLUMN(B1:E1)))
の部分を教えていただけないでしょうか。

お礼日時:2006/01/20 17:57

No.1です。



>セルの位置を取得

値じゃなく、アドレスですか?
これかな? p(..)

A1:
=ADDRESS(ROW(),MATCH(1,INDEX(SIGN(LEN(B1:E1)),0),0)+1,4)

下にコピー

ちなみにNo.1の式は↓に訂正しておきます。
=INDEX(B1:E1,,MATCH(1,INDEX(SIGN(LEN(B1:E1)),0),0))

結果は同じことですけど、B1:E1のあとはカンマ2個の方がいいです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。参考になりました。
ただ、こちらの例が悪かったです。左端の値は1とは限らないのです。
大変申し訳ありませんでした。

お礼日時:2006/01/20 18:00

次のような式も考えられます。


=INDEX(B1:E1,1,COUNTBLANK(B1:E1)+1)
アドレスなら、式のある行とCOUNTBLANK(B1:E1)+1です。
    • good
    • 0
この回答へのお礼

例が悪かったです。大変申し訳ありませんでした。
こちらも参考になりましたが、途中で空白セルが入る場合もあるため、今回のものにはあわないようです。

お礼日時:2006/01/20 18:03

No.3です。



>左端の値は1とは限らないのです。

意味がわかりません。
実際に試していただいた上でのご発言でしょうか?
    • good
    • 0
この回答へのお礼

大変失礼いたしました。
こちらの確認不足と勘違いでした。
No.3のご回答でこちらの期待通りの動作をいたしました。
不愉快な思いをさせてしまい、申し訳ありませんでした。

よろしければ内容の説明をお願いできないでしょうか。
特に、
SIGN(LEN(B1:F1))
がさっぱりです><

お礼日時:2006/01/20 18:23

>SUMPRODUCT(MIN(10^(B1:E1="")*COLUMN(B1:E1)))


10^(B1:E1="")で空白のセルなら10、空白でなければ1を返します。
COLUMN(B1:E1)で行位置がでますので上記の係数をかけた上で
MIN関数で空白でない位置の最小値を求めています。
例題の1行目ならMIN(20,3,4,5)=3、2行目ならMIN(20,30,4,5)=4
このMIN関数の中で配列の計算をしている為、このままでは正常な値を返しません。
そのためにSUMPRODUCTで配列の和を求めて行の位置を表示させています。
    • good
    • 1
この回答へのお礼

解説ありがとうございます。
MINに配列を入れるとか、到底思いつかない方法ですね。目からうろこです。
範囲が広くなったら10を大きくしてやると言い訳ですね。
ありがとうございました。

お礼日時:2006/01/20 18:39

こんばんは。



私は、ご質問の意味がわからなかったので、そのままにしていましたが、単に、BLANK の次のセルを探すなら、このようにすれば簡単では?

=MATCH(FALSE,INDEX(ISBLANK(B1:E1),,),0)+1

なお、+1 を足すのは、MATCH関数で、B1 にあると、1が立つので、+1 を足します。
    • good
    • 0
この回答へのお礼

わかりやすい回答ありがとうございます。
あとはADDRESS関数を使ってやればいいようですね。
大変ありがとうございました。

お礼日時:2006/01/21 09:14

A-G列で左から見ていって、初めて空白でない数字文字などの現れる列番号


配列数式で考えてみました。たとえばH2セルに
=MIN(IF(A2:G2<>"",COLUMN(A2:G2),""))
と入れてSHIFT+CTRL+ENTERを(3つのキーを)同時に押す。
意味はA2:G2までで、空白セルでなければ、列番号を採る。
それらの列番号の中で最小の列番号を採ると、一番左の列を見つけたことになる。
    • good
    • 0
この回答へのお礼

>SHIFT+CTRL+ENTERを(3つのキーを)同時に押す。
これも知らない操作でした。
検索かけて、配列数式を調べてきました。
こんな便利な機能があったのかと、知らなくて損してた気分ですw
ありがとうございました。

お礼日時:2006/01/21 09:04

No.5です。



MATCH(1,INDEX(SIGN(LEN(B1:E1)),0),0)
MATCH(検査値, 検査範囲, 照合の型)

検査範囲は INDEX関数でつくられた配列データ。
配列データの内容は LEN(B1:E1)で、B1:E1各セルの文字数( 桁数 )。

質問の例ではわかりにくいので
B1:空白、C1:1234、D1:空白、E1:56
のようにデータが入っていると思ってください。

SIGN関数を使わずに、INDEX(LEN(B1:E1),0) だとすると、
{0,4,0,2}
という配列データになります。
0、4、0、2 は LEN関数の戻り値、B1:E1のそれぞれの文字数( 桁数 )です。

SIGN関数は数値の正負を調べる関数。
引数が正の数なら( 何桁であっても )1を返します。
だから SIGN関数を使って、INDEX(SIGN(LEN(B1:E1)),0) なら
{0,4,0,2} という配列データは
{0,1,0,1}
というふうになります。
ここでは SIGN関数の引数は文字数なので、セルが空白なら 0、データが入っていれば 1。戻り値は 0 か 1 かのどちらかです。

なので、MATCH関数は↓な感じになります。
=MATCH(1,{0,1,0,1},0)

1が検査値。{0,1,0,1}が検査範囲。
何桁の数値( 文字列でも )が入っていても、検査値を 1にしておけば左端のデータ位置を求めることができるってことです。

もしかしてこの検査値の 1を見て、
>左端の値は1とは限らないのです。
と思いました? ちっ、ヴァカな回答よこしやがって! て感じでした?

このときの MATCH関数が返す位置は B列を1とするものなので、正しいセル番地を求めるために +1しています。
MATCH(1,INDEX(SIGN(LEN(B1:E1)),0),0)+1

検査範囲が C列から始まるなら +2、D列から始まるなら +3のように調整してください。
    • good
    • 0
この回答へのお礼

丁寧な解説ありがとうございました。
配列を検査範囲に指定するというのを知らなかったので、最初回答を見てもチンプンカンプンでした><
よくわかりました。

>もしかしてこの検査値の 1を見て、
そのとおりでした。お恥ずかしい限りです。

お礼日時:2006/01/21 09:02

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

このQ&Aを見た人はこんなQ&Aも見ています