複数の表を1つのデータにまとめたいのですが、良い方法はありませんでしょうか?

○下の表1.には各社の売上、表2.には各社の利益がランダムに並んでいます。
これを表3.のように、A社/売上/利益というように並べたいです。表1と表2では、稀に
A社、㈱Aなどど、同じ会社なのですが、㈱付きの場合があったり、スペースが開いていたります。
3,000件くらいの社数があるので、関数等でうまくやる方法はございませんでしょうか?
何卒よろしくお願いいたします。

表1. 売上
A社 100
B社 200
D社 300
C社 400

表2. 利益
㈱C 30
D㈱ 10
A 5
B㈱ 15


表3. 売上 利益
A社 100 5
B社 200 15
C社 400 30
D社 300 10

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2010/03/06 19:15:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:airplant No.2

回答回数220ベストアンサー獲得回数49

ポイント27pt

Excelの標準関数だけではできないので、マクロを使う必要があります。

なお、表1、表2を直接加工することにしていますので、元の表が必要なときは、どこかにコピーを取っておいてください。


Step1.「表2.利益」の会社名のゆれを無くし、「表1.売上」の会社名と同じにする

Step2.「表1.売上」の会社名を元にVLOOKUPで「表2.利益」から利益を取り出す


Step1.のゆれの無くする方法

(1)マクロを入れる

 http://q.hatena.ne.jp/1187227086 の「●マクロ」と書いた場所の関数を入れる。

 もし入れ方が分からないときは、下記を参考にしてください。

 http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_020.html

 マクロの記録を行って、できたマクロのところを全部消して、上の「●マクロ」に置き換えれば大丈夫です。


(2)ゆれをなくする

 適当なセルに次のような対応表を作ります。

 []の間には半角スペースと全角スペースが1個ずつ。

  [  ]*\(株\)[  ]* 

  [  ]*㈱[  ]*

  [  ]*株式会社[  ]* 

  [  ]*有限会社[  ]* 

  [  ]*[\((]株[\))][  ]* 

 左のセルが正規表現で記載した削除したい文字列です。

 正規表現で、スペース付きや特定文字列を表しています。

 上の対応表(2列×n行)を選択し、名前を付けます


 表2の会社名と利益の間(B列)に次の式を入れます。

「表2.利益」のB1セル

=ConvByRegExp(A1, ゆれリスト)

 同じ式を下までドラッグして、ゆれを取り除いた会社名が出ることを確認。


Step2.会社名を元にVLOOKUP

「表2.利益」に正しい会社名が入っているので、「表1.売上」にVLOOKUPを追加すれば、最終的な表(表3と同等)が出来上がります。

「表1.売上」C1セルの例

=VLOOKUP(A1,'表2. 利益'!$B$1:$C$1000,2,FALSE)

その他の回答2件)

id:km1967 No.1

回答回数541ベストアンサー獲得回数40

ポイント27pt

まずはお願いなのですが、「表」というのは何を意味しているのか明らかにしてください

もしExcelを意味しているのなら、Excelのバージョンや使用OSの種類、

VBAでプログラムを組んだ経験があるかなど、

何も判らないと回答は難しくなりますので、必須だとご記憶ください。

不適当な回答が集まっても混乱をきたしますから、私への返信欄か、

あるいは、コメント欄を開く設定に変更してコメント欄に、

書き加えておくことを勧めます。

id:megamax1010

大変失礼いたしました。

・表は、エクセルのことです。

・エクセル2007です。

・Windows7

・プログラムを組んだ経験はございません。

2010/02/27 20:46:45
id:airplant No.2

回答回数220ベストアンサー獲得回数49ここでベストアンサー

ポイント27pt

Excelの標準関数だけではできないので、マクロを使う必要があります。

なお、表1、表2を直接加工することにしていますので、元の表が必要なときは、どこかにコピーを取っておいてください。


Step1.「表2.利益」の会社名のゆれを無くし、「表1.売上」の会社名と同じにする

Step2.「表1.売上」の会社名を元にVLOOKUPで「表2.利益」から利益を取り出す


Step1.のゆれの無くする方法

(1)マクロを入れる

 http://q.hatena.ne.jp/1187227086 の「●マクロ」と書いた場所の関数を入れる。

 もし入れ方が分からないときは、下記を参考にしてください。

 http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_020.html

 マクロの記録を行って、できたマクロのところを全部消して、上の「●マクロ」に置き換えれば大丈夫です。


(2)ゆれをなくする

 適当なセルに次のような対応表を作ります。

 []の間には半角スペースと全角スペースが1個ずつ。

  [  ]*\(株\)[  ]* 

  [  ]*㈱[  ]*

  [  ]*株式会社[  ]* 

  [  ]*有限会社[  ]* 

  [  ]*[\((]株[\))][  ]* 

 左のセルが正規表現で記載した削除したい文字列です。

 正規表現で、スペース付きや特定文字列を表しています。

 上の対応表(2列×n行)を選択し、名前を付けます


 表2の会社名と利益の間(B列)に次の式を入れます。

「表2.利益」のB1セル

=ConvByRegExp(A1, ゆれリスト)

 同じ式を下までドラッグして、ゆれを取り除いた会社名が出ることを確認。


Step2.会社名を元にVLOOKUP

「表2.利益」に正しい会社名が入っているので、「表1.売上」にVLOOKUPを追加すれば、最終的な表(表3と同等)が出来上がります。

「表1.売上」C1セルの例

=VLOOKUP(A1,'表2. 利益'!$B$1:$C$1000,2,FALSE)

id:GreenStar No.3

回答回数192ベストアンサー獲得回数46

ポイント26pt

同じ会社なのに「NTT西」「NTT西日本」「エヌティティ」「エヌ・ティ・ティ」「西日本電信電話(株)」「西日本電信電話株式会社」さらには入力ミスで「MTT」なんてことは絶対に無いと言える?


データ入力時点から顧客管理ソフトや売上管理ソフトなどでキッチリ対応しているのであれば、上のような事は無いと思うけど、それならそれで、それぞれのソフトからデータを持って来るとか統合するのといったことを見当するのが妥当な方法だと思うし、そうでなければ何をやっても自動化なんてできませんよ。


集計する方法って意味じゃソフトなんて正直何でもいいんだけど、データが統一されてないってのなら、まずは統一するための別表がないとまとめようが無いですね。

表1の社名と表2の社名すべてを別表のA列に縦一列にコピーしてからB列に表3で使いたい社名を入力して別表を作る。作ったらA列昇順で並び替えておく。一回やればいいのだから、最初くらい我慢! そしてしっかりと確認!

A B
A社
A社 A社
B㈱ B社
B社 B社

表1と表2にはそれぞれ1列追加

A B C
A社 =VLOOKUP(A1,別表!$A:$B,2,FALSE) 100
B社 =VLOOKUP(A2,別表!$A:$B,2,FALSE) 200
D社 =VLOOKUP(A3,別表!$A:$B,2,FALSE) 300
C社 =VLOOKUP(A4,別表!$A:$B,2,FALSE) 400

こっちの式はコピーすればいいから、実際にいれるのは一行目だけ。

#N/Aってエラーが出たら、別表に、その会社を追加。追加したらA列で並び替えを忘れないようにね。


社名の統一がすんだら、ここからがExcelの出番。

データの統合とかピボットテーブルとか、いろいろな集計方法があるしグラフにもできる。

Excelの使い方は質問とは関係ない部分だから書かないけど、下記の説明を見るとだいたい判ると思う。

http://www.eurus.dti.ne.jp/~yoneyama/Excel2007/excel2007-tougou....

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません