« 関数で出来ますか~? 第21問 表の抜き出し | メイン | 関数で出来ますか~? 第22問 文書校正Ⅱ »

2009年6 月 6日 (土曜日)

コメント

む印

考え方は同じですd

60文字
G4=OFFSET(A$3,SMALL(IF(C$4:C28=E$3,ROW($1:25),30),ROW(A1)),)
Ctrl+Shift+Enterし、G4をG28までフィルコピー

56文字
G4=INDEX(A:A,SMALL(IF(C4:C28=E3,ROW(4:28),50),ROW(A:A)))
G4:G28を選択してCtrl+Shift+Enter

55文字は姑息な一文字減
G4=INDEX(A:A,LARGE(IF(C1:C28=E3,ROW(1:28),1),ROW(A:A)))
G4:G28を選択してCtrl+Shift+Enter
・・・表示が逆並びでゴメンなさいm(__)m

kir

Ctrl+Shift+Enterなし
65:=INDEX(A:A,30-LARGE(INDEX((C$4:C28=E$3)*30-ROW($4:28),),ROW(A1)))
普通のやつ
58:{=INDEX(A:A,SMALL(IF(C$4:C28=E$3,ROW($4:28),99),ROW(A1)))}
2文字減るけど重くなる。
56:{=INDEX(A:A,SMALL(IF($4:28=E$3,ROW($4:28),99),ROW(A1)))}

遊びで、
=IF(H4,INDEX(A:A,MOD(H4,1)*1000))
{=INDEX(B$4:B99+ROW($4:99)/1000,SMALL(IF(C$4:C28=E$3,ROW($4:28)-3,99),ROW(A1)))}

minmax

私も含めて、みなさんで結構苦しい式ありですね~(^^;)

ますたあ

考え方としては皆さんとほとんど同じですが。
私のはエラー処理もしっかりと組み込んであります。

G4={=IF(COUNTIF(C:C,E$3) ,INDEX(A$4:A$28,SMALL(IF(C$4:C$28=E$3,ROW($1:$24),""),ROW(A1))))}

H4={=IF(COUNTIF(C:C,E$3) .INDEX(B$4:B$28,SMALL(IF(C$4:C$28=E$3,ROW($1:$24),""),ROW(B1))))}

97文字ですが、エラー処理を外せば
{=INDEX(B$4:B$28,SMALL(IF(C$4:C$28=E$3,ROW($1:$24),""),ROW(B1)))}
65文字です。

ますたあ

短縮バージョン
G4=
{=INDEX(A$4:A$28,SMALL(IF(C$4:C$28=E$3,ROW($1:$24),""),ROW(B1)))}

H4=
{=INDEX(B$4:B$28,SMALL(IF(C$4:C$28=E$3,ROW($1:$24),""),ROW(B1)))}

minmax

ますたあさん
どのような入力&書式設定??
私がやるとエラー表示??

からくち

この問題は
>この問題は配列数式を理解(解る)する上での
>ある意味、基本中の基本のような・・・
と言うことで似たような式になってしまうと思います

:{=INDEX(A:A,1/MAX(1/30,LARGE((C$4:C$28=E$3)/ROW($4:$28),ROW(A1))))}

:{=INDEX(A:A,SMALL(FIND(C$4:C$28,E$3&C$4:C$28)*ROW($75:$99),ROW(A1))-71)}

:{=INDEX(A:A,SMALL((2-COUNTIF(E$3,C$4:C$28))*ROW($75:$99),ROW(A1))-71)}

:{=INDEX(A:A,SMALL((2-(C$4:C$28=E$3))*ROW($75:$99),ROW(A1))-71)}

:{=INDEX(A:A,2/LARGE((2-(C$4:C$28<>E$3))/ROW($75:$99),ROW(A1))-71)}

:{=INDEX(A:A,SMALL(TEXT(SUBSTITUTE(C$4:C$28&ROW($4:$28),E$3,),"0;;;!9!9")*1,ROW(A1)))}

:{=INDEX(A:A,SMALL(IF(C$4:C$28=E$3,ROW($4:$28),30),ROW(A1)))}


>なんか数量合計バージョンの
>解答がでてきそう・・・

G列
:{=INDEX(A:A,1/MAX(1/30,LARGE((FREQUENCY(IF(C$4:C$28=E$3,
MATCH(A$4:A$28,A$4:A$28,)),ROW($1:$24))>0)/ROW($4:$28),ROW(A1))))}

:{=INDEX(A:A,SMALL(IF(C$4:C$28=E$3,IF(MATCH(A$4:A$28,
IF(C$4:C$28=E$3,A$4:A$28),)=ROW($1:$25),ROW($4:$28),30),30),ROW(A1)))}

H列
:{=SUM((A$4:A$28=G4)*(C$4:C$28=E$3)*B$4:B$28)}

あそこをこう直せばもう少し短くなる等の突っ込みを入れないで下さい
この2式、同じ文字数に合わせてあります(お遊び序に)

この様に書き綴って改めて見ると
どの式にもINDEXとLARGEかSMALLが使われている

それならこの3関数を使用禁止にしてもう1つ作ってみよう

:=LOOKUP(ROW()-4,COUNTIF(OFFSET(C$1,,,ROW($1:$28)),E$3),A$2:A$29)

y sakuda

少し前に帰ってきて眺めてました。
基本的には同じようなものになりましたね・・・・
でも、kirさんの配列数式じゃないの、良く理解できてませんがやはりこう言うのできるんですね。感心しました。

ますたーさんの、申し訳ないですが、私も動きません。良く分からないので直せません。
くまぷーさんに完成版のファイル送ってアップしていただいた方が良いかも^^;

>ある意味、基本中の基本のような・・・
そう見たいですが、時々見かけるのですが、覚えてないw

で、これからからくちさんの研究しますが・・・・
>3関数を使用禁止
想像もつきませんでした^^;
すごい!


からくち

>kirさんの配列数式じゃないの、良く理解できてませんがやはりこう言うのできるんですね。
勘違いされないで下さい
Ctrl + Shift + Enterの代わりにINDEXを使っているだけです
全く同じ配列です

>ますたーさんの、申し訳ないですが、
どの式をさしているのかな・・・

minmax

念のため
C列すべておんなじ人
注文主空欄
もありですよね?

y sakuda

>Ctrl + Shift + Enterの代わりにINDEXを使っているだけです
私はIndex使っても、所謂Ctrl+Shift+Enter
を避けられなかった・・・・・・・

>どの式をさしているのかな・・・
エラーチェックをしていると言う長いバージョンです。
先の方が#Numになっちゃう^^;
IFで文字列にしているのがまずいんだと思うのですが・・・・


y sakuda

>C列すべておんなじ人
>注文主空欄
>もありですよね?
そのつもりでした。
確認してみたら、私の手抜きの58は空欄にするとダメでしたね^^;

y sakuda

からくちさんのLookup
実は私も最初Countifで注文主の数を数えて、その数の変わったところをピックアップしてと言う発想もやってたのですが、完成できませんでした。
あきらめて消しちゃったのでどういう形か良く分からないのですが、少なく共Lookupは思いついてなかったです。

見せられるとなるほどと思いましたが・・・・・

y sakuda

からくちさんの重複を合計するバージョン・・・
ぱっと見では理解できませんが、感激もんですねーー
すごすぎる^^

からくち

>Lookupは思いついてなかったです。
若しかしたら
{=INDEX(A:A,MATCH(ROW(A1),COUNTIF(OFFSET(C$1,,,ROW($1:$25)),E$3),))}
とした方が一般的かも知れませんが
これですと
{=IF(COUNTIF(C:C,E$3) などのようにエラー処理も必要になってしまいますので
わたしは結構多様しているLOOKUPをつい使ってしまいます

>長いバージョンです。
IFのエラー処理に書き落としありますね
のような

からくち

消えちゃってる

>長いバージョンです。
IFのエラー処理に書き落としありますね
<ROW(A1)、””、
のような

y sakuda

そうか。
{=IF(COUNTIF(C:C,E$3) なら上手く行きますね^^

からくち

>{=IF(COUNTIF(C:C,E$3) などのように

{=IF(COUNTIF(C:C,E$3)<ROW(A1),"",INDEX(A:A,MATCH(ROW(A1),COUNTIF(OFFSET(C$1,,,ROW($1:$25)),E$3),))}

などのように

y sakuda

失敗しちゃったw
改めて
{=IF(COUNTIF(C:C,E$3)<ROW(A1),"",INDEX(A$4:A$28,SMALL(IF(C$4:C$28=E$3,ROW($1:$24),""),ROW(A1))))}
なら上手く行きますね。

かず

私は短縮しきれず、60文字でした。

{=INDEX(A:A,SMALL(IF(C$4:C$28=E$3,ROW($4:$28),99),ROW(A1)))}

minmax

かなりのみなさんがH列の方は対応していないのかな??

からくち

>所謂Ctrl+Shift+Enterを避けられなかった・・・・・・・

>{=INDEX(A:A,29-LARGE(($C$4:$C$28=$E$3)*(26-ROW($1:$25)),ROW()-3),1)}
:=INDEX(A:A,29-LARGE(INDEX(($C$4:$C$28=$E$3)*(26-ROW($1:$25)),),ROW()-3),1)

>{=INDEX(A:A,SMALL(9^($C$4:$C$28<>$E$3)*ROW($4:$28),ROW(A1)))}
:=INDEX(A:A,SMALL(INDEX(9^($C$4:$C$28<>$E$3)*ROW($4:$28),),ROW(A1)))

>{=INDEX(A:A,SMALL(9^($C$4:C28<>$E$3)*ROW($4:28),ROW(A1)))}
:=INDEX(A:A,SMALL(INDEX(9^($C$4:C28<>$E$3)*ROW($4:28),),ROW(A1)))


む印

からくちさんの式は、どれもこれも凄いですねー、

特に重複削除の式は、きっと何かでまた役に立つから
ちゃんと勉強して理解せねば・・・

>3関数を使用禁止
LOOKUPって便利なんですねー、
からくちさんのお陰で少しずつ理解できるようにはなってきましたが、、
COUNTIFの範囲指定でOFFSET使って配列にするアイデアが在ってこそ!
こういうテクニックも覚えておかないと・・・φ(..)メモメモ

くまぷー

みなさん、今帰って来ました。
遅れてすみません。
今回は(も)手も足も出ませんでした。

それにしても、からくちさんの
数量合計バージョンはすごい!!
びっくりです。

くまぷー

ますたあさん、

>くまぷーさんに完成版のファイル送ってアップしていただいた方が良いかも^^;

宜しければファイルを送って下さい。
アップ致します。

くまぷー

ますたあさんの・・・

H4={=IF(COUNTIF(C:C,E$3) .INDEX(B$4:B$28,SMALL(IF(C$4:C$28=E$3,ROW($1:$24),""),ROW(B1))))}

INDEXの前が「.」になっているだけで
「,」に直せば動きますね。
商品のない欄はエラー表示になりますけど・・・

ジョー3

今見ました。・・・・・・・・

>みなさん、今帰って来ました。
>遅れてすみません。
>今回は(も)手も足も出ませんでした。

ふふふ・・・・・
手と、足どころか・・・・
ふふふ・・・・・
口も出ませんでした。
(風邪のせいにしておく・・・・)

・・・・

からくち

>LOOKUPって便利なんですねー、
そう思います
で、つい多用してしまいます
Ctrl + Shift + Enterも必要無いように出来ますし

これをVLOOKUPを使うと
:{=IF(COUNTIF(C:C,E$3) CHOOSE({1,2},COUNTIF(OFFSET(C$1,,,ROW($1:$28)),E$3),A$1:A$28),2,))}

一目瞭然

からくち

上記訂正

:{=IF(COUNTIF(C:C,E$3)<ROW(A1),"",VLOOKUP(ROW(A1),CHOOSE({1,2},COUNTIF
(OFFSET(C$1,,,ROW($1:$28)),E$3),A$1:A$28),2,))}


y sakuda

からくちさんの、Lookup,Vlookup及び重複ありバージョン正直なところ理解しきれてません・・・・
明日以降じっくり研究します^^;
しかし、それにしてもからくちさんの引き出しの多さには敬服します。

くまぷー

・・・ところで第22回はジョー3さんの予定なんですが
出題の準備は出来ていますでしょうか?

>20回む印さん
>21回sakudaさん

>の予定で

>ジョー3さんは22回ですね。

>その後、からくちさんが続きます。

問題の送付、準備ができましたら
よろしくお願いします。m(__)m

ますたあ

皆さん、大変ご迷惑をおかけしました。
申し訳ないです。

昨夜、酔っ払ってアップしようとしましたら
うまく表示できなかったんですね。
でっ、いじってたら何とか表示できたんですが
ちょっと変だな~とは感じましたが、まあいいかなんて...。m(__)m

エラー処理のところが切れてしまったんですね。^^;

再度、アップしてみます。

やってみましたが、なぜかうまく表示されません。
くまぷーさんとこにファイルを送ります。
よろしくおねがいします。

くまぷー

ますたあさん、わざわざすみません。
さっそく、アップさせて頂きました。
みなさん、ご覧下さい。m(__)m

y sakuda

私は配列数式は実用では全く使ってませんので、概念を分かってるだけでこなれてないことは自覚してましたが、今回のでつくづく分かってないことを痛感しました^^

からくちさんのVlookup版ですが、今朝改めて眺めて理解できました。
私は{1,1,1,2,2,2・・・・・}とならんだ、最初の1とか2のポジションを取得する手段がMatchしか思いつかず、Matchはなぜか配列数式の中でつかうと思うように機能せず断念したのですが、Chooseで配列を組み立ててVlookupとは・・・・・
同じ発想でもLookupの方がスマートなんですが、このVlookupを使えるようにした発想もうなっちゃいました。

わたしがやろうとしていたのを記憶で復元して、教えていただいたテクニックを使ってやってみた所上手く行きますね。
からくちさんのVlookupをMatchに変えただけの形ですが、エラー対応はしてません。
=INDEX(A:A,MATCH(ROW(A1),INDEX(COUNTIF(OFFSET($C$1,,,ROW($1:$28)),$E$3),),))

#Frequency使った重複版、未だ納得できてないです。今晩もう一度考えます^^;

む印

>ちゃんと勉強して理解せねば・・・
ということで
>{=INDEX(A:A,1/MAX(1/30,LARGE((FREQUENCY(IF(C$4:C$28=E$3,
>MATCH(A$4:A$28,A$4:A$28,)),ROW($1:$24))>0)/ROW($4:$28),ROW(A1))))}
を検証してて、何故わざわざLARGEを使われたのか・・・?

・・・で、やっと気づきました、「LARGEでも正順で表示する方法」
も示されたんだという事に!

y sakuda

からくちさんのFrequencyバージョン・・・・やっと理解できまっした。
芸が細かい・・・・・とても書ける気がしないです^^;

ところで、ジョー3の問題届かないんですかね?
ひょっとすると今週お休みになるのかな?

くまぷー

>ところで、ジョー3の問題届かないんですかね?

まだ、届きません。
何のコメントもないところをみると
ここも見ていないようですね。
今日は何らかのコメントがあるかとおもうのですが・・・

くまぷー

>ひょっとすると今週お休みになるのかな?

いや、そのときは・・・
からくちさんのを使わせてもらうつもりです。

supermab

今回のは、ホント難しかった・・・
配列数式を理解してないことを痛感!

それにしても、
ジョー3さんは
だいじょぶか?

心配なのだ!

jyo-3

あああ・・・・
すんませーーん

今送ります。
(もちろん次回に回っても結構です)

jyo-3

一応送りました。

で、

文字の間違い探し第2弾です。
1問目は、やってみました。
2問目は、やってません、、ははは、、、
(できないかも、わたし)

くまぷー

今、帰って来ました。
これから、食事をしてそれから
ジョー3さんから頂いた問題をあっぷします。

ジョー3さん、ありがとうございました。m(__)m

コメントの確認

コメントのプレビュー

プレビュー中です。コメントはまだ投稿されていません。

処理中...
コメントを投稿できませんでした。エラー:
コメントを投稿しました。 さらにコメントを投稿する

入力された文字と数字は画像と一致していません。再度入力してください。

最後に、下の画像の中に見える文字と数字を入力してください。これはプログラムを使ってコメントを自動的に投稿するのを防ぐために行われています。

画像を読み取れない場合は 別の画像を表示してください。

処理中...

コメントを投稿

アカウント情報

(名前は必須です。メールアドレスは公開されません。)

2024年8 月

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

TOP メニュー