[[20100529175507]] 『種類を問わない最後のデータ』(甘木) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『種類を問わない最後のデータ』(甘木)
  
A列には空白なしで日付が並び
B列にはとびとびで文字列やら数値やらシリアル値やらいろんなものが入ります。
B列の最後のデータと同じ行のA列の日付を参照したいのです。
過去ログを参考にして
=LOOKUP(10^10,B1:B10,A1:A10)と書いてみたんですが
これではB列が文字列のみの場合に#N/Aが返り
または最終データが文字列の場合はそれを無視して数値とシリアル値のみの中での
最終データを対象としてしまいました。
=LOOKUP("*",B1:B10,A1:A10)だと文字列しか対象にしてくれず
=LOOKUP(OR(10^10,"*"),B1:B10,A1:A10)では数式そのものがダメ出しをくらいました。
どうすればあらゆる種類の入力に対応できる式になりますか。
宜しくお願いします。

  
追加でスミマセン
同じデータの中で、B列に○と入力されることが1回だけあり
その場合のA列も返したいのですが
=LOOKUP("○",B1:B10,A1:A10)だと、○じゃなくても文字列なんでもヒットしちゃうみたいで。
LOOKUPじゃなくてINDEXとか?
こちらもご指導いただけると幸いです(甘木)

 ◆これでいかがでしょう
 ◆文字列(○も含む)と数値などのデータ対象です
 =LOOKUP(1,0/(B1:B10<>""),A1:A10)
 (Maron)

  
Maronさん、ありがとうございます。
うまくいきました!
でも、ごめんなさい、どうしてこれで答えが得られるのかがわかりません。
LOOKUP(検索値,検索範囲,対応範囲)ですよね?
0/(B1:B10<>"") という範囲から 1 を検索する???
お手数ですが解説をお願いします。(甘木)

 ◆もしも、4行目が空欄で、データの最下行が7行目ならば、
 ◆式が入力されているセルを指定して、数式バーの、 0/(B1:B10<>"") を指定して、「F9」を押しください 
 ★{0;0;0;#DIV/0!;0;0;0;#DIV/0!;#DIV/0!;#DIV/0!}になります
 ★これで、=LOOKUP(10^10,B1:B10,A1:A10)の10^10の要領で、最後の「0」が7番目なので、A1:A10の7番目を返しています
 (Maron)

  
B1:B10<>"" ←この部分は数値か文字列が入っているという意味で
実際に何かが入っていれば、数式の中ではtrue=1,
実際に入っていない4行目や8〜10行目はfalse=0になり
0/1=0、0/0=;#DIV/0!;・・・で、上のような配列ができる。
という理解でよろしいでしょうか。
こういうのは自分では思いつかないものですね。多くの事例に触れるのみでしょうか。
なんか悔しくて、"○"のほうも、意地で自分で解決したくなってきました(笑
ご教授ありがとうございました!(甘木)


 ◆そうですよ
 ◆ところで、「"○"のほうも、」がよくわかりません
 ◆数値と○ということでしょうか
 (Maron)

あ、いえ。追加質問で書いた
 >同じデータの中で、B列に○と入力されることが1回だけあり
 >その場合のA列も返したいのですが
 >=LOOKUP("○",B1:B10,A1:A10)だと、○じゃなくても文字列なんでもヒットしちゃうみたいで。
 
のことです。
ただ、意地で…とは書きましたが未だ解決していません…
なぜ上記のような動きになるのかが理解できていないもので(苦笑)

 =IF(COUNTIF($B$1:$B$10,"○"),INDEX($A$1:$A$10,MAX(INDEX(($B$1:$B$10="○")*(ROW($B$1:$B$10)),))),・・・・・・・・)
 ・・・・・・・・に"○"以外のときの式を入れて下さい。   (NB)

	A	B	C	D	E
1	5月1日	12		5月9日	←最下行データ
2	5月2日	あ			
3	5月3日	36		5月5日	←「○」があれば、○の最下行
4	5月4日	52			なければ、最下行データ
5	5月5日	○			
6	5月6日				
7	5月7日	お			
8	5月8日	8			
9	5月9日	き			
10	5月10日				

 ◆最下行データ
 =LOOKUP(1,0/(B1:B10<>""),A1:A10)

 ◆「○」があれば、○の最下行、なければ、最下行データ
 =IF(COUNTIF(B1:B10,"○"),LOOKUP(1,0/(B1:B10="○"),A1:A10),LOOKUP(1,0/(B1:B10<>""),A1:A10))
 (Maron)

  
このページを見たら甘えてしまうと、意地を張ること数日。。。
他のスレッドの
 
2010/06/03(木)10:04 『一致データ』(わん)
こちらで、私がうまくいかない原因が偶然発覚しました。
 
LOOKUP のヘルプによると
 >重要  検査範囲に入力されている値は、数値は 1 〜 9、アルファベットは A 〜 Z、かなは "あ" 〜 "ん"、
だそうで、○は対象になっていなかったんですねー。
ヘルプをきちんと読むことがいかに大事かを痛感しました。
結果、Maronさんの LOOKUP(1,0/(B1:B10="○"),A1:A10) と同じ結論になりました。
Maronさん、ありがとうございました。
NBさんもありがとうございました。すんごい長い式ですね@@

 > >重要  検査範囲に入力されている値は、数値は 1 〜 9、アルファベットは A 〜 Z、かなは "あ" 〜 "ん"、
 >だそうで、○は対象になっていなかったんですねー。

 『○は対象になっていなかった』とは、どう云う意味ですか?

 昇順でないと正しい結果が保証されない、と云うだけだと思いますけど?

 ちなみに、XL2007のヘルプでは以下になっています?(これで「ひらがな」は対象になっていない、なんて云わないでしょうね?)

 >重要   配列に入力されている値は、... -2、-1、0、1、2 ...、A 〜 Z、ア〜ン、FALSE、TRUE のようにコード順の昇順に配置されている必要があります。
 >そうでない場合、LOOKUP 関数は正しい値を見つけることができません。また、英字の大文字と小文字は区別されません。

 (半平太) 2010/06/03 12:58


  
いろいろテストしている中、
B列に○ひとつだけがあってほかに何もないときでもうまく拾えなかったことがあって。
ひとつだけなら昇順もなにもないですよね?
なのでてっきりそういうことなのかと思ったんですが、勘違いのようですね。
じゃああの時はなんでダメだったのか、もう状況を再現できないので、
ただの入力ミスだった可能性も含めて、もう今となってはわかりません。
(甘木)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.