質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.10%

複数枚のエクセルシート内の共通キーワードをカウントする方法を教えてください!

受付中

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 3,738

score 8

複数枚のエクセルシート内の共通キーワードをカウントする方法を教えてください!
※プログラミングはC++のみ扱ったことがあり、初心者です!

手元に3枚のエクセルシートがあります。
【シートの説明】
一列目には、1、2、3の順に100くらいのランキングが表記されています。
二列目には、商品の名前が書いてあります。
三列目以降には、商品が購入された個数などが書かれています。

3枚とも上記の要領でデータが作成されていますが、店舗ごとに1枚のデータとなっているため、商品の中には被っているものとそうでないものがあり、またランキングも若干異なります。

【やりたいこと】
①各シート内にある共通キーワード(商品名)の数をカウントしたい
例 「カッターナイフ」 シート1 シート2 シート3
1 0 1 計2個
②特定のキーワードが各シート内でどのランキングに当てはまるかも同時にカウントしたい
例 「カッターナイフ」 シート1 シート2 シート3
32位 圏外 21位

同じ様な作業が100ケースくらいあり、とてもマンパワーで一つ一つやるのは大変なので、
最初にプログラムを組んでしまおうかと考えておりますが、
初心者すぎて上手くやり方が思いつきません。

プログラミングでも、エクセル機能でも、
なんでもいいので教えていただけますと助かります!

よろしくお願いいたします!
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

0

SUMIF関数で出来る気がします。
合計用のセルにSUMIF(シート名!商品名の列(範囲指定),"カウントする商品名",個数の列(範囲指定))

商品名の列A、商品数の列Cとした時、売上シートに記載すれば出来ると思います。
=SUMIF(シート1!B1:B100,"カッターナイフ", "シート1!C1:C100")+SUMIF(シート2!B1:B100,"カッターナイフ", "シート2!C1:C100")+SUMIF(シート3!B1:B100,"カッターナイフ", "シート3!C1:C100")
ちょっと面倒ですがSUMIFを商品分のSUMIFをシートに書けば出来る気がします。

商品名マスターでもあれば、VBAでループさせる事も可能かと思います。
VBAが面倒であれば、全シートから重複を除いて商品一覧を作りだすことになると思います。
参考

同じ要領でLOOKUP関数を使えばランキングも出来ると思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/07/20 21:57

    大変申し訳ないのですが、VBAはほとんど触ったことがないため、
    もう少し詳しく教えて頂けますと嬉しいです><
    SUMIF関数のみでやると、商品数が1000以上あるのでものすごく大変です。。。

    キャンセル

  • 2015/07/21 00:32

    VBAを使わないとなると商品マスタとなるシートが必要になります。
    商品マスタの作成は可能でしょうか?

    あと店舗ごとにファイルがあるのではなくて、シートがある?
    店舗数100で、100ファイルじゃなく100シート?

    キャンセル

0

プログラムでやるとしたら、
・全集計対象のシートの商品名を、連想配列のキーに格納
※キーには商品名、値には集計用テーブルのインデックス(0からの連番)を入れる。
・集計用テーブルを用意
・各シートの商品名、ランキング、個数を読出し、集計テーブルに格納
※集計テーブルは、連想配列から取得した商品名のインデックス値へ格納する。
・集計テーブルの情報を元に結果を出力する。
といったところでしょうか...

Excelの関数(vloockupやsumif)だけでも、可能ではありますが、
新規データ毎に、結果を得る為のひと手間があるので、
VBAのほうが楽かと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/07/20 21:56

    大変申し訳ないのですが、VBAはほとんど触ったことがないため、
    もう少し詳しく教えて頂けますと嬉しいです><
    SUMIF関数のみでやると、商品数が1000以上あるのでものすごく大変です。。。

    キャンセル

  • 2015/07/21 06:42

    VBAについては、以下のサイトが参考になるかと思います
     http://excelvba.pc-users.net/
     http://officetanaka.net/excel/vba/tips/index.htm

    C++の経験がそれなりにあるのなら、
    Excelをcsvに変換するひと手間がありますが、
    C++で処理するってのも一つの手ですね。

    ちなみに関数でやる場合でも、商品名はセルを参照するようにすれば
    全商品共通の関数で処理できます。
    ※ちなみに、一気に最終出力を出そうとすると大変なので、
     関数に合わせて編集用シートを用意する等の作業領域を用意すると
     やりやすいですね。

    キャンセル

0

状況の確認ですが、次のような理解でいいですか?
エクセルファイルが100ほどあり
ファイルは3シート構成で、1シート1店舗
シートのフォーマットは次のように統一されている。
順位 商品名 購入数 etc etc
1  リンゴ    3
2  ミカン    1
3  イチゴ    0
.....
103 バナナ   0
私がやるとしたら次のような感じ
(自分しかメンテできない雑な使い捨てスクリプトになるでしょうけど。)
1. 作業用ブックを作り、そこに以下のようにVBAを書きます。
2. データブック(エクセルファイル)を1つのフォルダに全てコピーします。
3. VBAで1つづつブックにアクセスします。
  フォルダ内のブックに順にアクセスする。
  ※ファイル名一覧を取得する方法が書かれていますが、順にアクセスする方法のみ利用します。
4. 作業ブックにシートを追加します。
  データブック1つにつき、作業ブックの1シートを使います
5. データブック各シートの商品名列を全て取得し、4で作成したシートに貼り付けます。
  他ブックを開く際の注意
  他ブックのシートにアクセスしデータを取得、作業ブックにペースト
  入力されている最終行までをコピー
6. 5で取得した一覧から重複を取り除きます。
  重複行の削除
  これで、開いたデータブック内シート1,2,3の全商品名一覧(重複なし)が完成しました。
  商品名
  リンゴ
  ミカン
  イチゴ
7. 商品名毎にデータブックの各シートから売り上げ個数のデータを取得します
  データシートにVBAでオートフィルタを掛けて集計します
  ランクは情報もデータシートの1列目より取得します。
  (オートフィルタで一番若いランクで集計など)
  オートフィルタは条件を変更しながら次々実行できたと思います。
  集計結果を先ほどの作業シートの商品名一覧の横に記録します
  商品名 シート1 rnk シート2 rnk シート3 rnk
  リンゴ    3  1    0  -     0  -
  ミカン    2  2    1  1    0  -
  イチゴ    1  3    0  -    5  1
全データファイルに関して4-7の作業が終われば、作業ブックにデータファイルに対応した集計シートが完成しているはず。
7はオートフィルタでなくても他に方法はありますので
動作が遅かったり、エラーで止まるようなら他の方法を調べてみてもいいと思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.10%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る