[[20190802144231]] 『条件式 何か入力されてたら』(choko) ページの最後に飛ぶ

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

 

『条件式 何か入力されてたら』(choko)

表に何か入力されてたら支店名と数を書き出す方法がわかりません。
 
 
商品名 A支店 B支店 C支店 D支店

ああ   A   あ      
いい       A   あ  
うう   う   B   C   
ええ   3   T        
おお       7   6   

支店名 回数
A支店  2  
B支店  4
C支店  3

1.何か入力された支店だけをリスト化する方法
2.何か入力されてたらの何かをどうしたらいいのか

2はCOUNTAでできるけど1と2が組み合わさった時が分かりません。

教えてもらえないでしょうか。

< 使用 Excel:Office365、使用 OS:Windows10 >


 表がA1セルからE6セルの範囲とする。
 集計表はA9セルが見出しでA10セルからとする。
 G1セルからJ1セルを作業用セルとして使う。
 まず、G1セルに
 =IF(COUNTIF(B2:B6,"<>"),COLUMN(B1),"")
 と入力してJ1セルまでフィルコピーする。

(ねむねむ) 2019/08/02(金) 15:21


 次にA10セルに
 =IFERROR(INDEX(A$1:E$1,SMALL(G$1:J$1,ROW(A1))),"")
 と入力して下へフィルコピーする。
 最後にB10セルに
 =IFERROR(COUNTIF(OFFSET(A$2:A$6,,MATCH(A10,B$1:E$1,0)),"<>"),"")
 と入力して下へフィルコピーで。
(ねむねむ) 2019/08/02(金) 15:27

もう少し教えてもらえないでしょうか。

1.行がたくさんある場合
2.列もたくさんある場合

1は推定行数をB10000としとくのでしょうか。

2は列がたくさんあると
=IF(COUNTIF(B2:B6,"<>"),COLUMN(B1),"")をコピーするのが大変かもと。

=IF(COUNTIF(B2:B6,"<>"),COLUMN(B1),"")と
=IFERROR(INDEX(A$1:E$1,SMALL(G$1:J$1,ROW(A1))),"")が
ひとつになるような方法はありませんでしょうか。

(choko) 2019/08/02(金) 16:30


 行・列は最大でそれぞれ何件になるだろうか?

(ねむねむ) 2019/08/02(金) 16:33


毎回データ数が異なりますから最大は不明です。
昨日は行は1500件程度で少なかったです。
問題は列です。
どんどん増えていくようです。

基表を変更したら大丈夫でしょうか。

(choko) 2019/08/02(金) 16:41


 元の表がSheet1で集計表がSheet2だとする。
 また、元の表で最大が行は10000行、列はZZ列(約700列)とする。
 Sheet2のA2セルに
 =IFERROR(INDEX(Sheet1!A$1:ZZ$1,SMALL(IF(COUNTIF(OFFSET(Sheet1!A$2:A$10000,,COLUMN(A:ZZ)),"<>"),COLUMN(A:ZZ)+1,""),ROW(A1))),"")
 と入力してShiftキーとCtrlキーを押しながらEnterキーで式を確定(確定後、式が{}で囲まれればOK)

(ねむねむ) 2019/08/02(金) 16:58


 B2セルに
 =IFERROR(COUNTIF(OFFSET(Sheet1!A$2:A$10000,,MATCH(A2,Sheet1!B$1:ZZ$1,0)),"<>"),"")
 と入力(こちらは通常通りEnterで式を確定)、A2セルとB2セルを下へフィルコピーでどうか?
(ねむねむ) 2019/08/02(金) 17:00

きましたぁ!!感謝いたします。
どうなっているかさっぱり(哀)

当初の案を基表を縦横で変更して貼り付けてと考えてみましたが同じ支店名しか
きちんと修正できず同じ支店しか答えがでなかったです。
行と列がおかしいのかしら、来週じっくり考えます。

(choko) 2019/08/02(金) 17:10


縦横を変更した場合がやっぱり上手くできません。

=IF(COUNTIF(B2:B6,"<>"),COLUMN(B1),"")
        ↓
=IF(COUNTIF(C2:XFD6,"<>"),ROW(B1),"")

=IFERROR(INDEX(A$1:E$1,SMALL(G$1:J$1,ROW(A1))),"")
        ↓
=IFERROR(INDEX(B:B,SMALL(A:A,COLUMN(B1))),"")

(choko) 2019/08/05(月) 10:03


=IFERROR(INDEX(B:B,SMALL(A:A,COLUMN(B1))),"") が同じ支店名しか答えがでなくなりました。

商品名 ああ  いい  うう  ええ  おお

A支店  A       う   3
B支店  あ A B T 7
C支店  あ C 6
D支店

(choko) 2019/08/05(月) 13:06


 =IF(COUNTIF(C2:XFD6,"<>"),ROW(B1),"") 
 は
 =IF(COUNTIF(C2:XFD2,"<>"),ROW(C2),"") 
 元が同じB列の2行目から6行目の時に入力があればその列を、となっていたのを行列逆なので同2行目のC列から
 XFD列に値があればその行を、となる。

(ねむねむ) 2019/08/06(火) 09:19


 =IFERROR(INDEX(B:B,SMALL(A:A,COLUMN(B1))),"")
 こちらは下へフィルコピーするのであれば
 =IFERROR(INDEX(B:B,SMALL(A:A,ROW(A1))),"")
 横へフィルコピーするのであれば
 =IFERROR(INDEX($B:$B,SMALL($A:$A,COLUMN(A1))),"")
 となる。
(ねむねむ) 2019/08/06(火) 09:25

 ROW関数、COLUMN関数は式を入力したセルで1、フィルコピーした次のセルで2、その次のセルで3…を得るために
 使っているので下への場合はROW関数(行が変わるので)横への場合はCOLUMN関数(列が変わるので)を使っている。

(ねむねむ) 2019/08/06(火) 09:28


コメント返信:

[ 一覧(最新更新順) ]


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