ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Excel(エクセル)活用コミュのブランクを詰めて抽出したい。

  • mixiチェック
  • このエントリーをはてなブックマークに追加
初めて質問させていただきます。
エクセル2003を使用しています。何か良い方法がないか教えてください。

A店とB店の費用の内訳一覧を入力すれば、それぞれの店ごとの明細書を出力できるようにしたいと思っています。

その際に、その店で使わなかった費用の行を詰めて抽出するような計算式はあるでしょうか?
入力して出力する人は、エクセルをあまり使わないので、店ごとの明細書は出力だけすればいいようなファイルを作りたいと考えています。

宜しくお願いします。

コメント(9)

作業列を用意して、そこに関数でブランクでないところに、通し番号を表示
それを元に関数で抽出すれば出来ると思いますよ
>マリ男様
「関数でブランクでないところに、通し番号を表示」という方法がわからず、調べさせてもらいました。
COUNTA関数、初めて知りましたぴかぴか(新しい)
それを、VLOOKUPで抽出で出来ました。本当にありがとうございます。
IF関数をつなげたりとか、考えてみたんですが・・・
綺麗なスッキリした表が出来そうで嬉しいです。
>2
COUNTA関数でも出来ますね

ブランクか調べるのであれば、ISBLANK関数
ブランクの個数を調べるのであれば、COUNTBLANK関数
という関数なども存在します

VLOOKUP関数は左端に検索値が存在するときに検索が出来る関数なので
私は普段、INDEX関数とMATCH関数を併用していますね
私であれば例えば、
[方法1]
E2セル =IF(ISNUMBER(B2),MAX(E$1:E1)+1,"")
E2セルをE9セルまでコピー又はオートフィル
E2:E9をG2:G9までコピー又はオートフィル

B15セル A店
A16セル =IF(ROW()-ROW(A$15)>MAX($E$2:$E$9),"",IF(INDEX($A$2:$D$9,MATCH(ROW()-ROW(A$15),$E$2:$E$9,0),1)="","",INDEX($A$2:$D$9,MATCH(ROW()-ROW(A$15),$E$2:$E$9,0),1)))
B16セル =IF(ROW()-ROW(B$15)>MAX($E$2:$E$9),"",INDEX($A$2:$D$9,MATCH(ROW()-ROW(B$15),$E$2:$E$9,0),1+MATCH(B$15,$B$1:$D$1,0)))
A16:B16をA23:B23までコピー又はオートフィル

E15セル B店
D16セル =IF(ROW()-ROW(D$15)>MAX($F$2:$F$9),"",IF(INDEX($A$2:$D$9,MATCH(ROW()-ROW(D$15),$F$2:$F$9,0),1)="","",INDEX($A$2:$D$9,MATCH(ROW()-ROW(D$15),$F$2:$F$9,0),1)))
E16セル =IF(ROW()-ROW(E$15)>MAX($F$2:$F$9),"",INDEX($A$2:$D$9,MATCH(ROW()-ROW(E$15),$F$2:$F$9,0),1+MATCH(E$15,$B$1:$D$1,0)))
D16:E16をD23:E23までコピー又はオートフィル

H15セル 合計
G16セル =IF(ROW()-ROW(G$15)>MAX($G$2:$G$9),"",IF(INDEX($A$2:$D$9,MATCH(ROW()-ROW(G$15),$G$2:$G$9,0),1)="","",INDEX($A$2:$D$9,MATCH(ROW()-ROW(G$15),$G$2:$G$9,0),1)))
H16セル =IF(ROW()-ROW(H$15)>MAX($G$2:$G$9),"",INDEX($A$2:$D$9,MATCH(ROW()-ROW(H$15),$G$2:$G$9,0),1+MATCH(H$15,$B$1:$D$1,0)))
G16:H16をG23:H23までコピー又はオートフィル

[方法2]
E2セル =IF(ISNUMBER(B2),MAX(E$1:E1)+1,"")
E2セルをE9セルまでコピー又はオートフィル
E2:E9をG2:G9までコピー又はオートフィル

B15セル A店
A16セル =IF(ROW()-ROW(A$15)>MAX(INDIRECT(ADDRESS(2,4+MATCH(B$15,$B$1:$D$1,0))&":"&ADDRESS(9,4+MATCH(B$15,$B$1:$D$1,0)))),"",IF(INDEX($A$2:$D$9,MATCH(ROW()-ROW(A$15),INDIRECT(ADDRESS(2,4+MATCH(B$15,$B$1:$D$1,0))&":"&ADDRESS(9,4+MATCH(B$15,$B$1:$D$1,0))),0),1)="","",INDEX($A$2:$D$9,MATCH(ROW()-ROW(A$15),INDIRECT(ADDRESS(2,4+MATCH(B$15,$B$1:$D$1,0))&":"&ADDRESS(9,4+MATCH(B$15,$B$1:$D$1,0))),0),1)))
B16セル =IF(ROW()-ROW(B$15)>MAX(INDIRECT(ADDRESS(2,4+MATCH(B$15,$B$1:$D$1,0))&":"&ADDRESS(9,4+MATCH(B$15,$B$1:$D$1,0)))),"",INDEX($A$2:$D$9,MATCH(ROW()-ROW(B$15),INDIRECT(ADDRESS(2,4+MATCH(B$15,$B$1:$D$1,0))&":"&ADDRESS(9,4+MATCH(B$15,$B$1:$D$1,0))),0),1+MATCH(B$15,$B$1:$D$1,0)))
A16:B16をA23:B23までコピー又はオートフィル

A15:B23をコピー、D15セル、G15セルに貼り付け
E15セル B店
H15セル 合計
> マリ男様
使ったことのない関数ばかりで驚きました。
新しい関数を覚えて、活用出来るようになるのは楽しいです。
作成していただいた計算式をコピーさせてもらって、応用して使えるように勉強させていただきます。ありがとうございました。
良かったです
頑張って下さい

ところで、罫線はどのように設定しているのでしょうか?
もし手作業で罫線を引いているのでしたら、
折角、関数で抽出しているのですから、条件付き書式を使ってはどうでしょうか?

例えば、
一旦、A16:B23,D16:E23,G16:H23の罫線を無しにして

選択範囲[A16:B23]
<条件1>
数式が =AND(ROW()=16,$B$16<>"")
上、左右 : 実線
下 : 破線
<条件2>
数式が =AND($A16="",$B16<>"")
下、左右 : 実線
上 : 破線
<条件3>
数式が =AND(ROW()<>16,$A16<>"",$B16<>"")
左右 : 実線
上下 : 破線

選択範囲[D16:E23]
<条件1>
数式が =AND(ROW()=16,$E$16<>"")
上、左右 : 実線
下 : 破線
<条件2>
数式が =AND($D16="",$E16<>"")
下、左右 : 実線
上 : 破線
<条件3>
数式が =AND(ROW()<>16,$D16<>"",$E16<>"")
左右 : 実線
上下 : 破線

選択範囲[G16:H23]
<条件1>
数式が =AND(ROW()=16,$H$16<>"")
上、左右 : 実線
下 : 破線
<条件2>
数式が =AND($G16="",$H16<>"")
下、左右 : 実線
上 : 破線
<条件3>
数式が =AND(ROW()<>16,$G16<>"",$H16<>"")
左右 : 実線
上下 : 破線
逆に一旦、A16:B23,D16:E23,G16:H23の罫線を引いておいても出来ますね

例えば、
選択範囲[A16:B23]
<条件1>
数式が =AND($A16="",$B16<>"")
下、左右 : 実線
上 : 破線
<条件2>
数式が =AND(ROW()<>16,$A16="",$B16="")
上下、左右 : なし

選択範囲[D16:E23]
<条件1>
数式が =AND($D16="",$E16<>"")
下、左右 : 実線
上 : 破線
<条件2>
数式が =AND(ROW()<>16,$D16="",$E16="")
上下、左右 : なし

選択範囲[G16:H23]
<条件1>
数式が =AND($G16="",$H16<>"")
下、左右 : 実線
上 : 破線
<条件2>
数式が =AND(ROW()<>16,$G16="",$H16="")
上下、左右 : なし
>6のように一旦罫線を引いておいて、条件付き書式で
罫線をなしにしていくのであれば、以下の方法でも出来ますね


選択範囲[A16:B23]
<条件1>
数式が =MAX(INDIRECT(ADDRESS(2,4+MATCH(INDIRECT(ADDRESS(15,(COLUMN()+1)-MOD(COLUMN()-1,3))),$B$1:$D$1,0))&":"&ADDRESS(9,4+MATCH(INDIRECT(ADDRESS(15,(COLUMN()+1)-MOD(COLUMN()-1,3))),$B$1:$D$1,0))))=ROW()-ROW(A$15)
下、左右 : 実線
上 : 破線
<条件2>
数式が =MAX(INDIRECT(ADDRESS(2,4+MATCH(INDIRECT(ADDRESS(15,(COLUMN()+1)-MOD(COLUMN()-1,3))),$B$1:$D$1,0))&":"&ADDRESS(9,4+MATCH(INDIRECT(ADDRESS(15,(COLUMN()+1)-MOD(COLUMN()-1,3))),$B$1:$D$1,0))))<ROW()-ROW(A$15)
上下、左右 : なし

A16:B23をコピー、D16セル、G16セルに書式の貼り付け
> マリ男様
丁寧な説明ありがとうございます。

コピーして実践し、私が考えたものより綺麗な表が出来て喜んでいます。ただ、貼り付けて試しただけなので、これから、どういう式なのか一つ一つ調べていきたいです。

条件付書式は、いつも条件のつけ方がおかしくて(何がおかしいのかもわからず)、避けてきました。
罫線まで条件でつけることが出来るなんて知りませんでした。
こちらの方も頑張ってマスターして、エクセルのレベルアップを目指します!

質問しようか悩んでたのですが、質問して本当に良かったです。
ありがとうございます。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Excel(エクセル)活用 更新情報

Excel(エクセル)活用のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。