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

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

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

3回答

5071閲覧

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

HaruHAru

総合スコア8

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2015/07/19 17:29

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

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

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

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

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

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

よろしくお願いいたします!

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

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の全商品名一覧(重複なし)が完成しました。

商品名 リンゴ ミカン イチゴ
  1. 商品名毎にデータブックの各シートから売り上げ個数のデータを取得します

データシートに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はオートフィルタでなくても他に方法はありますので
動作が遅かったり、エラーで止まるようなら他の方法を調べてみてもいいと思います。

投稿2015/07/20 14:36

編集2015/07/20 14:43
hirohiro

総合スコア2068

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

投稿2015/07/20 02:18

horohoro

総合スコア490

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HaruHAru

2015/07/20 12:56

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

2015/07/20 21:42

VBAについては、以下のサイトが参考になるかと思います  http://excelvba.pc-users.net/  http://officetanaka.net/excel/vba/tips/index.htm C++の経験がそれなりにあるのなら、 Excelをcsvに変換するひと手間がありますが、 C++で処理するってのも一つの手ですね。 ちなみに関数でやる場合でも、商品名はセルを参照するようにすれば 全商品共通の関数で処理できます。 ※ちなみに、一気に最終出力を出そうとすると大変なので、  関数に合わせて編集用シートを用意する等の作業領域を用意すると  やりやすいですね。
guest

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/19 17:52

icham

総合スコア559

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HaruHAru

2015/07/20 12:57

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

2015/07/20 15:32

VBAを使わないとなると商品マスタとなるシートが必要になります。 商品マスタの作成は可能でしょうか? あと店舗ごとにファイルがあるのではなくて、シートがある? 店舗数100で、100ファイルじゃなく100シート?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問