[[20100831200936]] 『数値だけを拾うには』(みよしの) ページの最後に飛ぶ

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

 

『数値だけを拾うには』(みよしの)

  A     B

1 NO     0185-001

2 NO     0200-001

3 0185-001

4 NO

5 NO

6 0200-001

7 NO

8 NO

上の様にある抽出をしました(A列)。

それをB列の様に、NO回答以外のものを並べるには、

B1にどういう式を入れればいいでしょうか?

(B2以下コピー、B3以下は空白になる様にしたい)


 こんばんは
 拾いたいもの以外は「NO」ですか?

 B1=IF(COUNTIF($A$1:$A$8,"<>NO")>=ROW(A2),INDEX($A$1:$A$8,SMALL(INDEX(($A$1:$A$8="NO")*10^7+ROW($A$1:$A$8),),ROW(A2))),"")

 (ウッシ)

 こんな感じでもいいかな(お遊びで)
 =INDEX($A$1:$A$8,SMALL(INDEX(($A$1:$A$8="NO")*100+ROW($A$1:$A$8),),ROW(A1)))&""

 By

  ウッシさんへ

 ご回答ありがとうございます。

 拾いたいもの(0185-001、0200-001等)以外は、空白表示が希望です。

 今頂いた回答は、明日試してみます。

 (みよしの)


 > B1=IF(COUNTIF($A$1:$A$8,"<>NO")>=ROW(A2),INDEX($A$1:$A$8,SMALL(INDEX(($A$1:$A$8="NO")*10^7+ROW($A$1:$A$8),),ROW(A2))),"")

 ROW(A2) → ROW(A1)

 > =INDEX($A$1:$A$8,SMALL(INDEX(($A$1:$A$8="NO")*100+ROW($A$1:$A$8),),ROW(A1)))&""

 =INDEX($A$1:$A$8, → =INDEX(A:A,

 では?

 (R)


 こんばんは
 済みません、シート上からコピーして手直しした時にB2の式を持ってきてたみたいです。
 =IF(COUNTIF($A$1:$A$8,"<>NO")>=ROW(A1),INDEX($A$1:$A$8,SMALL(INDEX(($A$1:$A$8="NO")*10^7+ROW($A$1:$A$8),),ROW(A1))),"")

 セル範囲は実際に値の入っている範囲に直して貰えばいいと思います。

 (ウッシ)


 (R)さんご指摘の通りですね
 =INDEX($A:$A,SMALL(INDEX(($A$1:$A$8="NO")*100+ROW($A$1:$A$8),),ROW(A1)))&""

 By


 済みません、スレッドちょっとお借りします。
 (R)さん
 =INDEX($A$1:$A$8, → =INDEX(A:A,
 は、Must なんですか?
 パフォーマンスに影響はないのでしょうか?
 教えて下さい。m(__)m
 (ウッシ)

 > =INDEX(A:A,SMALL(INDEX(($A$1:$A$8="NO")*100+ROW($A$1:$A$8),),ROW(A1)))&""

 この数式のことですよね?
 Must じゃありませんよ。
 本当に1行目から8行目までしかデータがないんなら、100を10にして
 =INDEX($A$1:$A$20,・・・ でも問題ないでしょう。
 A11:A18に何も入力されていないことが前提になりますけど。

 それよりは =INDEX(A:A, にした方がどこまでを範囲にしたらいいかなんて
 考えなくて済みますから簡単ですよね。

 範囲を列全体にしてパフォーマンスに影響しないのか、という件については
 思い違いの可能性大ですから、そのつもりで読んでください。

 こういう、単に行番号からセルを参照するような INDEX の使い方で範囲を列全体にするのは
 VLOOKUP とか MATCH とかの検索系の関数で範囲を列全体にするのとは違うと思います。

 =INDEX(A:A,100) はピンポイントでA100の値を見に行くのであって、
 列全体を検索するわけではありませんから、パフォーマンスにはほとんど影響しないでしょう。
 =INDEX(A:A,100) だけなら =A100 と速度面でもさほど変わらないと思います。
 実際にはこの100のところに数式が入りますから、その分 =A100 より遅くなりますけどね。
 ただし、A列のどのセルを編集しても再計算してしまいますから
 それがパフォーマンスに影響を与えるということはあるでしょう。

 話は変わりますが、この質問のタイトル『数値だけを拾うには』になっていますけど
 0185-001 って数値なんでしょうかね?
 表示形式はどうなっているんでしょうか?

 こんなとこに書いても質問者さん、見ませんかね。

 (R)


 (R)さん、有難うございました。
 ほぼ思ってた通りだったので良かったです。
 ただ、
 >  本当に1行目から8行目までしかデータがないんなら、100を10にして
 > =INDEX($A$1:$A$20,・・・ でも問題ないでしょう。
 は、A20 までなら、100は20オーバーでないとダメかと思ってました。
 10^7 は INDEX の範囲を充分過ぎるほど超えてますけど。

 > 0185-001 って数値なんでしょうかね?
 多分、数値じゃないような気がしますし、それ以外のA列の値も「NO」だけじゃない気がするので
 提示した数式も使えないかもって思ってます。

 (ウッシ)


 私の回答が、混乱させているようで申し訳ありません

 (R)さんご指摘の
 >=INDEX($A$1:$A$8, → =INDEX(A:A,
 > では?
 は 私の回答の 
 >=INDEX($A$1:$A$8,SMALL(INDEX(($A$1:$A$8="NO")*100+ROW($A$1:$A$8),),ROW(A1)))&""
 に対するもので、INDEX($A$1:$A$8 が2カ所ありますが、前半部分に対するものです

 >>  本当に1行目から8行目までしかデータがないんなら、100を10にして
 >>=INDEX($A$1:$A$20,・・・ でも問題ないでしょう。
 は =INDEX($A$1:$A$20,SMALL(INDEX(($A$1:$A$8="NO")*10+ROW($A$1:$A$8),),ROW(A1)))&""
 ということを指しています

 >は、A20 までなら、100は20オーバーでないとダメかと思ってました。
 前半と後半の INDEX(($A$1:$A$8 をごちゃ混ぜにしていませんか?

 >10^7 は INDEX の範囲を充分過ぎるほど超えてますけど。
 (ウッシ)さん提示の式についてのことではないので、関係ありません
 (ウッシ)さん提示の式は COUNTIF($A$1:$A$8,"<>NO")>=ROW(A1) でエラー処理をしています
 私の回答は 上記のエラー処理を省くための便宜的処理です

 私の回答の式には、いろんな問題点がありますので、お遊びで と記載しました
 (とりあえず、質問の場合では 問題ないかな?)

 範囲が A1:A50000 の様に多くなった場合 100を50000に変えるとエラー処理がきかなくなります
 また、抽出された値は文字列となります
 (今回の場合、数値で 書式で処理している場合には使用できません) 

 注意書きもせず 申し訳ありません

 By


色々御回答ありがとうございました。

やってみましたが、回答にNOが入ったりします。

またちょっと訂正させて頂くと・・・

  A     B

1 NO     0185-001

2 NO     0200-001

3 0185-001

4 NO

5 0185-001

6 0200-001

7 NO

8 NO

上の様にある抽出をしました(A列)。

それをB列の様に、NO回答以外のものを、重複を選択せずに並べるには、

B1にどういう式を入れればいいでしょうか?

(B2以下コピー、だいたい10000行くらいでしょうか。B3以下は空白になる様にしたい)

となります。

再度お願いします。

(みよしの)


 みよしのさん、10000行も有るなら1行目に項目名入れてフィルタオプションにしませんか?

 By さん、こんにちは
 違うんです。関数、計算式が本当に苦手なんです。
 他のスレッド検索して修正して回答してますけど、中々理解しきれないです。
 100を10にして問題ないのは、($A$1:$A$8="NO")*10 の $A$1:$A$8 に対してなんですよね?
 100を10にして =INDEX($A$1:$A$20, は問題あるような気がするのです。

 それとまた疑問が、
 > 範囲が A1:A50000 の様に多くなった場合 100を50000に変えるとエラー処理がきかなくなります
 確かに50000件ではうまく抽出も出来なくなりました。
 何故なんでしょう?

 (ウッシ)

 >やってみましたが、回答にNOが入ったりします。 
 >またちょっと訂正させて頂くと・
 最初の問題が解決しないうちに、次の質問とは 感心しませんね

 前回の回答を理解できずまたは応用できないうちは、新しい質問の回答をしても
 無駄になりますので、省略
 ヒント 重複を避ける MATCH($A$1:$A$8,$A$1:$A$8,0)=ROW($A$1:$A$8)

 >100を10にして =INDEX($A$1:$A$20, は問題あるような気がするのです。
 どのようになると思われるのですか?

 =INDEX(範囲2,SMALL(INDEX((範囲1="NO")*α+ROW(範囲1),),ROW(A1)))&""
 乗数であるαは範囲1の最大行番号より大きい値 
 範囲2の最終行番号が、α+範囲1の最大行番号 より大きい値
 という2つの条件を満たす必要があります

 こんな感じで、いろんな欠点を解消できるかな
 =INDEX($A$1:$A$9,MIN(SMALL(INDEX(($A$1:$A$8="NO")*9+ROW($A$1:$A$8),),ROW(A1)),9))
 ただし、A9はダミーのセルとします
 A9 に ' を入力 または =""

 あくまでも、こんな感じでもできるかなというお遊びです

 By

コメント返信:

[ 一覧(最新更新順) ]


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