- 締切済み
EXCELのデータカウントについて
下記のような表があり、A列の各会社が保有している商品コードの個数を 調べる関数式を作成しようとしております。 countif関数を使用し挑戦しましたがさっぱりうまくいかずお手上げ状態です・・・ 丸投げのようで大変申し訳ございませんが、お知恵を借りたくよろしくお願い致します。 【表】 A列 B列 1 社名 商品コード 2 A社 XXX 3 B社 XXX 4 B社 XXX 5 C社 XXX 6 D社 XXX 7 D社 XXX 8 D社 XXX 9 E社 XXX ・ ・ ・ 20000
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- kagakusuki
- ベストアンサー率51% (2610/5101)
今仮に、元データが存在しているシートがSheet1であるものとし、Sheet3のA列とB列を作業列として使用して、Sheet2のA列に各社名を、Sheet2のB列にその会社が保有している商品コードの個数を、自動的に表示させるものとします。 尚、以下の関数は、元データが入力されているシートにおいて、行やセルの切り取り、貼付け、挿入、等の編集作業を行っても、正常にカウント致しますし、同じ社で重複した商品コードが入力されていた場合には、重複している商品コードの内、後から入力されたものはカウントしないようになっています。 まず、Sheet3のA2セルに次の関数を入力して下さい。 =IF(COUNTIF(Sheet1!$A$1:INDEX(Sheet1!$A:$A,ROW()),INDEX(Sheet1!$A:$A,ROW()))=1,ROW(),"") 次に、Sheet3のB2セルに次の関数を入力して下さい。 =IF(OR(INDEX(Sheet1!$A:$A,ROW())="",INDEX(Sheet1!$B:$B,ROW())="",COUNTIF(B$1:B1,INDEX(Sheet1!$A:$A,ROW())&INDEX(Sheet1!$B:$B,ROW()))>0),"",INDEX(Sheet1!$A:$A,ROW())&INDEX(Sheet1!$B:$B,ROW())) 次に、Sheet3のA2~B2の範囲を選択してから、選択範囲を示す黒い太枠の内側にカーソルを合わせて、マウスを右クリックして下さい。 次に、現れた選択肢の中にある[コピー]をクリックして下さい。 次に、Sheet3を開いた状態で、名前ボックス(A1セルの上にあるアクティブな状態となっているセル番号が表示されている欄)をクリックし、上記の数式を貼り付けるセル範囲を指定して下さい。 例えば、Sheet1において、データが入力される可能性があるセル範囲が、A2~B20000である場合には、名前ボックスで指定するセル範囲を入力する際にも、同様にA2:B20000と入力して下さい。 次に、選択範囲を示す黒い太枠の内側にカーソルを合わせて、マウスを右クリックして下さい。 次に、現れた選択肢の中にある[貼付け]をクリックして下さい。 次に、Sheet2のA2セルに次の関数を入力して下さい。 =IF(ROWS($A$2:$A2)>COUNT(Sheet3!$A:$A),"",INDEX(Sheet1!$A:$A,SMALL(Sheet3!$A:$A,ROWS($A$2:$A2)))) 次に、Sheet2のB2セルに次の関数を入力して下さい。 =IF($A2="","",COUNTIF(Sheet3!$B:$B,$A2&"*")) 次に、Sheet3で行ったのと同様なやり方で、Sheet2のA2~B2の範囲をコピーして、Sheet2のA2~B20000の範囲に貼り付けて下さい。 以上です。
- mu2011
- ベストアンサー率38% (1910/4994)
>countif関数を使用し挑戦しましたがさっぱりうまくいかず ⇒うまくいかない点を説明された方が良いと思う。 A/B列の関係が良く判りませんが、単に社名をカウントすれば事が足りるのであれば次のような方法は如何でしょうか。 (1)別シートのA1を選択→データ→フィルタ→フィルタオプションの設定→指定した範囲を選択→リスト範囲欄に表のA列→抽出範囲欄にA1→重複するレコードは無視するを選択→OK (2)別シートのB2に=COUNTIF(表!A:A,A2)として下方向にコピー
- KURUMITO
- ベストアンサー率42% (1835/4283)
20000行ものデータが入力されているとしたら社名がダブって記入されていたり商品コードがダブって記入されていたりしないかと心配なことがありますね。 それらのことも間違えのない内容にするためには出来るだけ分かり易い方法で、計算にも負担のかからない方法で、作業列を作って対応するのがよいでしょう。 C2セルには次の式を入力します。 =A2&B2 D2セルには次の式を入力します。 =IF(A2="","",IF(COUNTIF(A$2:A2,A2)=1,MAX(D$1:D1)+1,"")) E2セルには次の式を入力します。 =IF(C2="","",IF(COUNTIF(C$2:C2,C2)=1,1,"")) C2セルからE2セルまでを選択してから右クリックして「コピー」します。 次に名前ボックス(表の左端上にC2と表示されている場所)にC2:C20000と入力します。確定しますとC2からC20000セルまでは範囲として選択されますので右クリックで「貼り付け」を行います。 次にはお求めの表ですが例えばG列に社名、H列に各社が保有する商品コードの数を表示させることにします。 G2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(ROW(A1)>MAX(D:D),"",INDEX(A:A,MATCH(ROW(A1),D:D,0))) H2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(G2="","",SUMIF(A:A,G2,E:E)) これで社名や商品コードの数についてダブりのないデータが表示されることになります。 なお、作業列が目障りでしたら列を選択してから右クリックして「非表示」を選択すればよいでしょう。
- imogasi
- ベストアンサー率27% (4737/17069)
こういうのを関数でやろうとする考えが、そもそもエクセルを知らない。 関数でこんなところに質問して、長い間冠げるの葉時間の無駄図解です。 ぴぼっとてーぶるでやってください。 例データ 社名 商品コード A社 123 B社 234 B社 21 C社 111 D社 222 D社 111 D社 333 E社 444 ーー データーピボットーー・・レイアウトのところで 行のところへ社名をD&D、データのところえ、商品コードをD&D、データの個数に選択しなおして完了。 データの個数 / 商品コード 社名 合計 A社 1 B社 2 C社 1 D社 3 E社 1 総計 8 ー 関数では データーフィルターフィルタオプションの設定ー「重複するレコードは無視する」で出す =COUNTIF($A$2:$A$100,C2) 式を下方向に複写。 A列のChoufukunasi、漏れ無しの会社名のリストを出す
- keithin
- ベストアンサー率66% (5278/7941)
=COUNT(1/FREQUENCY(IF($A$1:$A$2000="A社",MATCH($B$1:$B$2000,$B$1:$B$2000,0)),IF($A$1:$A$2000="A社",MATCH($B$1:$B$2000,$B$1:$B$2000,0)))) と記入して,コントロールキーとシフトキーを押しながらEnterで入力する。 もちろん実際には,式中の"A社"の部分は集計用に用意した表のA社と記入したセル番地を使うこと。 #間違い: >商品コードの個数を調べる これならごく単純に=COUNTIF(A:A,"A社")で出てくる個数は得られます。 正解: 各社の商品コードの種類の数を調べる ご相談でB列のデータがどれも手抜きでXXXになっているのも,肝心の何をしたいのか「具体的に一体どんな結果が欲しいのか」説明されていません。 丸投げは構いませんから,せめて前提となる「具体的にどんなデータが用意できる」と一番肝心の「何をしたいのか」ぐらいはちゃんと説明しましょう。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 一例です。 C列に表示するとします。 質問を見させていただくと2万行程度のデータがあるようなのでオートフィルでコピーするのも大変でしょうから・・・ データは2行目からあるとします。 C2セルに =IF(COUNTIF($A$2:A2,A2)=1,COUNTIF(A:A,A2),"") という数式を入れC2セルのフィルハンドルでダブルクリック これで各社重複なしに最初に出現した行に出現回数が表示されるはずです。 A~C列すべてを範囲指定 → データ → フィルタ → オートフィルタ → C列にある下向き▼をクリック → 「空白以外のセル」を選択すると何とか希望に近い形にならないでしょうか? 尚、VBAで別Sheetに表示する方法もありますが、今回はこの程度で・・・m(_ _)m