Gizport
1 回答
0
Share (facebook)
46
view
全般

EXCELの関数(自動反映)について教えて下さい~その4~ 引き続き...

EXCELの関数(自動反映)について教えて下さい~その4~ 引き続きご質問させて下さい。
今回は詳細を記載させて頂きます。過去の質問内容についてはリンクを張ります。

2010/8/1 23:29:19付質問:EXCELの関数(自動反映)について教えて下さい~その1~
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1344607658

2010/8/3 00:07:00付質問:EXCELの関数(自動反映)について教えて下さい~その2~
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1144660966

2010/8/8 21:45:51付質問:EXCELの関数(自動反映)について教えて下さい~その3~
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1044961715

添付の画像をご覧頂きたいのですが、
解決したい悩みは日付毎に営業所1で販売した商品のみを表示する「列J」に、
ところどころ空白の行が入ってしまっているので、
「列J」を反映させる過程で、途中の空白の行を飛ばして詰めるというものです。

「列B=日付」「列C=営業所」「列D=商品」となっており、
「列G」は日付毎に営業所1のみを抽出するように設定しています。

「列F=IF(B5="","",B5&COUNTIF($B$5:B5,B5))」で日付順に連番を振るようにしており、
「列G=IF(C5=1,F5,0)」で各日付の連番の中で営業所1のみピックアップしています。

「列J==IF(ISNA(MATCH($I$5&ROW(A1),$G:$G,0)),"",INDEX(D:D,MATCH($I$5&ROW(A1),$G:$G,0)))」で、「列I」に日付を入れると、その日付の営業所1の商品のみが表示されるようになっております。

現在のところ、「列J」は「行5・行6・行8・行10」に表示されてしまっており、
「列L」のように途中で空白の行を入れず詰めて表示させたいのですが、どうしたらよいでしょうか?
解決に向けた突破口やヒント等を教えて頂けないでしょうか???
(形式や関数にはこだわっておりません)

よろしくお願いいたします。
Yahoo!知恵袋 5027日前
コメントする
お気に入り
1
質問者が選んだベストソリューション
添付画像をご参照願います。

作業列は使用していません。
参照する元データの並びは、貴方のものと同じとします。
I5 に検索したい対象の「販売日」、J5 に検索したい対象の「営業所」を予め入力しておいたとします。
K5 以降の K列に、条件の一致した行の「商品」を表示させる数式です。

K5 セルの数式 :
=IF(SUM(($B$5:$B$22&$C$5:$C$22=$I$5&$J$5)*1)<ROW(A1),"",INDEX($B$5:$D$22,SMALL(IF($B$5:$B$22&$C$5:$C$22=$I$5&$J$5,ROW($5:$22)),ROW(A1))-4,3))

この数式を入力後、「Ctrl」+「Shift」+「Enter」で確定します。
(配列数式の為)

あとは K5 セルを下へ適当な行数分までコピペします。



*****

【数式の解説】


◆$B$5:$B$22&$C$5:$C$22

B5&C5、B6&C6、・・・B22&C22 と、日付と営業所を「&」で繋いで文字列にしています。

◆SUM(($B$5:$B$22&$C$5:$C$22=$I$5&$J$5)*1)

I5&J5 と一致しているか否かを判定して、一致したものを合計しています。
これはご存知の関数を用いた形に置き換えると
SUM(IF($B$5:$B$22&$C$5:$C$22=$I$5&$J$5,1,0))
IF 内で一致すれば「1」、しなければ「0」を返し、それを SUM で合計します。

◆ROW(A1)

ROW は行番号を返す関数です。
ROW(A1) A列1行目の行番号なので、即ち「1」となります。
これを下の行へコピペすると、ROW(A2)、ROW(A3)・・・と変化します。
つまり、自動的に「○番目」の指定の数値を増やす役割を持ちます。

◆IF(SUM(($B$5:$B$22&$C$5:$C$22=$I$5&$J$5)*1)<ROW(A1),"",INDEX~)

この数式を5行目以降にコピペした場合、ROW(A5)=5 なので、一致する総数「4」を超える事となり、IF 関数に従って「""」(空欄)表示となります。


<INDEX 文の中身>

◆IF($B$5:$B$22&$C$5:$C$22=$I$5&$J$5,ROW($5:$22))

繋いだ文字列が、検索したい条件を繋いだ文字列と一致した場合、その行番号を返します。
ここでは ROW 関数は本来の機能として、行番号の値を求める使い方をしています。
このデータの場合ですと、{5,6,8,10} という行番号の配列が抽出されます。

◆SMALL(IF(~略~),ROW(A1))

IF 文で返された行番号の内、ROW(A1)番目に小さい番号を求めます。
下へコピペすれば、2番目に小さいもの、3番目に小さいもの・・・と、指定が変化します。

◆INDEX($B$5:$D$22,SMALL(~略~)-4,3)

B5~D22 を全体範囲として、SMALL(~略~)-4 の行、3列目のデータを表示させる数式です。
SMALL の最後に「-4」としているのは、データの開始行が5行目からなので、その分を差し引いています。
INDEX 関数は、最初に示した「B5~D22」という範囲の、一番左上のセルを基準に、○行目、○列目を指定しなければならない為です。
Yahoo!知恵袋 5023日前
シェア
 
コメントする
 

参考になったと評価
  このQ&Aは参考になりましたか?

Share (facebook)
その他の解決方法を知っていますか?
回答する
全般
56
Views
質問者が納得Xi端末ご利用には、Xi契約、または新料金プランが必要です。 Xi端末にFOMA契約のSIMカードを入れても認識しませんのでご利用頂けません。 既にXiプランは、新規お申し込みを終了していますので、新料金プランとする必要があります。 契約変更手数料は、3,000円(税別)です。 料金表 https://www.nttdocomo.co.jp/charge/new_plan/bill_plan/index.html
3484日前view56
全般
67
Views
質問者が納得単純に「バージョンが違うものはだめ」でしょ。 バージョンが違えば当然コマンド(メニュー内容)が違うから。 同じバージョンで2台にインストールした場合を想定した移行なら 意味が分かりますけど。 面倒でも2つのバージョンを比較しながら手作業で設定してください。 ただし、「アクション」は、動作内容次第では移行できる場合があります。 (アクションに設定したショートカットキーを除いて)。
3645日前view67
全般
58
Views
質問者が納得はじめまして。 まずは、私が書いた知恵ノートがありますのでご覧ください。 http://note.chiebukuro.yahoo.co.jp/detail/n5671 しかし、貴方の場合は上記の知恵ノートでは解決できないと思います。 お使いのPCには2つの記憶装置があります。 一つは高速にアクセスできるSSD(容量64)と言う物です。 もう一つは通常のHDD(容量1500)です。 あえて容量の単位を書かず、数字で表現しましたが、ご覧のようにお使いのSSDの容量はHDDに比べ20分の1以下と非常に小さ...
3667日前view58
全般
52
Views
質問者が納得たしか、レビューを見たらドコモのケータイ自体が通知が来ないらしいです 私はAuなのできます
3695日前view52
全般
83
Views
質問者が納得毎回同じ状態になるのであれば、ショップに行ったほうがいいですね。その時だけなら様子見です。 そもそもその頃のARROWSなんて使い物にならない機種だけでしたから、機種変更も検討してみては?
3756日前view83

取扱説明書・マニュアル

1763view
http://www.nttdocomo.co.jp/.../F-07D_J_OP_All.pdf
159 ページ5.71 MB
もっと見る

関連製品のQ&A